【问题标题】:Python Random Playing Card Generator GamePython 随机纸牌生成器游戏
【发布时间】:2014-05-16 21:04:36
【问题描述】:


我目前正在尝试在 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 True:这个条件?
  • @jabaldonedo 我尝试了其他条件,但他们以某种方式弄乱了代码。这似乎是该地段中最简单的条件。只是问一下,你会推荐什么?
  • 你的条件是多余的,你不需要它,你会一直进入那个代码块
  • @JackDavis:去掉if True: 行并取消缩进它下面的块。
  • @jabaldonedo 哦,好的。我不知道。不过还是非常感谢!

标签: python


【解决方案1】:

问题在于你的 if: elif: 大块:

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

你想分别处理num2num1,所以应该是:

elif num1 < 10:
    cardnum1 = num1

if num2 == 1:
    cardnum2 = "Spades"

或者,更简单,使用一对字典,这是一大堆elifs 的惯用替换:

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]

【讨论】:

    【解决方案2】:
    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】:

      这里的问题是,在对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: 毫无意义,因为该代码将始终运行。

      【讨论】:

        【解决方案4】:

        这段代码可能看起来有点难看,因为我删除了很多变量并将它们卡在 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】:

          代替:

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

          试试:

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

          因为您将elif 用于与num1num2 相关的逻辑,所以只设置了一个或另一个。您需要两个单独的 if 测试。

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

          【讨论】:

            【解决方案6】:

            @TwilightKillerX 对 Jack 的最后一点问题给出了一个非常好的和简洁的答案。函数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")
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-06-10
              • 1970-01-01
              • 1970-01-01
              • 2019-07-17
              • 2015-06-19
              • 2021-04-18
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多