2017-03-23 13 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ループでは、スコア(stri)が100に等しくない限り、繰り返し、nを累積します。それから私は、スコア(STRI)が等しい100whileループのPythonカウンタの混乱

に起こっ蓄積nは、プリントアウトだろう。しかし、私は次のような結果を得た:明らかに

0 
0 
0 
0 
0 
0 
... 

それは常に「N = 0」outputingています。これはグローバル変数なのですから?

しかし、私は、ループがしながら、非常に簡単に試してみました:ループが原因def()の間違ったSTHを取得しながら

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

それが正常に私の最初のコードがうまくいかない理由を私は知らない6

を出力していますが、推測しますか?

+0

'score'から何も返されていないので、あなたは印刷しているだけなので、' score'は 'None'を返します。そして、「None!= 100」は常にfalseと評価されます。 –

+0

あなたが使っているチュートリアルを続けて、この種の基本的な質問をするのではなく、機能に関する部分を読んでください。 – TigerhawkT3

+0

レコードの場合、あなたが与えたこのコード例は、すべての目的と目的のために、無限ループです。 28個の値のそれぞれに27個のオプションがあり、28個の値のそれぞれは、ループが終了するための 'goal'と一致する必要があります。偶然に起こる確率(PRNG出力のサイクルの問題を無視して、オッズを0に減らす可能性がある)は、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