【问题标题】:While and for statements iterating wrong number of timesWhile 和 for 语句迭代错误次数
【发布时间】:2019-03-31 21:05:57
【问题描述】:

我的问题是为什么它重复随机次数而不是 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.")

【问题讨论】:

    标签: python while-loop range dice


    【解决方案1】:

    问题是您在每个 ifelif 支票上都调用了random.randint - 结果可能没有任何支票通过,导致最终数组中的数字少于 100 个。您应该每次迭代只调用一次此函数,将结果存储在一个变量中,然后对其进行检查。

    【讨论】:

      【解决方案2】:

      没错。 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.")
      

      【讨论】:

        【解决方案3】:

        作为Robin Zigmond answered:您正在重新创建随机数,因此两个条件都可能不匹配。

        修复:

        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 个掷骰子的列表。您可以使用 Counter 类轻松计算它们:

        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.
        

        阅读:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-02
          • 2021-04-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多