【问题标题】:If-statement comparison failsIf 语句比较失败
【发布时间】:2015-09-18 02:13:22
【问题描述】:

我有这个提示:

你必须做化学作业,但你讨厌抬头 元素周期表上的元素!编写一个程序,取名为 来自标准输入的元素(作为字符串,独立于大小写)和 将表示其原子量的 double 打印到标准输出。 只执行前三个元素 Hydrogren 的程序, 氦和锂,它们各自的原子量为 1.008, 4.0026 和 6.94。如果输入了其他任何内容,请打印语句“对不起,我不认识那个元素!”

我写了一个代码,但总是得到错误的结果。不管我输入什么,它总是出现错误。标准输出一直显示“输入元素名称:”以及原子量数

这是我写的:

hydrogen = 1.008
helium = 4.0026
lithium = 6.94
atomic_weight = input("Enter element name:").lower()
if atomic_weight == hydrogen:
    print(hydrogen)
elif atomic_weight == helium:
    print(helium)
elif atomic_weight == lithium:
    print(lithium)
else:
    print("Sorry, I don't recognize that element!")

更新代码

hydrogen = 1.008
helium = 4.0026
lithium = 6.94
element_name = input("Enter element name:").lower()
if element_name == hydrogen:
    print(hydrogen)
elif element_name == helium:
    print(helium)
elif element_name == lithium:
    print(lithium)
else:
    print("Sorry, I don't recognize that element!")

【问题讨论】:

  • atomatic_weight 是一个字符串;这就是您将从input 得到的结果(否则.lower() 将不起作用。要将字符串与浮点数进行比较(因为您的元素是浮点数),您必须将字符串转换为浮点数。附加注意:浮点比较不精确。
  • 这对我们很有帮助,但对您解释您得到的“错误结果”更有帮助。如果您输入“无论我输入什么名字,我都会收到‘对不起……’”,您可能已经看到了问题所在。正确命名变量也可以为您省去麻烦;您不是在要求atomic_weight,我们知道它是一个数字。您要求element_name 为输入字符串提供更好的名称。
  • 感谢您的命名建议!

标签: python if-statement lowercase


【解决方案1】:

您正在将输入与原子量进行比较。您可能想将其与字符串进行比较,例如"hydrogen""helium""lithium"

【讨论】:

    【解决方案2】:

    终于弄明白了,输入应该是空的

    hy = 1.008
    he = 4.0026
    li = 6.94
    
    
    element_name = input("").lower()
    
    if element_name == "hydrogen":
        print(hy)
    elif element_name == "helium":
        print(he)
    elif element_name == "lithium":
        print(li)
    else:
        print("Sorry, I don't recognize that element!")
    

    【讨论】:

    • 如果你的意思是input("")里面的字符串;不,那没关系。您将在那里放置的任何内容都将在某人给出的实际输入之前使用一个字符串(问题)。那里有"Enter element name: " 非常好。
    【解决方案3】:

    如果您尝试使用名称访问原子量,您可能需要一本字典:

    elements = {'hydrogen': 1.008,
                'helium': 4.0026,
                'lithium': 6.94}
    
    name = input("Enter element name:").lower()
    print(elements.get(name, 'element not found!'))
    

    【讨论】:

    • 当然这是更 Pythonic 的方式,但请考虑您的受众。如果您要回答,请注意,您是在向那些无法理解类型和其他基本知识的人扔字典和非典型访问模式 (get)。
    【解决方案4】:

    感谢上面分享的所有人,写了我的版本并且它有效(我的第一个堆栈溢出帖子):

        hydrogen = 1.008
        helium = 4.0026
        lithium = 6.94
        element_name = input()
        name=element_name.lower()
    
        if name == "hydrogen":
            print(hydrogen)
        elif name == "helium":
            print(helium)
        elif name == "lithium":
            print(lithium)
        else:
            print("Sorry, I don't recognize that element!")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-02
      • 2019-01-26
      • 2022-11-16
      • 2021-10-17
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      相关资源
      最近更新 更多