Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用input()退出_Python_Loops_User Input - Fatal编程技术网

Python 使用input()退出

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

我是一个相当新的程序员,已经使用Python3工作了几个星期。我试着制作了一个小的魔法8球程序,在这个程序中,你可以得到一个问题的答案,它会问你是否想再玩一次。然而,无论我进入什么,它都不会退出,并不断循环。我不确定我做错了什么。非常感谢您的帮助

#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"):