2016-10-20 2 views
0

그래서 완전히 망쳐 놓은 프로그램이 있습니다. 내가하고 싶은 일은 동일한 글자 세 개가 표시되면 루프를 끊는 것입니다. 지금까지 내가 가진 것은 다음과 같습니다.동일한 문자가 세 번 표시되면이 루프를 종료하는 방법은 무엇입니까?

#Declaring letter variable 
letters = str('AEIOU') 

A = 0 
E = 0 
I = 0 
O = 0 
U = 0 

for i in range(0, 9): 
    print(random.choice(letters)) 
    if (random.choice(letters)) == ('A'): 
     A + 1 
     print(random.choice(letters)) 
     if A > 3: 
      quit() 

범위는 임의입니다. 시험 목적으로 만 사용하십시오. 나는 또한 while 루프를 사용해 보았지만 그것을 죽이는 방법을 알 수 없었다. 방금 무한 반복되었습니다 :

A = 0 
import random 
    while A < 3: 
    print(random.choice(letters)) 
    if (random.choice(letters)) == ('A'): 
     A + 1 
     print(random.choice(letters)) 
     if A > 3: 
      quit() 

어떤 제안이 있습니까?

import random 
A = 0 
while A < 3: 
    a = random.choice(letters) 
    if a == 'A': 
     A += 1 
     print(a) 

모든 문자를 추적하려는 경우를 사용 : 당신은 비교를 위해 임의 문자를 저장하고, 증가 된 카운터를 저장해야 ...

+1

A + 1은 파이썬에서 유효한 문이 아니다. 카운터 보관에 대한 귀하의 논리는 정확합니다. 당신이해야 할 것은'A = A + 1 ', 또는 단순한'A + = 1' – VlassisFo

+0

@Alan입니다 -'A + 1' 완벽하게 유효한 문이다. 그것은 단지 그 자체로는 유용하지 않습니다. – TigerhawkT3

+0

@ TigerhawkT3 그래, 그게 내가 의미했던거야. 결국 그렇지 않은 경우 오류가 발생합니다. – VlassisFo

답변

5

를 너무 미워하지 말아주세요 사전 :

import random 
letters = 'AEIOU' 
d = {'A':0, 'E':0, 'I':0, 'O':0, 'U':0} 
while 1: 
    letter = random.choice(letters) 
    d[letter] += 1 
    if d[letter] > 2: 
     break 
+0

도움을 많이 주셔서 감사합니다! –

0

당신은 어떻게 든 편지를 계산해야 - TigerhawkT3 표시된 것처럼 사전은 이러한 목적에 적합하다. 모든 항목에 기본값이있는 defaultdict를 사용하고 있습니다. 기본값을 int로 사용하므로 기본값은 0입니다. 이것은 다소 까다 롭지 만 배열을 초기화하는 시간을 절약 할 수 있습니다. 값의 양을 미리 또는 알 수없는 경우 성가 시게 될 수 있습니다.

당신이 루프 사용 "휴식"종료하려면 - 루프의 현재 수준을 나누기 - 중첩 루프 당신이 의해 복수의 휴식을 필요 있도록합니다. 파이썬 컬렉션 라이브러리에서 카운터를 사용

import collections 
import random 
letters = str('AEIOU') 
printed = collections.defaultdict(int) 

while True: 
    letter = random.choice(letters) 
    print(letter) 
    printed[letter] += 1 
    if printed[letter] > 2: 
     break 
+0

정말 도움을 주셔서 감사합니다! 이것은 또한 일했다! –

0

, 카운터에 대한

import random 
from collections import Counter 
letters = str('AEIOU') 

counter = Counter() 
limit = 3 
while 1: 
    letter = random.choice(letters) 
    print(letter) 
    counter[letter] += 1 
    if counter[letter] >= limit: 
     break 

참조 : https://docs.python.org/2/library/collections.html#collections.Counter

+0

고마워요! 이것은 완벽하게 작동합니다. 나는 카운터에 대해 몰랐다. 나는 더 많은 연구를 했어야했다. –

관련 문제