Python 多个条件下随机
Python random while multiple conditions
干杯,我的问题是我暂时不知道如何处理多个条件。我真的不明白为什么这行不通:
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 AND b 高于 140 AND c 高于 110 但它每次在第一个 运行 后停止。
有人可以帮我吗?
您可以稍微更改逻辑并使用无限循环,然后 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
您可以在初始 while
循环中使用 or
而不是 and
,但我发现 break
逻辑更直观。
您正在重置循环体中的 a
、b
和 c
。
试试这个:
>>> 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)
>>>
实际上,当 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 循环中满足某些要求时停止。
干杯,我的问题是我暂时不知道如何处理多个条件。我真的不明白为什么这行不通:
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 AND b 高于 140 AND c 高于 110 但它每次在第一个 运行 后停止。
有人可以帮我吗?
您可以稍微更改逻辑并使用无限循环,然后 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
您可以在初始 while
循环中使用 or
而不是 and
,但我发现 break
逻辑更直观。
您正在重置循环体中的 a
、b
和 c
。
试试这个:
>>> 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)
>>>
实际上,当 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 循环中满足某些要求时停止。