You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python中多个if语句的打印输出显示在同一行?

扑克牌识别程序输出换行问题及优化方案

问题描述

我写了一段Python扑克牌识别程序,代码如下:

playingCard = input("Enter the card notation: ")

valid = False

if '2' in playingCard:
    print('Two')
    valid = True

if '3' in playingCard:
    print('Three')
    valid = True

if '4' in playingCard:
    print('Four')
    valid = True

if '5' in playingCard:
    print('Five')
    valid = True

if '6' in playingCard:
    print('Six')
    valid = True

if '7' in playingCard:
    print('Seven')
    valid = True

if '8' in playingCard:
    print('Eight')
    valid = True

if '9' in playingCard:
    print('Nine')
    valid = True

if '10' in playingCard:
    print('Ten')
    valid = True

if 'A' in playingCard or 'a' in playingCard:
    print("Ace")
    valid = True

if 'J' in playingCard or 'j' in playingCard:
    print('Jack')
    valid = True

if 'Q' in playingCard or 'q' in playingCard:
    print("Queen")
    valid = True

if 'K' in playingCard or 'k' in playingCard:
    print('King')
    valid = True

if 'H' in playingCard or 'h' in playingCard:
    print("of Hearts")
    valid = True

if 'D' in playingCard or 'd' in playingCard:
    print("of Diamonds")
    valid = True

if 'S' in playingCard or 's' in playingCard:
    print("of Spades")
    valid = True

if 'C' in playingCard or 'c' in playingCard:
    print("of Clubs")
    valid = True

if valid == False:
    print("Invalid Card Entered")

当输入QS时,程序会分两行输出:

Queen
of Spades

我希望能在同一行输出:

Queen of Spades

请问如何实现?有没有更简洁的解决方案?


解决方案

1. 修改现有代码实现同行输出

问题核心是每次匹配到内容就直接print,而print默认会换行。我们可以先把匹配到的牌值和花色存到变量里,最后统一拼接打印:

playingCard = input("Enter the card notation: ")

valid = False
rank_str = ""
suit_str = ""

# 匹配牌值,用elif避免重复匹配
if '2' in playingCard:
    rank_str = 'Two'
    valid = True
elif '3' in playingCard:
    rank_str = 'Three'
    valid = True
elif '4' in playingCard:
    rank_str = 'Four'
    valid = True
elif '5' in playingCard:
    rank_str = 'Five'
    valid = True
elif '6' in playingCard:
    rank_str = 'Six'
    valid = True
elif '7' in playingCard:
    rank_str = 'Seven'
    valid = True
elif '8' in playingCard:
    rank_str = 'Eight'
    valid = True
elif '9' in playingCard:
    rank_str = 'Nine'
    valid = True
elif '10' in playingCard:
    rank_str = 'Ten'
    valid = True
elif 'A' in playingCard.lower():
    rank_str = "Ace"
    valid = True
elif 'J' in playingCard.lower():
    rank_str = 'Jack'
    valid = True
elif 'Q' in playingCard.lower():
    rank_str = "Queen"
    valid = True
elif 'K' in playingCard.lower():
    rank_str = 'King'
    valid = True

# 匹配花色
if 'H' in playingCard.lower():
    suit_str = "of Hearts"
    valid = True
elif 'D' in playingCard.lower():
    suit_str = "of Diamonds"
    valid = True
elif 'S' in playingCard.lower():
    suit_str = "of Spades"
    valid = True
elif 'C' in playingCard.lower():
    suit_str = "of Clubs"
    valid = True

# 统一输出
if valid:
    print(f"{rank_str} {suit_str}")
else:
    print("Invalid Card Entered")

这里做了两处优化:一是把独立if改成elif,避免无效输入(比如10J)同时匹配多个牌值;二是用lower()统一处理大小写,简化判断逻辑。

2. 更简洁的优化方案:字典映射

用字典存储牌值和花色的对应关系,能大幅精简代码,后续维护也更方便:

playing_card = input("Enter the card notation: ").upper()

# 定义映射字典
rank_map = {
    '2': 'Two', '3': 'Three', '4': 'Four', '5': 'Five',
    '6': 'Six', '7': 'Seven', '8': 'Eight', '9': 'Nine',
    '10': 'Ten', 'A': 'Ace', 'J': 'Jack', 'Q': 'Queen', 'K': 'King'
}
suit_map = {
    'H': 'of Hearts', 'D': 'of Diamonds',
    'S': 'of Spades', 'C': 'of Clubs'
}

rank_str = ""
suit_char = ""

# 处理10这个双字符牌值
if '10' in playing_card:
    rank_str = rank_map['10']
    suit_char = playing_card.replace('10', '')
else:
    # 其他牌值都是单字符,拆分牌值和花色
    if len(playing_card) >=1 and playing_card[0] in rank_map:
        rank_str = rank_map[playing_card[0]]
    if len(playing_card) >=2:
        suit_char = playing_card[1]

# 匹配花色
suit_str = suit_map.get(suit_char, "")

# 判断有效性并输出
if rank_str and suit_str:
    print(f"{rank_str} {suit_str}")
else:
    print("Invalid Card Entered")

这个方案的优势:

  • 消除了大量重复的if/elif判断,修改或新增规则只需调整字典
  • 统一转大写处理,无需单独判断大小写
  • 专门处理10的双字符情况,逻辑更严谨

内容的提问来源于stack exchange,提问作者Hashem Baha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:35:26