CircuitPython:生成1到X无重复随机字符串列表的问题解决
问题分析与解决:CircuitPython生成无重复随机字符串列表
问题根源
你的代码存在类型不匹配的逻辑错误:生成的随机数r是整数类型,但列表songs中存储的是字符串类型。判断r not in songs时,整数与字符串永远不会相等,即使songs里已有对应数字的字符串(比如'17'),整数17仍会被判定为不在列表中,导致重复添加。
修正方案
提供两种可行的修正思路,均能生成1到X的无重复随机字符串列表:
方案1:先构建整数列表,最后统一转字符串
先以整数形式维护无重复列表,完成后一次性转为字符串类型,逻辑清晰且查找效率更高:
import random station = 20 songs = [] while len(songs) < station: r = random.randint(1, station) if r not in songs: songs.append(r) # 统一转换为字符串 songs = [str(num) for num in songs]
方案2:直接操作字符串类型
生成随机数后立即转为字符串,直接判断字符串是否在列表中,逻辑更贴合需求:
import random station = 20 songs = [] while len(songs) < station: r_str = str(random.randint(1, station)) if r_str not in songs: songs.append(r_str)
效果验证
修正后的代码会持续生成随机数,直到列表包含1到20的所有数字(无重复),最终输出为随机顺序的字符串列表,不会出现重复元素。
内容的提问来源于stack exchange,提问作者Spencer Burchfield
相关产品推荐
相关产品推荐

