Python While循环问题

时间:2018-09-16 19:58:36

标签: python python-3.x

好吧,所以我基本上希望我的代码通过要求用户在ROLL变量上输入来工作,如果它是指定为模具的数字(6,8,10,12,20),那么所有工作都可以,一个随机数并输出它,很容易。但是我无法使循环退出,因此它说虽然ROLL不等于“退出”,但还是可以做。我将在下面的代码中发布,但是idk如何使其工作,以便当我输入“退出”时它关闭,现在当我执行时它会输出“其他”语句。

#!/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")

3 个答案:

答案 0 :(得分:1)

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

python 2 input解释您的输入,例如,尽可能转换为整数。因此,您不能有整数和字符串。输入quit时,由于口译员不知道quit,您将得到一个NameError

使其生效的唯一方法是键入"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 / except块,用于python 2/3兼容性。如果存在raw_input,请使用它,否则将其定义为python 3的input。从现在开始,将使用raw_input,并返回 strings 而不是整数。< / p>

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

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

循环也已变为无条件循环,无需在开始时初始化ROLL。如果输入了break,只需quit

答案 1 :(得分:1)

有一个简单的解决方法。但是首先,上面发布的代码不起作用。由于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")

“继续”将使while循环重新开始,从而检查ROLL是否为“退出”。既然如此,它将终止循环并说“谢谢”。

答案 2 :(得分:0)

代码中的主要错误是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")