[英]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"
你想分別處理num2
和num1
,所以應該是:
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
執行檢查后,您繼續使用elif
對num2
進行所有檢查。 這意味着您只能輸入前四個代碼塊之一。 相反,為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
用於有關num1
和num2
邏輯,所以只設置了一個或另一個。 您需要兩個單獨的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.