2014-05-16 440 views
0


我目前正在嘗試在Python中創建一個程序,該程序將允許隨機函數使用隨機函數創建一個隨機卡,並帶有套裝和卡號。
代碼到目前爲止如下所示...
Python隨機撲克牌發生器遊戲


import random 
num1 = random.randint(1,13) 
num2 = random.randint(1,4) 
cardnum1 = "" 
cardnum2 = "" 

input ("Press the enter key to continue \n") 



if True: 
    if num1 == 11: 
     cardnum1 = "Queen" 
    elif num1 == 12: 
     cardnum1 = "Jack" 
    elif num1 == 13: 
     cardnum1 = "King" 
    elif num1 < 10: 
     cardnum1 = num1 
    elif num2 == 1: 
     cardnum2 = "Spades" 
    elif num2 == 2: 
     cardnum2 = "Hearts" 
    elif num2 == 3: 
     cardnum2 = "Diamonds" 
    elif num2 == 4: 
     cardnum2 = "Clubs" 

print (cardnum1, cardnum2) 

如果卡號碼(NUM1)是11,12或13,該卡將是傑克,女王和國王分別。如果變量num22等於1,2,3或4,則卡片將分別爲黑桃,紅心,鑽石和俱樂部。

我在這裏遇到的問題是,IDLE不是同時打印卡號和套裝,而是隻打印卡號並選擇不打印變量cardnum2。例如,如果num1是8並且num2是Diamonds,我會希望IDLE打印「9鑽石」,而只打印「9」。我只能選擇這種方法來解決和編寫程序,所以有人可以幫助清除代碼並幫助我使用此代碼?

謝謝,傑克。



更新:我可以問一下,如何循環程序,以便在用戶按下回車鍵時重複創建新卡?

+1

爲什麼你有條件'如果爲真:'? – jabaldonedo

+0

@jabaldonedo我嘗試了其他條件,他們搞砸了代碼。這似乎是該地段最簡單的條件。只是問,你會推薦什麼? –

+0

您的條件是多餘的,您不需要它,您將始終輸入代碼塊 – jabaldonedo

回答

2

的問題是在你的大if: elif:塊:

elif num1 < 10: 
    cardnum1 = num1 
elif num2 == 1: 
    cardnum2 = "Spades" 

要單獨處理num2num1,所以這應該是:

elif num1 < 10: 
    cardnum1 = num1 

if num2 == 1: 
    cardnum2 = "Spades" 

,或者簡單,使用一對字典,一大堆的慣用替換elif s:

faces = {11: "Queen", 12: "Jack", 13: "King"} # it's usually J Q K, though 
cardnum1 = faces.get(num1, num1) 
suits = {1: "Spades", 2: "Hearts", 3: "Diamonds", 4: "Clubs"} 
cardnum2 = suits[num2] 
1

這裏的問題是,在執行num1的檢查後,您繼續使用elif進行所有與num2的檢查。這意味着您只能輸入前四個代碼塊中的一個。相反,開始新的if聲明爲num2檢查:

if num1 == 11: 
    cardnum1 = "Queen" 
elif num1 == 12: 
    cardnum1 = "Jack" 
elif num1 == 13: 
    cardnum1 = "King" 
elif num1 < 10: 
    cardnum1 = num1 

if num2 == 1: 
    cardnum2 = "Spades" 
elif num2 == 2: 
    cardnum2 = "Hearts" 
elif num2 == 3: 
    cardnum2 = "Diamonds" 
elif num2 == 4: 
    cardnum2 = "Clubs" 

此外,使用if True:是很沒有意義的,因爲這代碼總是最終運行。

0

相反的:

elif num1 < 10: 
    cardnum1 = num1 
elif num2 == 1: 
    cardnum2 = "Spades" 

嘗試:

else: 
    cardnum1 = num1 
if num2 == 1: 
    cardnum2 = "Spades" 

由於您使用elif邏輯有關雙方num1num2,只有一個或另一個被設定。您需要兩個單獨的if測試。

隨着您繼續學習,您會發現代碼中的其他內容可以變得更簡單,正如其他答案指出的那樣。

0

此代碼可能看起來有點醜陋,因爲我刪除了很多變量,並將它們卡在input()中,但它很緊湊。

from random import randint,choice 
def main(): 
    suits = ["Spades","Hearts","Diamonds","Clubs"] 

    user_input = input(str(randint(1,13)) + " of " + str(choice(suits)) + ". To run again press [ENTER] key.") 
    main() if user_input == "" else exit() 

if __name__ == "__main__": 
    main()