【问题标题】:Counting/random int in while loop在while循环中计数/随机int
【发布时间】:2016-06-11 15:04:19
【问题描述】:

我希望这个 while 循环在每次迭代时更改数字(包括计数和随机整数。)但是当我运行程序时,循环只会继续计数和随机整数上的相同数字。:

# if 4 sides 
die1 = random.randint(1,4)
die2 = random.randint(1,4)
count = 1 

while sides == 4 and die1 != die2:
    print (count, ". die number 1 is", die1, "and die number 2 is", die2,".")
    count == count + 1

print ("You got snake eyes! Finally! On try number", count,".")

【问题讨论】:

  • 骰子游戏中的蛇眼通常意味着一对,而不仅仅是任何一对。
  • 要去掉输出中的无端空白,请考虑print("{}. Die number 1 is {} and die number 2 is {}.".format(count, die1, die2))

标签: python loops random while-loop integer


【解决方案1】:

您可以使用带有 iter 的 for 循环来吐出随机数对,enumerate 将进行计数,对于蛇眼,您还应该检查两者都是 1 不是随机匹配对:

from random import randint                                                                   

def repeating_rand(i, j):                                                                    
    for count, (r1, r2 ) in enumerate(iter(lambda: (randint(i, j), randint(i, j)), None), 1):
        if r1 == 1 and r2 == 1:                                                              
            return "You got snake eyes! Finally! On try number {}.".format(count)            
        print("Try no. {}, die number 1 is {} and die number 2 is {}".format(count, r1, r2)) 

输出:

 In [12]: repeating_rand(1, 4)
Try no. 1, die number 1 is 1 and die number 2 is 2
Try no. 2, die number 1 is 4 and die number 2 is 1
Try no. 3, die number 1 is 1 and die number 2 is 2
Try no. 4, die number 1 is 1 and die number 2 is 3
Try no. 5, die number 1 is 1 and die number 2 is 3
Try no. 6, die number 1 is 3 and die number 2 is 4
Try no. 7, die number 1 is 4 and die number 2 is 2
Try no. 8, die number 1 is 1 and die number 2 is 2
Try no. 9, die number 1 is 3 and die number 2 is 2
Try no. 10, die number 1 is 4 and die number 2 is 3
Try no. 11, die number 1 is 1 and die number 2 is 3
Try no. 12, die number 1 is 3 and die number 2 is 4
Out[12]: 'You got snake eyes! Finally! On try number 13.'

【讨论】:

    【解决方案2】:

    您还需要在while 循环内调用random,否则它们不会改变。另一件事是你比较==而不是设置=计数器:

    import random
    
    sides = 4
    count = 1 
    die1 = random.randint(1,4)
    die2 = random.randint(1,4)
    
    while sides == 4 and die1 != die2:
        print (count, ". die number 1 is", die1, "and die number 2 is", die2,".")
        count += 1
        die1 = random.randint(1,4)
        die2 = random.randint(1,4)
    
    print ("You got snake eyes! Finally! On try number", count,".")
    

    尝试测试运行给了我:

    1 . die number 1 is 4 and die number 2 is 3 .
    2 . die number 1 is 2 and die number 2 is 1 .
    3 . die number 1 is 1 and die number 2 is 2 .
    4 . die number 1 is 3 and die number 2 is 4 .
    5 . die number 1 is 1 and die number 2 is 4 .
    You got snake eyes! Finally! On try number 6 .
    

    一种几乎相同但使用break而不是while循环中的条件的替代方法是:

    import random
    
    sides = 4
    count = 1 
    
    def tossdie():
        """Function to create a random integer for a die"""
        return random.randint(1,4)
    
    while True:
        die1 = tossdie()
        die2 = tossdie()
        print (count, ". die number 1 is", die1, "and die number 2 is", die2,".")
        if die1 == die2:
            break
        count += 1
    
    print ("You got snake eyes! Finally! On try number", count,".")
    

    【讨论】:

      【解决方案3】:

      每次您调用random.randint(1,4),您都在创建一个随机数。每当您打印它时,它都不会神奇地更改为新的随机数。

      while 循环中使用random.randint(1, 4) 生成新的随机数。

      第二个问题是count == count + 1 检查是否相等(并在您的情况下返回False)。要进行赋值,请使用赋值运算符 =count += 1count 加一。

      如果你想要一个无休止地输出随机数的生成器,写一个:

      >>> import random
      >>> def rng(i, j):
      ...     while True:
      ...         yield random.randint(i, j)
      ... 
      >>> random_gen = rng(1, 4)
      >>> next(random_gen)
      2
      >>> next(random_gen)
      3
      >>> next(random_gen)
      2
      >>> next(random_gen)
      2
      >>> next(random_gen)
      1
      

      【讨论】:

        【解决方案4】:

        不知道你为什么需要sides 变量,所以我把它省略了。 您想在每个循环中掷骰子,这意味着您必须在每个循环中将die1die2 重新分配给一个随机数。

        import random
        
        # Initial parameters
        die1 = random.randint(1,4)
        die2 = random.randint(1,4)
        count = 1
        
        # Loop and roll die each time
        while die1 != die2:
            print(count, ". die number 1 is", die1, "and die number 2 is", die2,".")
            die1 = random.randint(1,4)
            die2 = random.randint(1,4)
            count += 1
        
        # Print on which die roll you got two equal die numbers rolled
        print ("You got snake eyes! Finally! On try number", count,".")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-15
          • 2016-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多