2017-03-23 2 views
-1
import random, string 

goal='methinks it is like a weasel' 

def simulation(length): 
    return ''.join(random.choice('abcdefghijklmnopqrstuvwxyz ') for i in range(length)) 

def score(stri): 
    if stri==goal: 
     print(100) 
    else: 
     print(0) 

n=0 
stri='abcd' 
while score(stri) != 100: 
     n += 1 
     stri = simulation(28) 
print(n) 

마지막 while 루프의 경우 점수 (스트라이드)가 100이 아닌 한 it 반복하고 n을 쌓을 것입니까? 그럼 난 점수 (스트)이 동일 (100)while 루프를위한 파이썬 카운터 혼동

에 무슨 일이 있었 축적 된 N을, 인쇄 출력 할 수 있습니다하지만이 같은 결과를 얻었다 : 분명히

0 
0 
0 
0 
0 
0 
... 

항상 'N = 0'하고 출력하기 것; 이것은 글로벌 변수이기 때문입니다.

하지만 다음 루프 동안 매우 쉽게 시도 : 루프 때문에 def()의 잘못된 STH을 느끼는 동안

n=0 
while n <= 5: 
    n += 1 
print(n) 

성공적으로 내 첫 번째 코드가 잘못 왜 모르겠어요 6

을 출력하는 것은 추측?

+0

'score'의 값을 반환하지 않으므로 인쇄 중이므로 'score'는 'None'을 반환합니다. 그리고'None! = 100'은 항상 거짓으로 평가 될 것입니다. –

+0

사용중인 튜토리얼을 계속 진행하고, 기본적인 질문과 같은 질문보다는 기능에 관한 부분을 읽어보십시오. – TigerhawkT3

+0

기록을 위해,이 예제 코드는 모든 의도와 목적을 위해 무한 루프입니다. 28 개 값 각각에 대해 27 개의 옵션이 있으며, 28 개 값 각각은 루프가 끝날 때까지 '목표'와 일치해야합니다. 우연히 발생하는 확률 (확률을 0으로 줄일 수있는 PRNG 출력에서의 사이클 문제를 무시 함)은 27 * 28에서 1입니다. RNG가 정말로 무작위 적이라면 (사이클이 안됨) 132 비트가 넘을 것입니다 목표를 달성 할 확률이 50 %가되기도 전에 비교를 위해, AES128은 무력에 불가능한 것으로 간주되며, 그 작업은 128 비트에 불과합니다. 이것은 10 배 이상입니다. – ShadowRanger

답변

0

는 대신 인쇄의 score에서 반환해야합니다

def score(stri): 
    if stri==goal: 
     return 100 
    else: 
     return 0 

이것은 당신이 score 만 인쇄 (디스플레이 출력)하고 값을 반환하지가에 사용되는이되는 함수를 호출 할 때하기 때문에 여기 while score(stri) != 100: 실패 while 루프 조건.

+0

고마워요! 그것이 문제이다! 이것은 반환 대 인쇄물을 이해하는 아주 좋은 예입니다. – user815408