Python生成随机字母数字串时长度无法超过59字符问题排查
问题原因
你的代码陷入死循环的核心原因是range()函数的左闭右开特性,你定义的三个字符范围都少包含了最后一个字符:
- 小写字母ASCII范围是97(a)~122(z),你写的
range(97,122)实际只会生成97到121的数值,漏掉了字符z - 大写字母ASCII范围是65(A)~90(Z),你写的
range(65,90)实际只会生成65到89的数值,漏掉了字符Z - 数字ASCII范围是48(0)~57(9),你写的
range(48,57)实际只会生成48到56的数值,漏掉了字符9
三个范围加起来总共有25+25+9=59个不同字符,永远凑不够62个,所以当循环终止条件设为len(rand_alfa)<62时会进入无限循环,阈值设为59刚好能把所有可用字符选完就停止,所以能正常输出。
修复方案
把三个range的结束值分别加1即可:
# 小写字母 97~122 对应a~z num_alfanumericos1 = [x for x in range(97,123)] # 大写字母 65~90 对应A~Z num_alfanumericos2 = [x for x in range(65,91)] # 数字 48~57 对应0~9 num_alfanumericos3 = [x for x in range(48,58)]
更简洁的实现推荐
你不需要手动生成ASCII列表再逐个去重选择,直接用random.shuffle打乱现有正常字母表即可生成无重复的随机字母表,代码更简洁高效:
import random as r alfanum='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' # 转成列表后打乱 alfanum_list = list(alfanum) r.shuffle(alfanum_list) rand_alfa = ''.join(alfanum_list) print(rand_alfa)
内容的提问来源于stack exchange,提问作者thiago silva
相关产品推荐
相关产品推荐

