safro
но он не работает при заполнении списка с клавиатуры в строчку
Вводить надо строку. А вот когда ты ввёл, ты строку разбиваешь на куски, а потом эти куски, которые тоже являются строками, преобразуешь в целые или вещественные числа.
>>> '123' + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be str, not int
>>> int('123') + 1
124
>>> float('123') + 1
124.0
>>>
Естественно, что со строками можно выполнять только операции для строк, а чтобы числовые операции выполнять, надо выполнять их с числами. И операция унарного минуса - это числовая операция.
safro
Перешел с другого языка, поэтому могу довольно глупые вещи делать
Есть языки, которые сами преобразуют неявно одни типы к другим, но они тоже именно преобразуют типы, просто делают это в скрытом виде.
К строке тоже можно применить и операцию сложения и операцию умножения, но это “сложение” и это “умножение” является строчным и никакого отношения к числовому “сложению” и числовому “умножению” не имеет.
В математике же может быть вообще много сложений и умножений. Например, у целых чисел одно сложение и одно умножение (хотя это два умножения - левое и правое), а у векторов - одно сложение и два умножения: скалярное уножение и векторное умножение. А у матриц вообще умножение такое, что менять множители местами нельзя, ты можешь умножить матрицу A на матрицу B, но не можешь умножить ту же матрицу B на ту же матрицу A. А если ты можешь их умножить так, то получится вообще другой результат.
Оттуда и путаница. Ты думаешь, что операции непоколебимы, в то время как, на самом деле, они довольно таки вариативные и у них могут быть какие-то свои особенности.