我有一个程序可以测试行星与太阳的距离。唯一的问题是,无论我说什么答案,它始终显示为正确。以下是我的代码的链接: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()
答案 0 :(得分:6)
问题是你有:
if mercury or mercury2 in ans:
如果True
评估为mercury
(它始终如此)或True
为mercury2 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: