#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