简单的python程序问题

时间:2012-08-14 16:13:25

标签: python windows string if-statement boolean

我有一个程序可以测试行星与太阳的距离。唯一的问题是,无论我说什么答案,它始终显示为正确。以下是我的代码的链接:http://pastebin.com/MimECyjm

如果可能的话,我想要一个更简单的答案,因为我不是那么精通python

有问题的代码:

mercury = "57.9"
mercury2 = "57900000"

def Mercury():
    ans = raw_input("How far is Mercury from the sun? ")
    if mercury or mercury2 in ans:
        print "Correct!"
        time.sleep(.5)
        os.system("cls")
        main()
    else:
        print "Incorrect!"
        Mercury()

3 个答案:

答案 0 :(得分:6)

问题是你有:

if mercury or mercury2 in ans:

如果True评估为mercury(它始终如此)或Truemercury2 in ans,则此if语句为True

mercury是一个非空字符串(mercury = "57.9"),它将评估为True。例如,尝试bool("57.9")以查看Python始终为非空字符串计算True。如果字符串为空,那么它将是False

因此,无论用户回答什么,您的代码总是会说它是正确的。这是你可以写的:

if mercury in ans or mercury2 in ans:

但写起来可能更好(参见下面评论中的讨论):

if ans in [mercury, mercury2]:

答案 1 :(得分:6)

你有这个:

if mercury or mercury2 in ans:

而不是:

if ans in (mercury, mercury2):

但是您有更深层次的问题。像这样的代码

def Mercury():
    ans = raw_input("How far is Mercury from the sun? ")
    if mercury or mercury2 in ans:
        print "Correct!"
        time.sleep(.5)
        os.system("cls")
        main()
    else:
        print "Incorrect!"
        Mercury()

最终将导致 stackoverflow 。这是因为您正在调用函数,但从不从它们返回!

您应该重新构建代码以使用while循环

您还应该考虑从程序中删除一些重复

例如你可以使用像这样的函数

def main():
    while True:    
        print "Planetary Distance from the Sun"
        time.sleep(.5)
        rand = random.randint(1,1)
        if rand==1:
            ask_planet_distance("Mercury", mercury, mercury2)
        elif rand==2:
            ask_planet_distance("Venus", venus, venus2)
        ...


def ask_planet_distance(planet_name, distance1, distance2):
    while True:
        ans = raw_input("How far is {} from the sun? ".format(planet_name))
        if ans in (distance1, distance2):
            break
        else:
            print "Incorrect!"
    print "Correct!"
    time.sleep(.5)
    os.system("cls")

您可以将行星数据存储在list

答案 2 :(得分:3)

问题在于你的if语句条件。

示例:

if ans == venus or venus2:

这应该是:

if ans == venus or ans == venus2: