如何让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
相关产品推荐
相关产品推荐

