为什么我的第二个输入循环不会回到循环开始?
Why won't my second input loop back up to start of loop?
所以我正在尝试创建代码,该代码接受 num_rolls
的用户输入,然后多次掷两个骰子。
它记录出现了多少个 6 和 7。然后打印出每一卷以及数字是多少。我让代码一直要求输入卷,直到他选择 1 退出循环并随后打印统计信息。
我遇到的问题是在询问我的第二个输入请求后,它只是继续执行代码。
如何让它返回并从 while
循环开始?我的第二个输入是在错误的位置还是我需要创建一个额外的循环?
代码如下:
import random
num_sixes = 0
num_sevens = 0
num_rolls = int(input('Enter number of rolls:\n'))
while num_rolls >= 1:
for i in range(1,num_rolls + 1):
die1 = random.randint(1,6)
die2 = random.randint(1,6)
roll_total = die1 + die2
#Count number of 6 and 7 rolled
if roll_total == 6:
num_sixes = num_sixes + 1
if roll_total == 7:
num_sevens = num_sevens + 1
if i in range(1,num_rolls+1):
print('Roll %d is %d (%d + %d)' % (i, roll_total, die1, die2))
num_rolls = int(input('Enter number of rolls:\n'))
print('\nDice roll statistics:')
print('6s:', num_sixes)
print('7s:', num_sevens)
else:
print('Invalid number of r2olls. Try again.')
I am having the code keep asking for an input forrolls in till he chooses 1 which exits the loops and prints the statistics afterwards.
如果要在num_rolls
等于1
时退出循环,那么需要测试while num_rolls > 1
而不是while num_rolls >= 1
。
如果你只想在程序最后打印掷骰子的结果,那么你应该去掉
print('\nDice roll statistics:')
print('6s:', num_sixes)
print('7s:', num_sevens)
从你的 while
循环,并把它放在程序的末尾。
您了解 while
循环末尾的 else
子句的作用吗?我很确定所产生的行为不是您想要的。如果您想验证用户的输入是否有效,则需要与 while
主循环分开进行。
由于您没有指定如何验证用户的输入,我将把这个任务留给您。其实很简单。有关详细信息,请参阅 Asking the user for input until they give a valid response。需要注意的最重要的一点是,您需要一个单独的循环。
这是经过上述修改后的代码:
import random
num_sixes = 0
num_sevens = 0
num_rolls = int(input('Enter number of rolls:\n'))
while num_rolls > 1:
for i in range(1,num_rolls + 1):
die1 = random.randint(1,6)
die2 = random.randint(1,6)
roll_total = die1 + die2
#Count number of 6 and 7 rolled
if roll_total == 6:
num_sixes = num_sixes + 1
if roll_total == 7:
num_sevens = num_sevens + 1
if i in range(1,num_rolls+1):
print('Roll %d is %d (%d + %d)' % (i, roll_total, die1, die2))
num_rolls = int(input('Enter number of rolls:\n'))
print('\nDice roll statistics:')
print('6s:', num_sixes)
print('7s:', num_sevens)
当上面的代码被测试时,它产生输出:
Enter number of rolls:
2
Roll 1 is 5 (2 + 3)
Roll 2 is 7 (1 + 6)
Enter number of rolls:
4
Roll 1 is 6 (3 + 3)
Roll 2 is 7 (5 + 2)
Roll 3 is 12 (6 + 6)
Roll 4 is 8 (6 + 2)
Enter number of rolls:
6
Roll 1 is 7 (6 + 1)
Roll 2 is 5 (3 + 2)
Roll 3 is 10 (5 + 5)
Roll 4 is 6 (1 + 5)
Roll 5 is 11 (5 + 6)
Roll 6 is 9 (3 + 6)
Enter number of rolls:
1
Dice roll statistics:
6s: 2
7s: 3
So how can I make it to where the user cant enter a negative number or a letter?
如果你想验证你的用户输入是一个正整数,你可以使用下面的代码1:
def get_num_rolls():
nrolls = input('Enter number of rolls:\n')
while not nrolls.isdigit():
nrolls = input('Enter number of rolls:\n')
return int(nrolls)
然后,您可以在需要获取用户输入的任何地方调用上述函数:
import random
def get_num_rolls():
nrolls = input('Enter number of rolls:\n')
while not nrolls.isdigit():
nrolls = input('Enter number of rolls:\n')
return int(nrolls)
num_sixes = 0
num_sevens = 0
num_rolls = get_num_rolls()
while num_rolls > 1:
...
num_rolls = get_num_rolls()
...
1上面的解决方案确实利用了 str.isdigit
returns false 对于负数这一事实作弊,但它仍然适用于您的案例。
所以我正在尝试创建代码,该代码接受 num_rolls
的用户输入,然后多次掷两个骰子。
它记录出现了多少个 6 和 7。然后打印出每一卷以及数字是多少。我让代码一直要求输入卷,直到他选择 1 退出循环并随后打印统计信息。
我遇到的问题是在询问我的第二个输入请求后,它只是继续执行代码。
如何让它返回并从 while
循环开始?我的第二个输入是在错误的位置还是我需要创建一个额外的循环?
代码如下:
import random
num_sixes = 0
num_sevens = 0
num_rolls = int(input('Enter number of rolls:\n'))
while num_rolls >= 1:
for i in range(1,num_rolls + 1):
die1 = random.randint(1,6)
die2 = random.randint(1,6)
roll_total = die1 + die2
#Count number of 6 and 7 rolled
if roll_total == 6:
num_sixes = num_sixes + 1
if roll_total == 7:
num_sevens = num_sevens + 1
if i in range(1,num_rolls+1):
print('Roll %d is %d (%d + %d)' % (i, roll_total, die1, die2))
num_rolls = int(input('Enter number of rolls:\n'))
print('\nDice roll statistics:')
print('6s:', num_sixes)
print('7s:', num_sevens)
else:
print('Invalid number of r2olls. Try again.')
I am having the code keep asking for an input forrolls in till he chooses 1 which exits the loops and prints the statistics afterwards.
如果要在
num_rolls
等于1
时退出循环,那么需要测试while num_rolls > 1
而不是while num_rolls >= 1
。如果你只想在程序最后打印掷骰子的结果,那么你应该去掉
print('\nDice roll statistics:') print('6s:', num_sixes) print('7s:', num_sevens)
从你的
while
循环,并把它放在程序的末尾。您了解
while
循环末尾的else
子句的作用吗?我很确定所产生的行为不是您想要的。如果您想验证用户的输入是否有效,则需要与while
主循环分开进行。由于您没有指定如何验证用户的输入,我将把这个任务留给您。其实很简单。有关详细信息,请参阅 Asking the user for input until they give a valid response。需要注意的最重要的一点是,您需要一个单独的循环。
这是经过上述修改后的代码:
import random
num_sixes = 0
num_sevens = 0
num_rolls = int(input('Enter number of rolls:\n'))
while num_rolls > 1:
for i in range(1,num_rolls + 1):
die1 = random.randint(1,6)
die2 = random.randint(1,6)
roll_total = die1 + die2
#Count number of 6 and 7 rolled
if roll_total == 6:
num_sixes = num_sixes + 1
if roll_total == 7:
num_sevens = num_sevens + 1
if i in range(1,num_rolls+1):
print('Roll %d is %d (%d + %d)' % (i, roll_total, die1, die2))
num_rolls = int(input('Enter number of rolls:\n'))
print('\nDice roll statistics:')
print('6s:', num_sixes)
print('7s:', num_sevens)
当上面的代码被测试时,它产生输出:
Enter number of rolls:
2
Roll 1 is 5 (2 + 3)
Roll 2 is 7 (1 + 6)
Enter number of rolls:
4
Roll 1 is 6 (3 + 3)
Roll 2 is 7 (5 + 2)
Roll 3 is 12 (6 + 6)
Roll 4 is 8 (6 + 2)
Enter number of rolls:
6
Roll 1 is 7 (6 + 1)
Roll 2 is 5 (3 + 2)
Roll 3 is 10 (5 + 5)
Roll 4 is 6 (1 + 5)
Roll 5 is 11 (5 + 6)
Roll 6 is 9 (3 + 6)
Enter number of rolls:
1
Dice roll statistics:
6s: 2
7s: 3
So how can I make it to where the user cant enter a negative number or a letter?
如果你想验证你的用户输入是一个正整数,你可以使用下面的代码1:
def get_num_rolls():
nrolls = input('Enter number of rolls:\n')
while not nrolls.isdigit():
nrolls = input('Enter number of rolls:\n')
return int(nrolls)
然后,您可以在需要获取用户输入的任何地方调用上述函数:
import random
def get_num_rolls():
nrolls = input('Enter number of rolls:\n')
while not nrolls.isdigit():
nrolls = input('Enter number of rolls:\n')
return int(nrolls)
num_sixes = 0
num_sevens = 0
num_rolls = get_num_rolls()
while num_rolls > 1:
...
num_rolls = get_num_rolls()
...
1上面的解决方案确实利用了 str.isdigit
returns false 对于负数这一事实作弊,但它仍然适用于您的案例。