2010-11-02 127 views
3

对于涉及化学元素的任务,是否有可能使用户输入等于变量。Python 3中的输入变量

例如,碳的分子量为12,但我不想用于输入12,他们应该输入'C'。但随着输入变成一个字符串,这是不可能喜欢这个变量C = 12.

有没有什么办法输入一个变量是一个字符串?

如果不是,我可以设置一个字符串作为变量。

例如:

C = 12 

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

print(element*multiplier) 

这会返回一个错误,指出不能被串繁殖。

+0

你有什么期待的答案吗? – SilentGhost 2010-11-02 18:40:37

+5

(题外话)碳的分子量是12.0107 g/mol,而不是12. – kennytm 2010-11-02 18:49:18

回答

8

你可以改变你的代码是这样的:

>>> 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

input in Python 3.x在Python 2.x中相当于raw_input,即它返回一个字符串。

评估表达式,如Python 2.x的inputuse eval,如doc for changes from 2.x to 3.0所示。

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

然而,eval允许任何Python代码的执行,所以这可能是非常危险的(慢)。大多数时候你不需要eval的力量,包括这个。由于您只是获得全局符号,因此您可以使用the globals() dictionary,并将字符串转换为整数,请使用the int function

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) 
+0

'eval'?你的答案读得如何,直到你击中“eval”! – SilentGhost 2010-11-02 18:48:30

+0

不要在这里使用'eval()','globals()'。使用'if element_symbol not in MASSES:...'。 – jfs 2010-11-02 19:08:02

+0

@JF:我同意'eval'和'globals'这就是为什么最终答案没有这些,但我不同意'if element_symbol not in MASSES:'over exception handling。 “要求宽恕比容许更容易。” – kennytm 2010-11-02 19:11:30

0

元=的eval(输入( “元素符号:”))

是最简单的,但不一定是最安全的。此外,您的符号需要在局部范围

你可能希望有一个字典对象

1

由于输入总是返回字符串类型。不允许乘以字符串。 因此,在采取input之后,如果在python中使用int类型,则需要输入cast。

试试这个:

multiply_string = input("how many? ") 
multiplier = int(multiplier_string) #type cast here as int