问题与简单的Python程序

我有一个程序来问我行星离太阳有多远。 唯一的问题是,无论我把什么答案总是显示正确。 这里是我的代码的链接: 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() 

    问题是你有:

     if mercury or mercury2 in ans: 

    如果mercury计算结果为True (总是这样),或者当mercury2 in ans mercuryTrue ,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]: 

    你有这个:

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

    最终会导致一个计算器 。 这是因为你正在调用函数,但从来没有从他们回来!

    您应该重构代码以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您可以更进一步

    问题是你的if语句的条件。

    例:

     if ans == venus or venus2: 

    这应该是:

     if ans == venus or ans == venus2: