【问题标题】:Input variables in Python 3Python 3 中的输入变量
【发布时间】:2010-11-02 18:37:27
【问题描述】:

对于涉及化学元素的任务,是否可以让用户输入等于变量。

例如,碳的分子质量为 12,但我不想让用户输入 12,他们应该输入“C”。但由于输入将其转换为字符串,因此不可能将其与变量 C = 12 相匹配。

有没有办法输入变量而不是字符串?

如果没有,我可以将字符串设置为变量吗?

示例:

C = 12

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

print(element*multiplier)

这只是返回一个错误,说明你不能乘以一个字符串。

【问题讨论】:

  • 您希望得到什么答案?
  • (题外话)碳的分子量是 12.0107 g/mol,而不是 12。

标签: python input python-3.x


【解决方案1】:

您可以像这样更改代码:

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

【讨论】:

    【解决方案2】:

    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)
    

    【讨论】:

    • 请勿在此处使用eval()globals()。使用if element_symbol not in MASSES: ...
    • @JF:我同意evalglobals 这就是为什么最终答案没有这些,但我不同意if element_symbol not in MASSES: 的异常处理。 “请求宽恕比请求许可更容易。”
    【解决方案3】:

    由于输入总是返回字符串类型。不允许与字符串相乘。 所以在取input之后,如果在python中使用int,则需要进行类型转换。

    试试这个:

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

    【讨论】:

      【解决方案4】:

      element = eval(input("元素符号:"))

      可能是最简单的,但不一定是最安全的。另外,您的符号需要在本地范围内

      你可能更喜欢有一个字典对象

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        相关资源
        最近更新 更多