当前位置: 代码迷 >> python >> Python While循环问题
  详细解决方案

Python While循环问题

热度:19   发布时间:2023-06-19 09:09:25.0

好的,所以我基本上希望我的代码通过要求用户输入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")

我试图创建一个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 ,并返回不是整数的字符串

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

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

该循环也已变为无条件循环,无需在启动时初始化ROLL 如果输入quitbreak

有一个简单的解决方法。 但是首先,上面发布的代码不起作用。 由于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是否为“退出”。 既然如此,它将终止循环并说“谢谢”。

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