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.")

问题是您在每个 ifelif 检查上调用 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.")