Python 使用input()退出
我是一个相当新的程序员,已经使用Python3工作了几个星期。我试着制作了一个小的魔法8球程序,在这个程序中,你可以得到一个问题的答案,它会问你是否想再玩一次。然而,无论我进入什么,它都不会退出,并不断循环。我不确定我做错了什么。非常感谢您的帮助Python 使用input()退出,python,loops,user-input,Python,Loops,User Input,我是一个相当新的程序员,已经使用Python3工作了几个星期。我试着制作了一个小的魔法8球程序,在这个程序中,你可以得到一个问题的答案,它会问你是否想再玩一次。然而,无论我进入什么,它都不会退出,并不断循环。我不确定我做错了什么。非常感谢您的帮助 #Magic 8 Ball V2 import random import time class Magic8ball: def __init__(self, color): self.color = color
#Magic 8 Ball V2
import random
import time
class Magic8ball:
def __init__(self, color):
self.color = color
def getanswer(self):
responselist = ['The future looks bright!', 'Not too good...', 'Its a fact!',
'The future seems cloudy', 'Ask again later', 'Doesnt look too good for you',
'How would i know?', 'Maybe another time']
cho = random.randint(0, 7)
print ('Getting answer...')
time.sleep(2)
print (responselist[cho])
purple = Magic8ball('Purple')
blue = Magic8ball('Blue')
black = Magic8ball('Black')
while True:
print ('Welcome to the magic 8 ball sim part 2')
input('Ask your question:')
black.getanswer()
print ('Would you like to play again?')
choice = ' '
choice = input()
if choice != 'y' or choice != 'yes':
break
用于退出shell
此外,正如@jornsharpe所指出的,您希望在此行中使用和而不是或:
如果选择!='是的,还是选择!='是:
这是因为如果用户提供'y
',程序将进行两项检查:首先,它检查选项!='y'
,这是错误的。然后,因为您使用的是或,它会检查选项!='是“
,这是真的。因此,无论用户输入什么,程序都将打破while循环。代码有三个错误:
1)
不需要第一行,您将立即覆盖它
2)
不要这样做,只需使用输入(“您想再次播放吗?”)
3)
if choice!='行上的逻辑是的,还是选择!='是:
是错误的
在我看来,如果你这样做会更好:
if choice not in ("y", "yes"):
这会让你很清楚你想做什么
也可以考虑使用<代码>选择.LoReR()<代码>,只是为了方便用户。因此,
Yes
仍然很重要。您的布尔逻辑是错误的……如果您从未放弃,那么就会发生其他事情。如前所述,它应该总是退出。如果选项不在集合中([“y”,“yes”])
会更快。@RoadieRich为什么会这样set()
只是在创建列表后执行一些额外的操作(检查重复应用并创建一个新对象),增加了更多的开销。实际上,我会将列表更改为一个元组,因为据我记忆,它的速度要快一点。集合(…)
中的项是分期摊销的O(1)
,因为它会散列值<代码>列表中的项(…)
是O(n)
,因为它需要检查列表中的每个元素。@RoadieRich拜托,创建集合的开销远远超过了哈希表在两个元素上的微小效率(如果有,因为哈希需要时间)。您提到了不在…
与不在…
中的项相比,这种差异甚至更小,尤其是如果将集合创建移动到循环之外。
print ('Would you like to play again?')
choice = input()
if choice not in ("y", "yes"):