0

ルーレットゲームを作っています。スピナーが着地する乱数は「数字」と呼ばれます。これは非常に基本的で単純なコードですが、私には適切に機能しないようです。現時点では、特定の数字を選択するか、1 ~ 18 を選択します。さまざまな方法を試しましたが、まだうまくいきません。これが私のコードです。誰かが問題が何であるかを知っているなら、私に知らせてください。ありがとう:

numbers = ['1', '2', '3'.......'35', '36']

figure = choice(numbers)

d = textinput("Pick bet", "")

if int(figure) > 18 and d == '1-18' or '1 - 18' or '1- 18' or '1 -18':
    pu()
    goto(100,100)
    write("Loser", font = ("Comic Sans MS", 30, "bold"))

elif int(figure) < 19 and d == '1-18' or '1 - 18' or '1- 18' or '1 -18':
    pu()
    goto(10,100)
    write("Well done", font = ("Comic Sans MS", 30, "bold"))


elif int(d) in range(36) and int(figure) == int(d):
    pu()
    goto(100,100)
    write("Well done", font = ("Comic Sans MS", 30, "bold"))

elif int(d) in range(36) and int(figure) != int(d):
    pu()
    goto(100,100)
    write("Loser", font = ("Comic Sans MS", 30, "bold"))
4

2 に答える 2

3

見る:

if int(figure) > 18 and d == '1-18' or '1 - 18' or '1- 18' or '1 -18':

ここには、常にTrueと評価されるいくつかのステートメントがあります。それぞれが'1 - 18' or '1- 18' or '1 -18'空でない文字列です。どんな価値観int(figure)d持っているかは関係ありません。これは、Pythonがその行を。と同等であると見なすことを意味しif something or Trueます。

代わりに、in演算子を使用してd、がオプションのリストの一部であるかどうかをテストします。

if int(figure) > 18 and d in ('1-18', '1 - 18', '1- 18', '1 -18'):

elif同じ問題があなたのステートメントにも当てはまります。

于 2012-07-04T12:55:52.897 に答える
1

問題は、Python が次のように考えていることです。

if (int(figure) > 18 and d == '1-18') or '1 - 18' or '1- 18' ...

ブール演算子は比較演算子よりも優先順位が低いため、コードは意図したとおりに動作しません。代わりに、最後の文字列はそれぞれのオペランドとしてor解釈されるため、ブール値として解釈されます。これは常にTrueこの場合です。

次のように書き直すことができます。

if int(figure) > 18 and d in ['1-18', '1 - 18', '1- 18', '1 -18']

または、おそらく文字列からスペースを削除して、単一の値と比較するだけで済みます。

if int(figure) > 18 and d.replace(' ', '') == '1-18'
于 2012-07-04T12:57:18.547 に答える