Python TypeError报错求助:参数缺失、洗牌结果打印及列表编辑
问题解决方案
1. 修复参数缺失报错
你调用super_shuffle()时没有传入函数要求的color_list参数,这是触发TypeError的直接原因。调用时必须传入目标列表,同时接收函数返回的洗牌后结果:
shuffled_list = super_shuffle(color_list)
2. 输出洗牌结果
原代码没有打印逻辑,添加打印语句即可看到结果:
print("洗牌后的颜色列表:", shuffled_list)
3. 实现洗牌后编辑列表
super_shuffle函数返回的是一个独立的新列表(通过copy.copy创建),你可以直接对返回的列表进行修改操作,比如:
# 示例:修改第二个元素 shuffled_list[1] = "自定义新颜色" print("编辑后的列表:", shuffled_list)
完整修正代码
import random import copy def super_shuffle(color_list): color_list_2 = copy.copy(color_list) random.shuffle(color_list_2) # 检查是否存在元素停留在原位置 for old, new in zip(color_list, color_list_2): if old == new: return super_shuffle(color_list) return color_list_2 # 简化输入逻辑(可选,替代原重复的input代码) color_list = [input("Pick a color: ") for _ in range(6)] # 调用洗牌函数并接收结果 shuffled_list = super_shuffle(color_list) # 打印洗牌结果 print("洗牌后的颜色列表:", shuffled_list) # 编辑列表示例 shuffled_list[0] = "修改后的颜色" print("编辑后的列表:", shuffled_list)
额外优化建议
原递归写法在极端场景下(比如列表所有元素相同,会无限递归)可能触发栈溢出,改成循环实现更安全:
def super_shuffle(color_list): while True: color_list_2 = copy.copy(color_list) random.shuffle(color_list_2) # 确认所有元素都不在原位置 if all(old != new for old, new in zip(color_list, color_list_2)): return color_list_2
内容的提问来源于stack exchange,提问作者Billy Joel
相关产品推荐
相关产品推荐

