Python随机扑克牌生成器游戏

时间:2014-05-16 21:04:37

标签: 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,则卡分别为Jack,Queen和King。如果变量num22等于1,2,3或4,则该卡也将分别为黑桃,心形,钻石和俱乐部。

我在这里遇到的问题是IDLE只打印卡号并选择不打印变量cardnum2,而不是同时打印卡号和套装。例如,如果num1是8而num2是Diamonds,我希望IDLE打印“9 Diamonds”,而只打印“9”。我只能选择这种方法来解决和编写程序,所以有人可以帮助清除代码并帮助我使用这段代码吗?

谢谢,杰克。

更新:我可以问一下,如何循环程序,以便在用户按下回车键时重复创建新卡?

6 个答案:

答案 0 :(得分:2)

问题出在您的if: elif:块中:

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

您希望num2分别与num1打交道,因此应该是:

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 :(得分:2)

2021-04-07T22:00:00.000Z

答案 2 :(得分: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:是非常没有意义的,因为该代码将始终运行。

答案 3 :(得分:0)

而不是:

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

尝试:

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

因为您使用elif来处理有关num1num2的逻辑,所以只设置了一个或另一个。您需要进行两次单独的if测试。

在您继续学习的过程中,您会发现代码中的其他内容可以更简单,正如其他答案所指出的那样。

答案 4 :(得分: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()

答案 5 :(得分:0)

@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")