Skip to main content
 首页 » 编程设计

Python 卡片猜谜游戏

2025年05月04日8zhujiabin

我有一个作业,其中程序随机选择花色和牌值 (1-13)(11、12、13 应该是 jack 皇后和国王),然后用户应该猜它。如果猜测牌值太高或太低,该程序还应该在猜测牌值时做出响应。我让它工作,除非程序猜测 11 或 12 或 13 或 1(ace)。我无法将值分配给面部卡片的单词,以便用户可以猜测卡片的面部,程序会将其检测为一个值。顺便说一句,这是 python 。非常感谢任何提供帮助的人。如果有更简单的方法来解决这个问题,我也很想学习。(这是我更新的代码,现在我收到错误)说的 Guess_number.lower().strip()) AttributeError: 'NoneType' 对象没有属性 'lower'

import random 
 
SUITS = ("D", "H", "C", "S") 
suit = random.choice(SUITS) 
 
card_names = random.randint( 1,13) 
 
card_names = {'ace': 1, 'jack': 11, 'queen': 12, 'king': 13} 
for i in range(2, 11): 
    card_names[str(i)] = i 
guessCount = 0 
 
 
Guess_Suit = input("Start by guessing the Suit:") 
 
guessCount = guessCount + 1 
while guessCount < 9: 
    Guess_Suit = Guess_Suit.upper() 
    guessCount = guessCount + 1 
    if Guess_Suit == suit: 
        print("Correct!") 
        break 
    elif Guess_Suit != suit: 
        print('Wrong') 
        Guess_Suit = input("Guess the Suit again: ") 
 
Guess_number = input("Now Guess the card number or name of the face card:") 
Guess_number = card_names.get(Guess_number.lower().strip()) 
guessCount = guessCount + 1 
while guessCount < 9: 
    Guess_number = card_names.get(Guess_number.lower().strip()) 
    if Guess_number > number: 
        print("The card you picked is too high") 
        Guess_number = input("Pick another one") 
        guessCount = guessCount + 1 
        Guess_number = card_names.get(Guess_number.lower().strip())  
 
 
    if Guess_number < number: 
        print("The card you picked is too low") 
        Guess_number = input("Pick another one") 
        guessCount = guessCount + 1 
        Guess_number = card_names.get(Guess_number.lower().strip()) 
    elif Guess_number == number: 
        print("THATS IT YOU WON") 
        break 

请您参考如下方法:

创建一个字典,将卡片名称映射到相关号码,例如:

card_names = {'ace': 1, 'jack': 11, 'queen': 12, 'king': 13} 
for i in range(2, 11): 
    card_names[str(i)] = i 

然后将所有 Guess_number = int(Guess_number) 行替换为以下内容:

Guess_number = card_names.get(Guess_number.lower().strip()) 

如果在此之后 Guess_number 为 None,则表示他们提供了无效值,因为未找到卡名或提供的数字太低/太高。

编辑: 解释可能不够清楚,这里是包含我建议的更改的完整代码:

import random 
 
SUITS = ("D", "H", "C", "S") 
suit = random.choice(SUITS) 
 
number = random.randint( 1,13) 
 
card_names = {'ace': 1, 'jack': 11, 'queen': 12, 'king': 13} 
for i in range(2, 11): 
    card_names[str(i)] = i 
guessCount = 0 
 
Guess_Suit = input("Start by guessing the Suit: ") 
 
guessCount = guessCount + 1 
while guessCount < 9: 
    Guess_Suit = Guess_Suit.upper() 
    guessCount = guessCount + 1 
    if Guess_Suit == suit: 
        print("Correct!") 
        break 
    elif Guess_Suit != suit: 
        print('Wrong') 
        Guess_Suit = input("Guess the Suit again: ") 
 
Guess_number = input("Now Guess the card number or name of the face card:") 
Guess_number = card_names.get(Guess_number.lower().strip()) 
guessCount = guessCount + 1 
while guessCount < 9: 
    if Guess_number is None: 
        print("The card you picked is invalid") 
        Guess_number = input("Pick another one: ") 
        Guess_number = card_names.get(Guess_number.lower().strip()) 
        guessCount = guessCount + 1 
    elif Guess_number == number: 
        print("THATS IT YOU WON") 
        break 
    else: 
        print('Wrong') 
        Guess_number = input("Pick another one: ") 
        Guess_number = card_names.get(Guess_number.lower().strip()) 
        guessCount = guessCount + 1