为什么我不能在这段代码中得到超过 59 个字符的输出?

Why can't I get more than 59 characters as output in this code?

我正在尝试创建一个代码来训练我的 python 技能,该程序通过将字母数字字符从 ASCII 转换为字符来生成随机字符串,然后它将与正常字母表的实际顺序进行比较,并通过在每个字符串(字母表和随机生成的字母表)的索引号之后以随机顺序用随机字母表字母替换普通字母表字母来加密消息。 这是我遇到问题的部分:生成随机字母表

import random as r


# Here's the lower case
num_alfanumericos1 = [x for x in range(97,122)]
# Here's the upper case
num_alfanumericos2 = [x for x in range(65,90)]
# Here's the numbers
num_alfanumericos3 = [x for x in range(48,57)]

# I did it this way because I'll need to use the random.choice function that accepts int
numeros_alfanum = num_alfanumericos1 + num_alfanumericos2 + num_alfanumericos3
# Here's the actual order
alfanum='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
simbolos='!@#$%¨&*<>,.;:^~`´/+-'

rand_alfa=''
while len(rand_alfa)<62:
    escolha = r.choice(numeros_alfanum)
    escolha = chr(escolha)
    if rand_alfa.find(escolha)==-1:
        rand_alfa = rand_alfa + escolha
        
print(rand_alfa)

这不是一个简单的字母表,我包括了小写字母、大写字母和数字。列表的总长度为 62,但代码仅在我将 59 放入 'while' 语句之前有效:

while len(rand_alfa)<59:

我不知道发生了什么,根本就没有运行。我 运行 在 Spyder 和 Jupyter Notebook 上安装了它,但两者的问题是一样的。 我注意到 jupyter 指示此代码的无限循环......但我不确定。 请帮我。哈哈

您的 3 个初始化字母数字列表填充不正确。具体来说,您正试图用这些值填充它们:

  • 97-122 ('a'-'z')
  • 65-90 ('A'-'Z')
  • 48-57 ('0'-'9')

问题是 range(x,y) 函数不包含 y。所以,你错过了每个人的最终角色。相反,写:

num_alfanumericos1 = [x for x in range(97,123)]
num_alfanumericos2 = [x for x in range(65,91)]
num_alfanumericos3 = [x for x in range(48,58)]

注意:您还可以将范围转换为列表,如下所示:

num_alfanumericos1 = list(range(97,123))