これをIDLEで実行すると、シェルが表示されるだけです
>>
ただし、ウィンドウを閉じてプログラムを強制終了すると、閉じる前に一瞬正常に表示されます。ただし、ほとんどの場合は機能します。
これをIDLEで実行すると、シェルが表示されるだけです
>>
ただし、ウィンドウを閉じてプログラムを強制終了すると、閉じる前に一瞬正常に表示されます。ただし、ほとんどの場合は機能します。
IDLEの問題については、標準出力を定期的にフラッシュして、それがまったく役立つかどうかを確認します。
コードに関するいくつかのコメントは次のとおりです。
グローバル変数の使用については、ほとんどの場合、単純に関数の引数に置き換えることができます。グローバル変数を変更する必要があると (考えて) いる場合、一般に、作成する関数を間違って選択しています。例として、generate() 内でguesses 変数を設定する必要はまったくありません。play() で設定するだけで済みます。
の代わりにallowed = ('0','1','2','3','4','5','6','7','8','9','0','+','*')
、検討してimport string ; allowed= list(string.digits+'+'+'*')
ください。dir(string)
より有用な変数については、インタープリターでa を実行してください。
ブール値の等価性を評価する必要はありません。while (numguesses < maxguesses) and flag==True:
する必要がありますwhile (numguesses < maxguesses) and flag:
play_again()
不必要に再帰的です。
s1 = secret[0] ; s2 = secret[1]
になり得るs1,s2=secret[:2]
for i in range(max): ; num = num + str(randint(0,9))
のように書き直すことができます"".join([str(randint(0,9)) for i in range(max)])
。最初の方が読みやすいと主張する人もいますが、決めるのはあなた次第です。
最後にこれ:
if (i%2 == 0):
evaluated = evaluated + s1
else:
evaluated = evaluated + s2
で簡単に置き換えることができますevaluated= (evaluated+s1) if not(i%2) else (evaluated + s2)
。実際には括弧は必要ないと思いますが、読みやすさが向上します、IMHO
明らかに、コードの一般的な構造についてはもっと多くのことが言えます。私は、この時点であなたが知らないかもしれない Python 言語の機能に焦点を当てようとしました。