2016-09-23 2 views
0

건배, 내 문제는 여러 조건으로하는 동안 어떻게 해야할지 모르겠다는 것입니다. 이 작동하지 않습니다 난 정말 왜 그것을 얻을하지 않습니다여러 조건에서 파이썬 무작위로

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) 

내가 루프에 원하는 110 위 (140)와 C 이상 (190)와 B 이상하지만 첫 실행 후 매번 중단이 될 때까지.

누군가 나를 도와 줄 수 있습니까?

답변

4

당신은 논리적으로 약간을 변경하고 다음 break 당신의 조건이 충족 될 때 중 무한 루프 사용할 수 있습니다 조건의이 충족 된 경우

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

원래 논리를 종료합니다.

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

이 루프는 무한 b 항상 True 때문에 : a가 더 이상 첫 번째 반복 후 True 때문에 예를 들어,이 루프는 종료하지

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

당신은 대신 andor를 사용할 수 귀하 초기 while 루프,하지만 난 break 훨씬 더 직관적 인 로직을 찾으십시오.

+0

알고리즘을 매번 0으로 시작하면 총 465 개를 넘길 수 없습니다. 그게 내가 왜 그랬는지. Btw,이 대답은 그것을했다. 왜 만병이가 작동하지 않는지 말해 줄 수 있어요? –

+0

@PatrickMlr이 조건 중 * any *가 충족되면 초기 while 루프가 종료됩니다. 예를 들어'a = 191'이라면 루프는 –

+0

으로 끝날 것이고 파이썬이나? 이상하다. –

1

a, bc을 루프 본문으로 재설정 중입니다. 이 시도 : 사실 당신은 단지 "A, B, C,"while 루프 반복을 표시하고 각 루프에서 465 배 증가

>>> 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) 
>>> 
0

. 즉, while 루프가 4 번 작동하면 a, b, c가 무작위로 465 * 4 번 증가합니다. 그리고 당신의 가치는 너무 작아서 조금씩 증가합니다. 해결책으로, 250을 만들면 465 숫자를 줄일 수 있습니다. c가 110을 넘어 반복을 완료 할 때까지 작동 할 것입니다.

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

with 250c는 114에 도달하고 iterating을 완료합니다. 이것은 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 루프를 충족하면 중지됩니다.

관련 문제