不太确定使用"或"时发生了什么?在python中

时间:2014-07-10 16:15:19

标签: python python-idle

我的代码询问用户是否需要掷出4,6或12个骰子,如果他们没有输入4,6或12个,他们应该再次被问到这个问题,直到他们进入它正确。它只是说现在一切都无效。这是我目前的代码:

number = int(input("Would you like to use a 4, 6 or 12 sided die\n"))
while number != 4 or number != 6 or number != 12:
    print("Invalid response")
    int(input("Would you like to use a 4, 6 or 12 sided die?\n"))
if number == 4:
    import random
    random4 = random.randint(1, 4)
    print("Your 4 sided die rolled a" ,random4)

elif number == 6:
    import random
    random6 = random.randint(1, 6)
    print("Your 6 sided die rolled a" ,random6)

elif number == 12:
    import random
    random12 = random.randint(1, 12)
    print("Your 12 sided die rolled a" ,random12)

7 个答案:

答案 0 :(得分:3)

你的逻辑流程有点偏。您在while循环之外询问数字,因此数字永远不会更新,而while会继续评估原始值。您需要将变量number设置为新输入调用的结果。

while number != 4 or number != 6 or number != 12:
    number = int(input("Would you like to use a 4, 6 or 12 sided die\n"))

编辑: 其他一些回应触及了另一个原因,即它也不会起作用。在说它没有效之前,你需要检查所有这些事情是否属实,而不是任何一个都是真的。数字不能同时为4,6和12。所以请使用and,或者更好:

while number not in [4, 6, 12]:

答案 1 :(得分:2)

为简化您的情况,请尝试以下方法:

while number not in (4, 6, 12):
...

您的情况不正确,无论如何,您的一张支票都是真的。

答案 2 :(得分:0)

您需要了解or的工作原理:

您的代码将脱离此循环:

while number != 4 or number != 6 or number != 12:

只要其中一个条件成立。假设您输入6,第一个条件number != 4仍为真,那么控件永远不会评估number != 6

您需要使用and

答案 3 :(得分:0)

你需要使用而不是或。 你的第一行是"检查用户是否没有滚动4;然后检查他们是否没有滚动6,然后检查他们是否没有滚动12",除了它分别完成所有这些操作。因此,滚动4仍然不是6而不是12;你需要使用和使用的地方或在第一行

答案 4 :(得分:0)

您需要使用and代替or。让我们一步一步地了解会发生什么。

while number != 4 or number != 6 or number != 12:

首先,输入4。该计划一步一步地走下这条路。

number != 4

这是假的,因为这个数字实际上是4。下一个:

number != 6

事实证明这是真的,因为我们提供了4而不是6。这意味着程序直接进入下一行代码,要求进行另一次代码。如果您想要“这些都不是真的”条件,则需要使用and代替or

答案 5 :(得分:0)

布什米尔斯建议你可以使用and。这是另一种方法。

from random import randrange
number = -1

while (number not in (4,6,12)):
  try:
    number = int(input("Would you like to use a 4, 6 or 12 sided die\n"))
  except ValueError:
    continue

print("Your {} sided died rolled a {}.".format(number,1+randrange(number)))

答案 6 :(得分:0)

这是一个保留原始结构的编辑。作为一个初学者,不要犹豫,像你一样编写简单,直接的代码。您的主要工作应该是让程序正常运行。您可以随时使用您所学习的最新概念返回并重构/重写代码。这就是它在所有技能水平上的表现。

在这种情况下,使用while True:消除复合OR语句。您可以分别使用带有==和!=的OR或AND。此外,当使用while循环时,您应该在循环外部使用传递值初始化选中的值 - 数字,即允许进入循环的值。

number = 0
while number != 4:
    #do stuff
    number = someNewValue

使用复合AND / OR条件时需要了解的一些事项是短路和运算符优先。

import random
while True: # loops until break
    number = int(input("Would you like to use a 4, 6 or 12 sided die?\n"))
    if number == 4:
        import random
        random4 = random.randint(1, 4)
        print("Your 4 sided die rolled a" ,random4)
        break
    elif number == 6:
        import random
        random6 = random.randint(1, 6)
        print("Your 6 sided die rolled a" ,random6)
        break
    elif number == 12:
        import random
        random12 = random.randint(1, 12)
        print("Your 12 sided die rolled a" ,random12)
        break

一旦工作,应该应用其他帖子中的一些想法。其他想法是使其成为一种功能,并使模具尺寸列表成为变量。

最终代码可能看起来像这样。

from random import randrange

DIE_CHOICES = {4, 6, 12}

def roll(choices):
    while True:
        try:
            choice = int(input('Would you like to use a 4, 6 or 12 sided die?\n'))
        except ValueError:
            continue
        if roll in choices:
            return choice, 1 + randrange(choice)
        else:
            print 'Please pick a legal die size.\n'

print 'Your {} sided die rolled a {}.'.format(roll(DIE_CHOICES))

这使事情变得更通用,并消除了重复/冗余代码。