【问题标题】:IndexError: string index out of range while working with random moduleIndexError:使用随机模块时字符串索引超出范围
【发布时间】:2020-04-10 04:52:50
【问题描述】:

我在 python 中制作密码生成器,这是我遇到的错误。这是我的代码:

import random

symbols = 'qwertyuiopasdfghjklzxcvbnm'
choosing_len = int(input('> '))


def password_generating():

    def random_letter():
        zero = 0
        lenght = len(symbols)
        letter_index = random.randint(zero, lenght+1)
        random_symbol = symbols[letter_index]

        return random_symbol


    password = []

    while len(password) != choosing_len:
        key = [random_letter()]
        password = password + key

    print(''.join(password))


password_generating()

我不得不说这个错误非常随机地出现(它几乎从不出现在 6 上)。我尝试逐步分析它并删除一些代码部分。没有任何帮助。

【问题讨论】:

  • 请用完整的回溯更新您的问题。
  • 错误状态是什么?
  • 这与您的问题无关,但因为在列表上使用+ 相当慢,请考虑通过使用password.append(random_letter()) 来构建password。甚至password = [random_letter() for i in range(choosing_len)].

标签: python python-3.x string random index-error


【解决方案1】:

错误在这里:

letter_index = random.randint(zero, lenght+1)

不像range(a, b),它给出从a到b的数字,不包括b,即a <= x < brandom.randint(a, b)给出一个来自a <= x <= b的随机整数。为了纠正这个问题,我们可以使用

letter_index = random.randint(zero, lenght - 1)

甚至更好,

random_symbol = random.choice(symbols)

【讨论】:

  • 另外,也许考虑将变量重命名为length
猜你喜欢
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多