生成52张不重复牌组时,拼接列表为何出现多余的's'?
问题分析与修正
你的代码生成混乱结果的核心原因是错误地将整个values列表转为字符串:str(values)会把列表变成类似"[2, 3, 4, ..., 13]"的字符串,遍历这个字符串时会逐个取字符(包括括号、逗号、空格),自然生成的牌面完全不符合预期。
修正方案1:简化的列表推导式写法(推荐)
直接通过双重循环生成完整牌组,不需要单独维护四个花色的列表:
# 定义四种花色 suits = ['s', 'c', 'h', 'd'] # 生成2到13的点数范围 values = range(2, 14) # 先遍历花色,再遍历点数,拼接成牌面 deck = [f"{val}{suit}" for suit in suits for val in values] print(deck)
修正方案2:保留你原有思路的修改版
如果你想沿用原来的分支逻辑,只需把str(values)改为遍历每个点数并转字符串:
s = 0 values = list(range(2, 14)) sDeck = [] cDeck = [] hDeck = [] dDeck = [] while s <= 3: if s == 0: # 遍历每个点数,转成字符串后加花色 sDeck = [str(x) + 's' for x in values] elif s == 1: cDeck = [str(x) + 'c' for x in values] elif s == 2: hDeck = [str(x) + 'h' for x in values] elif s == 3: dDeck = [str(x) + 'd' for x in values] s += 1 Deck = sDeck + cDeck + hDeck + dDeck print(Deck)
两种方案都会生成你期望的格式:[2s, 3s, ..., 13s, 2c, 3c, ..., 13d]
内容的提问来源于stack exchange,提问作者kal_amari
相关产品推荐
相关产品推荐

