2012-03-15 4 views
0

私は周りを見渡して研究をしましたが、なんらかの理由で私はまだそれを計画通りに動かすことができませんでした。基本的には、初心者として、私はMastermindのコードゲームを書いています。Pythonの/ elif文を統合する方法

import random 
trial = 0 
def geuss(): 
    geuss = raw_input("What is your geuss? ") 
    global g1 
    global g2 
    global g3 
    global g4 
    a = geuss[:-3] 
    b = geuss[1:-2] 
    c = geuss[2:-1] 
    d = geuss[3:] 
    if a == peg1: 
     g1 = 'R' 
    elif a == peg2: 
     g1 = 'W' 
    elif a == peg3: 
     g1 = 'W' 
    elif a == peg4: 
     g1 = 'W' 
    else: 
     g1 = 'X' 

    if b == peg2: 
     g2 = 'R' 
    elif b == peg1: 
     g2 = 'W' 
    elif b == peg3: 
     g2 = 'W' 
    elif b == peg4: 
     g2 = 'W' 
    else: 
     g2 = 'X' 

    if c == peg3: 
     g3 = 'R' 
    elif c == peg1: 
     g3 = 'W' 
    elif c == peg2: 
     g3 = 'W' 
    elif c == peg4: 
     g3 = 'W' 
    else: 
     g3 = 'X' 

    if d == peg4: 
     g4 = 'R' 
    elif d == peg1: 
     g4 = 'W' 
    elif d == peg2: 
     g4 = 'W' 
    elif d == peg3: 
     g4 = 'W' 
    else: 
     g4 = 'X' 

    print g1, g2, g3, g4 
    global trial 
    trial = trial + 1 
    return trial 



colour = ['B', 'G', 'Y', 'P', 'R'] 

peg1 = random.choice(colour) 
peg2 = random.choice(colour) 
peg3 = random.choice(colour) 
peg4 = random.choice(colour) 
g1 = 0 
g2 = 0 
g3 = 0 
g4 = 0 

print "" 
while g1 != 'R' or g2 != 'R' or g3 != 'R' or g4 != 'R': 
    geuss() 
print "Congratulations! It took you %d tries to crack the code!" % trial 

print "" 
print "The code was %s%s%s%s." % (peg1, peg2, peg3, peg4) 

あなたが関数内のifとのelif文を見ることができるように「geuss()」不wrong-されているが、私はそれらを一緒に入れてみたらスクリプトは常にW.

を置く:ここではコードです
if a == peg1: 
     g1 = 'R' 
    elif a == peg2 or peg 3 or peg4: 
     g1 = 'W' 
    else: 
     g1 = 'X' 

入力として「QWER」を入力しても、私はXを取得します。正しい応答を得ている間に、それらを統合できる方法はありますか?

また、他の提案がある場合は、私が初心者のときに私にスクリプトを教えてもらえれば、それは非常に感謝しています!ありがとうございました!

答えて

2

orまたはandを使用する場合は、使用する操作を指定する必要があります。 apeg2に等しく、PEG3またはPEG4が存在し、その後場合ならばここで

if a == peg1: 
    g1 = 'R' 
elif a == peg2 or peg 3 or peg4: 
    g1 = 'W' 
else: 
    g1 = 'X' 

...あなたが書いたものであるという点でelifが尋ねます。 a == peg3/4も変更する必要があります。このように...

elif a == peg2 or a == peg3 or a == peg4: 
+0

ああを。それは今意味がある。それはそれを完全に固定しました。どうもありがとうございます! –

1

if/elifに関する質問には、switch文の辞書を使用する典型的なPythonのイディオムがあります。

// http://stackoverflow.com/questions/374239/why-doesnt-python-have-a-switch-statement 
{'option1': function1, 
'option2': function2, 
'option3': function3, 
'option4': function4, 
}.get(value, defaultfunction)() 

しかし、この場合は間違ったアプローチをしていると思います。 Pythonの "思考"は他の言語と少し異なり、 "Pythonのやり方"に慣れていくためにしばらく時間がかかります。あなたはリストを理解しているようで、ストリングスライスは良いです。以下に示すように、Mastermindプログラムをよりシンプルにするために、それをさらに活用することができます。

import random 

trial = 0 
colour = ['B', 'G', 'Y', 'P', 'R'] 

pegs = [random.choice(colour), random.choice(colour), random.choice(colour), random.choice(colour)] 
guess_pegs = ['?', '?', '?', '?'] 

def main(): 
    print "Generating a code" 
    print pegs 

    guess()  
    print "Congratulations! It took you %d tries to crack the code!\n" % trial 
    print "The code was: " + ', '.join(pegs) 

def guess(): 
    global trial 
    global pegs 
    global guess_pegs 

    entry_list = ['?', '?', '?', '?'] 

    while pegs != guess_pegs : 
     entry_list = raw_input("What is your guess? ").split(' ') 

     trial = trial + 1 

     if len(pegs) == len(entry_list) : 
      for i in range(0,4) : 
       if(entry_list[i] == pegs[i]) : 
        guess_pegs[i] = entry_list[i] 
     print guess_pegs      
     guess() 

# Kick things off 
main() 
0

経験のあるPythonプログラマが記述します -

elif a == peg2 or a == peg3 or a == peg4: 

として: -

elif a in (peg2, peg3, peg4): 
関連する問題