Python 随机扑克牌生成游戏

1 投票
6 回答
17620 浏览
提问于 2025-04-18 06:48


我现在正在尝试用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,那么这张卡片的花色就分别是黑桃、红心、方块和梅花。

我遇到的问题是,程序只打印了卡片的数字,而没有把花色一起打印出来。比如,如果num1是8,num2是方块,我希望程序打印“9 方块”,但它只打印了“9”。我只能用这种方式来解决和编写程序,所以有人能帮我理清代码吗?

谢谢,Jack。



更新:我能问一下,怎么让程序循环,这样用户按下回车键时就能不断生成新卡片?

6 个回答

0

不要这样做:

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

试试这样:

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

因为你在处理 num1num2 的逻辑时用了 elif,所以只能设置其中一个。你需要两个独立的 if 测试。

随着你不断学习,你会发现代码中还有其他地方可以简化,正如其他回答所指出的那样。

1

这段代码可能看起来有点难看,因为我把很多变量都去掉了,直接放在了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()
1

这里的问题是,在检查完 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: 是没有意义的,因为那段代码总是会被执行。

3

这段内容是关于编程的问题,可能涉及到一些代码或技术细节。为了让你更容易理解,我会用简单的语言来解释。

首先,代码块

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 " + random.choice(suits))
可能包含了一些示例代码或者特定的编程语法。通常,这些代码是用来展示如何解决某个问题或者实现某个功能的。

如果你对这些代码有疑问,或者不太明白它们的意思,可以尝试逐行阅读,看看每一行在做什么。通常,代码的每一部分都有它的作用,比如定义变量、执行操作或者输出结果。

记住,编程就像学习一种新的语言,刚开始可能会觉得有点难,但多练习就会慢慢变得熟悉。

3

问题出在你那一大段 if: elif: 的代码块上:

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]

撰写回答