Входные переменные в Python 3 - PullRequest
3 голосов
/ 02 ноября 2010

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

Например, у углерода есть молекулярная масса 12, но я не хочу, чтобы использование вводило 12, они должны вводить 'C' но так как входные данные превращают это в строку, невозможно сравнить это с переменной C = 12.

Есть ли способ ввести переменную вместо строки?

Если нет, могу ли я установить строку в качестве переменной.

пример:

C = 12

element = input('element symbol:')
multiplier = input('how many?')

print(element*multiplier)

Это просто возвращает ошибку о том, что вы не можете умножить на строку.

Ответы [ 4 ]

9 голосов
/ 02 ноября 2010

Вы можете изменить свой код следующим образом:

>>> masses = {'C': 12}
>>> element = input('element symbol:')
element symbol:C
>>> masses[element]
12
>>> multiplier = input('how many?')
how many?5
>>> multiplier
'5'                                          # string
>>> masses[element] * int(multiplier)
60
3 голосов
/ 02 ноября 2010

input в Python 3.x эквивалентно raw_input в Python 2.x, то есть он возвращает строку.

Чтобы оценить это выражение, как в Python 2.xinput, используйте eval, как показано в документе для изменений с 2.x до 3.0 .

element = eval(input("element symbol: "))
....

Однако, eval разрешает выполнение любого кода Python, поэтому это может быть очень опасно (и медленно).Большую часть времени вам не нужна сила eval, включая эту.Поскольку вы только что получили глобальный символ, вы можете использовать словарь globals() , а для преобразования строки в целое число использовать функцию int .

element = globals()[input("element symbol: ")]
multiplier = int(input("how many? "))

но если в любом случае нужен словарь, почему бы не реструктурировать программу и не сохранить все в словаре?

ELEMENTS = {'C': 12.0107, 'H': 1.00794, 'He': 4.002602, ...}

try:
  element_symbol = input("element symbol: ")
  element_mass = ELEMENTS[element_symbol]

  multiplier_string = input("how many? ")
  multiplier = int(multiplier_string)

  print(element_mass * multiplier)

# optional error handling
except KeyError:
  print("Unrecognized element: ", element_symbol)
except ValueError:
  print("Not a number: ", multiplier_string)
1 голос
/ 16 августа 2012

Поскольку входные данные всегда возвращают строковый тип. Умножение на строку не допускается. Поэтому после взятия input вам нужно набрать приведение, если вы используете тип int в python.

Попробуйте это:

multiply_string = input("how many? ")
multiplier = int(multiplier_string) #type cast here as int
0 голосов
/ 02 ноября 2010

element = eval (input ("element symbol:"))

будет самым простым, но не обязательно самым безопасным.Кроме того, ваш символ должен находиться в локальной области видимости

, вы можете предпочесть объект словаря

...