2013-04-16 23 views
0

試圖在Python中做一個遊戲..雖然我似乎無法得到一定的代碼工作?!這讓我瘋狂!Python遊戲inbetween - 不能得到if-elif工作

任何幫助,非常感謝!

import random 

die1 = random.randint(1,10) 
die2 = random.randint(1,10) 
die3 = random.randint(1,10) 


if die1 > die2: 
    print ('Die 1:', die2,' Die 2:', die1,) 
else: 
    print ('Die 1:', die1,' Die 2:', die2,) 

    if die1 == die2 or die2 == die1: 
     print('\nEven-steven!') 
    else: 
     print('\nNot the same, let\'s play!') 

print ('\nDie 3:', die3,) 



if die3 > die1 and die3 < die2 or die3 < die1 and die3 > die2: 
    print ('\n*** You win! ***') 
elif die1 > die2: 
    if die3 < die2 or die3 > die1: 
     print('\n*** Sorry - You lose! ***') 
elif die2 > die1: 
    if die3 < die1 or die3 > die2: 
     print('\n*** Sorry - You lose! ***') 
**elif die3 == die1 or die3 == die2: 
    print ('\n*** You hit the post - You lose double your bet! ***')** 


print ('\nThanks for playing!') 

這是在第二個if語句結構,不管出於什麼原因,如果die1或die2是一樣的die3,它只是將無法打印「你擊中門柱......」它只是結束!

謝謝!

回答

1

通過簡化代碼,它將更容易調試。僅存在3個條件win,或loselose (double)所以不需要爲6 (嵌套)條件句。同樣通過切換die1die2如果die1 > die2您的程序輸出和變量保持有意義。這是理智的:

import random 

die1 = random.randint(1,10) 
die2 = random.randint(1,10) 

if die1 > die2: 
    die1, die2 = die2, die1 

print('Die 1:',die1,'Die 2:',die2) 

if die1 == die2: 
    print('Even-steven!') 
else: 
    print("Not the same, let's play!") 

    die3 = random.randint(1,10) 
    print('Die 3:',die3) 

    if die3 > die1 and die3 < die2 or die3 < die1 and die3 > die2: 
     print ('You win!') 
    elif die3 == die1 or die3 == die2: 
     print ('You hit the post - You lose double your bet!') 
    else: 
     print('Sorry - You lose!') 

print('Thanks for playing!') 
+0

非常非常感謝! – user2286906

1

您的診斷錯誤。最後一條語句比賽如果die3等於或者die1die2

>>> die1, die2 = 1, 2 
>>> die3 = die1 
>>> die3 == die1 or die3 == die2 
True 
>>> die3 = die2 
>>> die3 == die1 or die3 == die2 
True 

但是,如果die1大於die2第一elif比賽,但你的比較die3是有缺陷的:

>>> die1, die2 = 2, 1 
>>> die3 = die1 
>>> die3 < die2 or die3 > die1 
False 

沒有是不斷印刷。你需要清理這種情況下的邏輯。

由於您只有3個不同的結果,獲勝,失去和擊中門柱,你真的可以簡化整個事情下來:

if die1 < die3 < die2: 
    print('\n*** You win! ***') 
elif die3 == die1 or die3 == die2: 
    print('\n*** You hit the post - You lose double your bet! ***') 
else: 
    print('\n*** Sorry - You lose! ***') 

請注意,我用chained comparisons簡化第一if表達更多一些。您還確保die1die2較低,所以測試的die2 < die3 < die1總是將是False

另注:==應該是傳遞的,所以die1 == die2 or die2 == die1是多餘的。你可以簡化爲die1 == die2

簡化你的整個程序:

import random 

die1 = random.randint(1,10) 
die2 = random.randint(1,10) 

if die1 > die2: 
    die1, die2 = die2, die1 

print ('Die 1:', die1,' Die 2:', die2,) 

if die1 == die2: 
    print('Even-steven!') 
else: 
    print("Not the same, let's play!") 
    die3 = random.randint(1,10) 

    print ('Die 3:', die3) 

    if die1 < die3 < die2: 
     print('\n*** You win! ***') 
    elif die3 == die1 or die3 == die2: 
     print('\n*** You hit the post - You lose double your bet! ***') 
    else: 
     print('\n*** Sorry - You lose! ***') 

print ('Thanks for playing!') 
+0

非常感謝您的幫助! – user2286906

1

與其讓駕駛它你瘋了,保持冷靜,並使用pdb的。

if die3 in (die1, die2): 
    import pdb; pdb.set_trace() 

if die3 > die1 and die3 < die2 or die3 < die1 and die3 > die2: 
    print ('\n*** You win! ***') 
elif die1 > die2: 
    if die3 < die2 or die3 > die1: 
     print('\n*** Sorry - You lose! ***') 
elif die2 > die1: 
    if die3 < die1 or die3 > die2: 
     print('\n*** Sorry - You lose! ***') 
**elif die3 == die1 or die3 == die2: 
    print ('\n*** You hit the post - You lose double your bet! ***')** 


print ('\nThanks for playing!') 

現在運行它,而當它打破,開始(使用n每個條件的旁邊,校驗值等)的調試。

0

if語句只被作爲第三個條件的內if聲明的替代解決方案的一部分,處理一起elif的決賽。

以下內容應解決您的問題。請注意更改

if die3 > die1 and die3 < die2 or die3 < die1 and die3 > die2: 
    print ('\n*** You win! ***') 
elif die1 > die2 and (die3 < die2 or die3 > die1): 
    print('\n*** Sorry - You lose! ***') 
elif die2 > die1 and (die3 < die1 or die3 > die2): 
    print('\n*** Sorry - You lose! ***') 
elif (die3 == die1) or (die3 == die2): 
    print ('\n*** You hit the post - You lose double your bet! ***') 

享受。 :)

0

這個怎麼樣?

if die3 == die1 or die3 == die2: 
    print ('\n*** You hit the post - You lose double your bet! ***') 
else: 
    if die3 > die1 and die3 < die2 or die3 < die1 and die3 > die2: 
     print ('\n*** You win! ***') 
    elif die1 > die2: 
     if die3 < die2 or die3 > die1: 
      print('\n*** Sorry - You lose! ***') 
    elif die2 > die1: 
     if die3 < die1 or die3 > die2: 
      print('\n*** Sorry - You lose! ***')