簡體   English   中英

Python 隨機紙牌生成器游戲

[英]Python Random Playing Card Generator Game


我目前正在嘗試在 Python 中創建一個程序,該程序將允許使用 random 函數創建一張帶有花色和卡號的隨機卡。
到目前為止的代碼如下所示......


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,則該卡將分別為 Jack、Queen 和 King。 如果變量 num22 等於 1、2、3 或 4,則卡片也將分別為黑桃、紅心、鑽石和梅花。

我在這里遇到的問題是,IDLE 沒有將卡號和它的花色打印在一起,而是只打印卡號並選擇不打印變量 cardnum2。 例如,如果 num1 是 8 並且 num2 是 Diamonds,我希望 IDLE 打印“9 Diamonds”但只打印“9”。 我只能選擇這種方法來解決和編寫程序,所以有人可以幫忙清除代碼並幫助我處理這段代碼嗎?

謝謝,傑克。



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

問題出在你的大if: elif: block:

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

你想分別處理num2num1 ,所以應該是:

elif num1 < 10:
    cardnum1 = num1

if num2 == 1:
    cardnum2 = "Spades"

或者,簡單的是,使用一對字典,即一大堆elif的慣用替代品:

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]
import random


cards = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"] 
suits = ["Diamonds", "Hearts", "Spades", "Clubs"]

print(random.choice(cards) + " of ")  print(random.choice(suits))

這里的問題是,在對num1執行檢查后,您繼續使用elifnum2進行所有檢查。 這意味着您只能輸入前四個代碼塊之一。 相反,為num2檢查開始一個新的if語句:

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:是毫無意義的,因為該代碼將始終最終運行。

這段代碼可能看起來有點難看,因為我刪除了很多變量並將它們放在 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()

代替:

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

嘗試:

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

因為您將elif用於有關num1num2邏輯,所以只設置了一個或另一個。 您需要兩個單獨的if測試。

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

@TwilightKillerX 對傑克的最后一點問題給出了一個非常好的和緊湊的答案。 函數main()調用自身的遞歸部分對於 Jack 來說可能不是那么簡單明了。 這是一個迭代實現,Jack 可能會喜歡使用while循環和 Python 3.6.9

__author__ = "TwilightKillerX"

from random import randint, choice

def jack_chooses_a_card(suits: dict):
    """
    Please put a doc string here
    """
    print(str(randint(1,13)) + " of " + str(choice(suits)))

if __name__ == "__main__":

    suits = ["Spades", "Hearts", "Diamonds", "Clubs"]

    print("Just press [ENTER] to get started")
    user_input = input("")

    while user_input == "":
        jack_chooses_a_card(suits)
        user_input = input("\nTo run again press [ENTER] key, entering anything else would terminate the program\n")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM