我的代码询问用户是否需要掷出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)
答案 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))
这使事情变得更通用,并消除了重复/冗余代码。