【问题标题】:Python random while multiple conditionsPython随机同时多个条件
【发布时间】:2016-09-23 08:57:53
【问题描述】:

干杯,我的问题是我不知道如何在多个条件下做一段时间。我真的不明白为什么这不起作用:

import random

a = 0
b = 0
c = 0

while a < 190 and b < 140 and c < 110: # <-- This condition here
    a = 0
    b = 0
    c = 0

    for i in range(1, 465):
        v = random.randint(1, 3)

        if v == 1:
            a = a + 1
        elif v == 2:
            b = b + 1
        else:
            c = c + 1

    result = ""
    result += "a: " + str(a) + "\n"
    result += "b: " + str(b) + "\n"
    result += "c: " + str(c) + "\n"

    print (result)

我想循环这个直到 a 高于 190 并且 b 高于 140 并且 c 高于 110 但它在第一次运行后每次都停止。

有人可以帮我吗?

【问题讨论】:

    标签: python random multiple-conditions


    【解决方案1】:

    您可以稍微更改逻辑并使用无限循环,然后在满足您的条件时break 退出:

    while True:
        # do stuff
        if a >= 190 and b >= 140 and c >=110:
            break
    

    如果满足任何条件,则您的原始逻辑终止。例如,这个循环退出是因为a 在第一次迭代后不再是True

    a = True 
    b = True
    while a and b:
        a = False
    

    这个循环是无限的,因为b 总是True

    a = True
    b = True
    while a or b:
        a = False
    

    您可以使用or 而不是and 作为初始while 循环,但我发现break 逻辑更直观。

    【讨论】:

    • 我希望我每次都以 0 开始算法,所以总不能超过 465。这就是我这样做的原因。顺便说一句,这个答案做到了。你能告诉我为什么 while 条件不起作用吗?
    • @PatrickMlr 如果满足这些条件中的任何,您的初始while 循环将退出。例如,如果 a = 191 则循环将终止
    • 那么和是在python还是?真奇怪。
    【解决方案2】:

    您正在重置循环体中的abc。 试试这个:

    >>> count = 0
    >>> while a < 190 and b < 140 and c < 110 and count < 10: # <-- This condition here
    ...   count += 1
    ...   a = 0
    ...   b = 0
    ...   c = 0
    ...   print(count, a, b, c)
    ... 
    (1, 0, 0, 0)
    (2, 0, 0, 0)
    (3, 0, 0, 0)
    (4, 0, 0, 0)
    (5, 0, 0, 0)
    (6, 0, 0, 0)
    (7, 0, 0, 0)
    (8, 0, 0, 0)
    (9, 0, 0, 0)
    (10, 0, 0, 0)
    >>> 
    

    【讨论】:

      【解决方案3】:

      实际上,当 while 循环迭代并且您在每个循环中递增 465 次时,您只会显示“a,b,c”。这意味着如果您的 while 循环工作 4 次,它将随机增加 a、b、c 465*4 次。而你的价值观对于这种增量来说太小了。作为一种解决方案,如果您将 465 设为 250,您将看到它会一直工作,直到 c 达到 110 以上并完成迭代。

      for i in range(1, 250):
          v = random.randint(1, 3)
      

      250 c 达到 114 并完成迭代。这是因为 250 / 3 ~= 83 。当数字随机分配时,c 是最常见的到达者,它是极限。我认为你想要这样的东西;

      import random
      
      a = 0
      b = 0
      c = 0
      
      while a < 190 and b < 140 and c < 110: # <-- This condition here
          v = random.randint(1, 3)
          if v == 1:
              a = a + 1
          elif v == 2:
              b = b + 1
          else:
              c = c + 1
      
          result = ""
          result += "a: " + str(a) + "\n"
          result += "b: " + str(b) + "\n"
          result += "c: " + str(c) + "\n"
      
          print (result)
      

      它会一个一个地显示每个增量,当while循环中的一些要求满足时它会停止。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        • 2019-04-25
        • 1970-01-01
        • 2011-12-10
        相关资源
        最近更新 更多