2012-03-15 26 views
0

我環顧四周,做了一些研究,但由於某種原因,我仍然無法按計劃使其工作。基本上,作爲初學者,我寫了一個Mastermind代碼遊戲 - 相同的規則和所有。下面的代碼:如何合併if/elif語句中的Python

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()」是不必要的錯 - 但是當我試圖把它們放在一起的腳本將始終把W.

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

甚至當我把「QWER」作爲輸入時,我會得到一個X.有什麼方法可以鞏固它們,同時仍然得到正確的響應?

另外,脫離主題,如果有任何其他建議,你可以給我腳本作爲我的初學者,這將是非常感謝!謝謝!

回答

2

當您使用orand時,您需要指定您正在使用的操作。這裏是你寫的東西...

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

,該elif詢問a等於peg2,然後如果PEG3或PEG4存在。您還需要更改它以便a == peg3/4。像這樣...

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

啊。這是有道理的。這固定完美。非常感謝! – 2012-03-15 15:01:20

1

關於你的if/elif問題,一個典型的Python成語使用switch語句的字典。

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

但是,在這種情況下,我相信你採取了錯誤的做法。 Python中的「Thinking」與其他語言有點不同,需要一段時間才能習慣於「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):