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)