Умножение нескольких переменных в python

#python #variables

#python #переменные

Вопрос:

Мой код выглядит следующим образом:

 box = raw_input('What is your box size')

op1 = float(box)*602,216,900,000,000,000,000,000

op2 = op1 * 1,000

print op2
  

Как получить значение op1, умноженное на 1000, вместо того, чтобы повторять его 1000 раз? Когда я использую аргумент float(), я получаю

 Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
TypeError: float() argument must be a string or a number
  

Комментарии:

1. Python не использует запятую в качестве разделителя тысяч. Запятая превращает ваши элементы в кортежи .

2. Не то чтобы ваш код здесь на самом деле создавал исключение, которое вы опубликовали.

Ответ №1:

Просто:

 op2 = op1 * 1000
  

запятые не допускаются в допустимых int объявлениях.

Применяя это ко всему вашему вопросу:

 box = raw_input('What is your box size')

op1 = float(box) * 602216900000000000000000

op2 = op1 * 1000

print op2
  

Теперь ваш код должен работать нормально. Вот еще немного информации о том, как работает объявление чисел в python.

Ответ №2:

Опубликованная вами ошибка указывает на то, что вы каким-то образом получили неверное значение в вашей box переменной из-за пользовательского ввода, но реальная проблема в вашем коде заключается в том, что вы создаете кортежи, а не большие числа.

Вы пытаетесь использовать « , » в качестве разделителя тысяч. Это не разрешено в числовых литералах в Python. Вместо этого анализатор увидит кортеж:

 op1 = (float(box)*602, 216, 900, 0, 0, 0, 0, 0)
  

Если затем вы хотите умножить результат на 1000, вы все равно должны опустить запятые:

 op1 = float(box) * 602216900000000000000000
op2 = op1 * 1000
  

…или вы просто получите приведенный выше результат внутри кортежа с 0 в качестве второго элемента.


Вторая проблема та же, хотя на нее сложнее смотреть, если вы не знакомы с тем, как работают кортежи и приоритет в Python.

Допустим, мы исправили первую строку, так что op1 это действительно значение с плавающей точкой (скажем 2.0 ) вместо кортежа. Затем интерпретатор обнаруживает эту строку:

 op2 = 2.0 * 1,000
  

Это эквивалентно:

 op2 = 2.0*1, 0  # We will assign a two-element tuple to the name "op2".
  

Что приводит к:

 op2 = (2.0, 0)  # The first element is now 2.0*1, and the second element is 0.
  

Как только вы исправите синтаксические проблемы, возможно, вам захочется представить этот неприятный литерал в более узнаваемой форме, чтобы очистить свой код:

 op1 = float(box) * 6.022169 * 10**23
  

…или, что еще лучше, поместите это в переменную, чтобы вы могли использовать ее в другом месте и знать, что, черт возьми, происходит:

 not_quite_avogadro_const = 6.022169 * 10**23
op1 = float(box) * not_quite_avogadro_const