gpt4 book ai didi

python - map() lambda() 操作数仅在 python 2.7.6 中不受支持

转载 作者:行者123 更新时间:2023-11-28 18:15:04 26 4
gpt4 key购买 nike

我在万不得已的情况下寻求帮助,我的代码有问题让我发疯。我在 Ubuntu 14.04 上同时使用 Python 2.7.6 和 Python 3.4.3,我从那里获取了以下非常简单的代码部分 password generator urandom

import os


def random_password(length=20, symbols='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@$^_+&'):
password = []
for i in map(lambda x: int(len(symbols)*x/255.0), os.urandom(length)):
password.append(symbols[i])
return ''.join(password)

random_password()

password = random_password()

print(password)

这部分代码适用于 python 3.4.3。但每运行 2 或 3 次随机给出以下错误:

Traceback (most recent call last):
File "/home/jsmith/Documents/PythonProjects/MainFile", line 12, in <module>
IotaSeed = Gen_Seed()
File "/home/jsmith/Documents/PythonProjects/MainFile", line 7, in Gen_Seed
IotaSeed.append(symbols[i])
IndexError: string index out of range

对于 Python 2.7.6,它根本不起作用并给出以下错误:

Traceback (most recent call last):
File "PWDGEN.py", line 10, in <module>
random_password()
File "PWDGEN.py", line 6, in random_password
for i in map(lambda x: int(len(symbols)*x/255.0), os.urandom(length)):
File "PWDGEN.py", line 6, in <lambda>
for i in map(lambda x: int(len(symbols)*x/255.0), os.urandom(length)):
TypeError: unsupported operand type(s) for /: 'str' and 'float'

我了解 lambda 和 map 的工作原理,但我找不到解决方案,而且我无法切换到 python 3.4.3,因为我用 2.7 编写了我的主程序。

我该怎么做才能使其在 python 2.7 下工作并避免在 3.4.3 中看到的“字符串索引超出范围”错误?

谢谢,PGriffin。

最佳答案

int(len(symbols)*x/255.0)

x == 255 时,可以产生 len(symbols)。要解决这个问题,您可以改为除以 256。但是,这不会给出均匀分布的随机字符,这对于密码生成来说是不可取的。使用 SystemRandom相反:

import string
from random import SystemRandom


ALPHANUMERICS = string.ascii_letters + string.digits


def random_password(length=20, symbols=ALPHANUMERICS + '@$^_+&'):
rng = SystemRandom()
return ''.join(rng.choice(symbols) for _ in range(length))

比较之前密码中每个字符出现的频率:

histogram not characteristic of a uniform distribution

及之后:

histogram characteristic of a uniform distribution

关于python - map() lambda() 操作数仅在 python 2.7.6 中不受支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48835765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com