Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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 While循环的问题_Python_Python 3.x - Fatal编程技术网

Python While循环的问题

Python While循环的问题,python,python-3.x,Python,Python 3.x,好的,我基本上希望我的代码通过请求用户输入ROLL变量来工作,如果它是一个被指定为die(6,8,10,12,20)的数字,那么所有这些都可以工作,它选择一个随机数并输出它,很简单。但是我不能让循环退出,所以它说,虽然ROLL不等于'quit',但要做这些事情。我将在下面发布代码,但idk如何使其工作,以便当我输入'quit'时它关闭,现在当我输入时它输出'else'语句 #!/usr/bin/env Python3 ROLL = '' while ROLL != 'quit':

好的,我基本上希望我的代码通过请求用户输入ROLL变量来工作,如果它是一个被指定为die(6,8,10,12,20)的数字,那么所有这些都可以工作,它选择一个随机数并输出它,很简单。但是我不能让循环退出,所以它说,虽然ROLL不等于'quit',但要做这些事情。我将在下面发布代码,但idk如何使其工作,以便当我输入'quit'时它关闭,现在当我输入时它输出'else'语句

#!/usr/bin/env Python3

ROLL = ''

while ROLL != 'quit':

        import random
        ROLL=input("What sided Die would you like to roll(You may enter quit to close)? ")
        if ROLL == 6:
                print(random.randint(1, 6))
        elif ROLL == 8:
                print(random.randint(1, 8))
        elif ROLL == 10:
                print(random.randint(1,10))
        elif ROLL == 12:
                print(random.randint(1, 12))
        elif ROLL == 20:
                print(random.randint(1, 20))
        else:
                print("That's not an option please choose a die...")
print("Thank you")

我试图创建一个python 2/3答案

Python2
input
解释您的输入,例如,如果可能,将其转换为整数。所以不能有整数和字符串。当输入
quit
时,由于解释器不知道
quit
,因此会出现
namererror

使其工作的唯一方法是键入
“quit”
。但那将是Python2,仍然。。。现在让我们试着让它便于携带

python 3在比较字符串和数字时失败,因为
input
返回字符串

您将很难创建适用于两个版本的代码。我建议:

import random

# detect/create a portable raw_input for python 2/3
try:
    raw_input
except NameError:
    raw_input = input


while True:
    ROLL=raw_input("What sided Die would you like to roll(You may enter quit to close)? ")
    if ROLL.isdigit():
        ROLL = int(ROLL)

    if ROLL in [6,8,10,12,20]:
        print(random.randint(1, ROLL))
    elif ROLL == "quit":
        break
    else:
        print("That's not an option please choose a die...")
第一个
try
/
,除了
块是为了实现python 2/3的兼容性。如果存在
raw\u input
,请使用它,否则将其定义为python 3的
input
。从现在起,将使用原始输入,并返回字符串而不是整数

现在我们必须添加以下内容:
if ROLL.isdigit()
测试字符串是否可以转换为整数。如果可能,它会转换它

现在我们测试回复是否包含在选择列表中,如果包含,我们将使用
ROLL
进行随机测试(避免使用大量
elif
语句)


循环也已变为非条件循环,无需在开始时初始化
ROLL
。如果输入了
退出
,只需中断。

有一个简单的解决方法。但首先,上面发布的代码不起作用。因为ROLL是一个字符串,if/elif语句中的数字也需要是字符串

解决方案(一个简单的解决方案)是为“quit”情况使用一个额外的if语句,然后使用“continue”提前完成while循环,如下所示:

import random
ROLL = ''

while ROLL != 'quit':

    ROLL=input("What sided Die would you like to roll(You may enter quit to close)? ")
    if ROLL == 'quit':
        continue
    elif ROLL == '6':
        print(random.randint(1, 6))
    elif ROLL == '8':
        print(random.randint(1, 8))
    elif ROLL == '10':
        print(random.randint(1,10))
    elif ROLL == '12':
        print(random.randint(1, 12))
    elif ROLL == '20':
        print(random.randint(1, 20))
    else:
        print("That's not an option please choose a die...")

print("Thank you")

“continue”将使while循环重新开始,从而检查ROLL是否为“quit”。既然是,它将终止循环并说“谢谢”

代码中的主要错误是
input
返回一个字符串,并将其与整数进行比较。例如,
'6'
不等于
6

不过,通过将输入与允许值的元组进行比较,可以大大简化代码。这将是更短和更可扩展的

from random import randint

while True:
    roll = input("What sided Die would you like to roll(You may enter quit to close)? ")

    if roll == 'quit':
        break
    elif roll in ('6', '8', '10', '12', '20'):
        print(randint(1, int(roll)))
    else:
        print("That's not an option please choose a die...")

print("Thank you")

python 2解释您的输入。不能有整数和字符串。Python3在与数字比较时会失败,Python2在解释“退出”时会失败。我用的是3,老实说,我不知道你说的是什么意思。我想当我输入'quit'时,程序会说“好的,ROLL现在退出,所以我应该终止循环”,我应该说我正在学习用真正的语言编程。我在自学Python和Ruby。我自学了如何使用Linux和用Bash编写简单的东西,但我不知道你的评论应该告诉我什么。对不起,我是个新手,好吧,这更有意义,非常感谢。我真的很喜欢自己设计程序和简单游戏的想法,但我发现自己已经过度愤怒了好几次,我马上就要检查一下;我可以在工作时使用电脑,但足球让我们很忙。我会回来让你知道它是否成功。也谢谢你给我看你做的速记数组,而不是一堆if/elif,if ROLL-in[array]更干净,我真的很感激谢谢!这很好,我会记下你所做的一些改变。