while 和 for 语句迭代错误次数
While and for statements iterating wrong number of times
我的问题是为什么它重复随机次数而不是 100 次?添加 print (len(result))
只是为了检查它实际经过了多少次迭代,它始终是一个随机数而不是 100 次。
我也试过使用 for i in range(100)
但效果不佳。
# Die simulation
import random
min = 1
max = 6
counter_1 = 0
counter_2 = 0
counter_3 = 0
counter_4 = 0
counter_5 = 0
counter_6 = 0
i = 0
result = []
while i < 100:
if random.randint(min,max) == 1:
print ("The die landed on 1.")
counter_1 +=1
result.append(1)
elif random.randint(min,max) == 2:
print ("The die landed on 2.")
counter_2 +=1
result.append(2)
elif random.randint(min,max) == 3:
print ("The die landed on 3.")
counter_3 +=1
result.append(3)
elif random.randint(min,max) == 4:
print ("The die landed on 4.")
counter_4 +=1
result.append(4)
elif random.randint(min,max) == 5:
print ("The die landed on 5.")
counter_5 +=1
result.append(5)
elif random.randint(min,max) == 6:
print ("The die landed on 6.")
counter_6 +=1
result.append(6)
i +=1
print (result)
print (len(result))
print ("In a total of", 100, "number of simulations, The die landed on 1", counter_1, "times, landed on 2", counter_2, "times, landed on 3", counter_3 ,"times, ", end = '')
print ("landed on 4" , counter_4, "times, landed on 5", counter_5, "times, landed on 6", counter_6, "times.")
问题是您在每个 if
和 elif
检查上调用 random.randint
- 结果可能 none 检查通过,导致最终数组中的数字少于 100 个。您应该每次迭代只调用一次此函数,将结果存储在一个变量中,然后对其进行检查。
As :您正在重新创建随机数,因此两个条件都可能不匹配。
修复:
while i < 100:
random_number = random.randint(min,max)
if random_number == 1:
print ("The die landed on 1.")
counter_1 +=1
result.append(1)
elif random_number == 2:
print ("The die landed on 2.")
counter_2 +=1
result.append(2)
elif random_number == 3:
print ("The die landed on 3.")
counter_3 +=1
result.append(3)
elif random_number == 4:
print ("The die landed on 4.")
counter_4 +=1
result.append(4)
elif random_number == 5:
print ("The die landed on 5.")
counter_5 +=1
result.append(5)
elif random_number == 6: # else: would suffice
print ("The die landed on 6.")
counter_6 +=1
result.append(6)
i +=1
您的模具模拟器过于复杂。 random 可以一次生成一个包含 100 个骰子的列表。您可以使用计数器 class 轻松计算它们:
import random
min_value = 1 # min and max are already taken as names by built ins
max_value = 6
# create 100 random numbers 1 to 6 - range upper bound is exlusive, hence max_value+1
dices = random.choices(range(min_value,max_value+1), k= 100)
from collections import Counter
# create a dict that counts what dices happened how often
numbers = Counter(dices)
for die, count in sorted(numbers.most_common()):
print(f"Die {die} occured {count} times.")
print ("In a total of", 100, "number of simulations, The die landed on 1",
numbers[1], "times, landed on 2", numbers[2], "times, landed on 3",
numbers[3],"times, landed on 4" , numbers[4], "times, landed on 5",
numbers[5], "times, landed on 6", numbers[6], "times.")
输出:
Die 1 occured 13 times.
Die 2 occured 18 times.
Die 3 occured 15 times.
Die 4 occured 17 times.
Die 5 occured 20 times.
Die 6 occured 17 times.
In a total of 100 number of simulations, The die landed on 1 13 times,
landed on 2 18 times, landed on 3 15 times, landed on 4 17 times,
landed on 5 20 times, landed on 6 17 times.
阅读:
没错。 random.randint
应该像下面这样在循环中放置一次:
import random
min = 1
max = 6
counter_1 = 0
counter_2 = 0
counter_3 = 0
counter_4 = 0
counter_5 = 0
counter_6 = 0
i = 0
result = []
while i < 100:
holder=random.randint(min,max)
if holder == 1:
print ("The die landed on 1.")
counter_1 +=1
result.append(1)
elif holder== 2:
print ("The die landed on 2.")
counter_2 +=1
result.append(2)
elif holder == 3:
print ("The die landed on 3.")
counter_3 +=1
result.append(3)
elif holder == 4:
print ("The die landed on 4.")
counter_4 +=1
result.append(4)
elif holder == 5:
print ("The die landed on 5.")
counter_5 +=1
result.append(5)
elif holder == 6:
print ("The die landed on 6.")
counter_6 +=1
result.append(6)
i +=1
print (result)
print (len(result))
print ("In a total of", 100, "number of simulations, The die landed on 1", counter_1, "times, landed on 2", counter_2, "times, landed on 3", counter_3 ,"times, ", end = '')
print ("landed on 4" , counter_4, "times, landed on 5", counter_5, "times, landed on 6", counter_6, "times.")
我的问题是为什么它重复随机次数而不是 100 次?添加 print (len(result))
只是为了检查它实际经过了多少次迭代,它始终是一个随机数而不是 100 次。
我也试过使用 for i in range(100)
但效果不佳。
# Die simulation
import random
min = 1
max = 6
counter_1 = 0
counter_2 = 0
counter_3 = 0
counter_4 = 0
counter_5 = 0
counter_6 = 0
i = 0
result = []
while i < 100:
if random.randint(min,max) == 1:
print ("The die landed on 1.")
counter_1 +=1
result.append(1)
elif random.randint(min,max) == 2:
print ("The die landed on 2.")
counter_2 +=1
result.append(2)
elif random.randint(min,max) == 3:
print ("The die landed on 3.")
counter_3 +=1
result.append(3)
elif random.randint(min,max) == 4:
print ("The die landed on 4.")
counter_4 +=1
result.append(4)
elif random.randint(min,max) == 5:
print ("The die landed on 5.")
counter_5 +=1
result.append(5)
elif random.randint(min,max) == 6:
print ("The die landed on 6.")
counter_6 +=1
result.append(6)
i +=1
print (result)
print (len(result))
print ("In a total of", 100, "number of simulations, The die landed on 1", counter_1, "times, landed on 2", counter_2, "times, landed on 3", counter_3 ,"times, ", end = '')
print ("landed on 4" , counter_4, "times, landed on 5", counter_5, "times, landed on 6", counter_6, "times.")
问题是您在每个 if
和 elif
检查上调用 random.randint
- 结果可能 none 检查通过,导致最终数组中的数字少于 100 个。您应该每次迭代只调用一次此函数,将结果存储在一个变量中,然后对其进行检查。
As
修复:
while i < 100:
random_number = random.randint(min,max)
if random_number == 1:
print ("The die landed on 1.")
counter_1 +=1
result.append(1)
elif random_number == 2:
print ("The die landed on 2.")
counter_2 +=1
result.append(2)
elif random_number == 3:
print ("The die landed on 3.")
counter_3 +=1
result.append(3)
elif random_number == 4:
print ("The die landed on 4.")
counter_4 +=1
result.append(4)
elif random_number == 5:
print ("The die landed on 5.")
counter_5 +=1
result.append(5)
elif random_number == 6: # else: would suffice
print ("The die landed on 6.")
counter_6 +=1
result.append(6)
i +=1
您的模具模拟器过于复杂。 random 可以一次生成一个包含 100 个骰子的列表。您可以使用计数器 class 轻松计算它们:
import random
min_value = 1 # min and max are already taken as names by built ins
max_value = 6
# create 100 random numbers 1 to 6 - range upper bound is exlusive, hence max_value+1
dices = random.choices(range(min_value,max_value+1), k= 100)
from collections import Counter
# create a dict that counts what dices happened how often
numbers = Counter(dices)
for die, count in sorted(numbers.most_common()):
print(f"Die {die} occured {count} times.")
print ("In a total of", 100, "number of simulations, The die landed on 1",
numbers[1], "times, landed on 2", numbers[2], "times, landed on 3",
numbers[3],"times, landed on 4" , numbers[4], "times, landed on 5",
numbers[5], "times, landed on 6", numbers[6], "times.")
输出:
Die 1 occured 13 times.
Die 2 occured 18 times.
Die 3 occured 15 times.
Die 4 occured 17 times.
Die 5 occured 20 times.
Die 6 occured 17 times.
In a total of 100 number of simulations, The die landed on 1 13 times,
landed on 2 18 times, landed on 3 15 times, landed on 4 17 times,
landed on 5 20 times, landed on 6 17 times.
阅读:
没错。 random.randint
应该像下面这样在循环中放置一次:
import random
min = 1
max = 6
counter_1 = 0
counter_2 = 0
counter_3 = 0
counter_4 = 0
counter_5 = 0
counter_6 = 0
i = 0
result = []
while i < 100:
holder=random.randint(min,max)
if holder == 1:
print ("The die landed on 1.")
counter_1 +=1
result.append(1)
elif holder== 2:
print ("The die landed on 2.")
counter_2 +=1
result.append(2)
elif holder == 3:
print ("The die landed on 3.")
counter_3 +=1
result.append(3)
elif holder == 4:
print ("The die landed on 4.")
counter_4 +=1
result.append(4)
elif holder == 5:
print ("The die landed on 5.")
counter_5 +=1
result.append(5)
elif holder == 6:
print ("The die landed on 6.")
counter_6 +=1
result.append(6)
i +=1
print (result)
print (len(result))
print ("In a total of", 100, "number of simulations, The die landed on 1", counter_1, "times, landed on 2", counter_2, "times, landed on 3", counter_3 ,"times, ", end = '')
print ("landed on 4" , counter_4, "times, landed on 5", counter_5, "times, landed on 6", counter_6, "times.")