Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t创建不重复的随机字符列表_Python_Python 3.x - Fatal编程技术网

Python Can';t创建不重复的随机字符列表

Python Can';t创建不重复的随机字符列表,python,python-3.x,Python,Python 3.x,嗨,我一周前开始学习python。我正在尝试创建一个字典来替换字符。例如(字典[“a”]=“%”) 我首先创建了一个列表,包含从ascii033到126的所有字符顺序。然后我尝试创建一个随机字符列表,以匹配第一个列表中的字符。但这是一个无限循环。这需要很长时间还是我的代码 代码如下: def replacement(): s=0 while s in range(93): rep.append(chr(randint(33,126))) if(le

嗨,我一周前开始学习python。我正在尝试创建一个字典来替换字符。例如(
字典[“a”]=“%”

我首先创建了一个列表,包含从
ascii033到126的所有字符顺序。然后我尝试创建一个随机字符列表,以匹配第一个列表中的字符。但这是一个无限循环。这需要很长时间还是我的代码

代码如下:

def replacement():
    s=0
    while s in range(93):
        rep.append(chr(randint(33,126)))
        if(letters[s] != rep[s]):
            k=0
            for replace in rep:
                if replace == rep[s]:
                    k+=1
            if(k<2):    
                s+=1
    print(rep)

letters = []
rep = []
i=33
while i <= 126:
    letters.append(chr(i))
    i+=1
replacement()
def replacement():
s=0
当s在范围(93)内时:
代表附加(chr(randint(33126)))
如果(字母)!=rep[s]):
k=0
对于在rep中替换:
如果replace==rep[s]:
k+=1
如果(k
而s在范围(93)内):
不做您认为它做的事情。它检查
s
是否在范围0..92内,并循环,只要该条件为真;因为
s
从不改变其初始值0,该条件永远不会变为假

要在0..92范围内迭代,应使用:

for s in range(93):
您的另一个while循环也应重写为:

for i in range(33,127):
    letters.append(chr(i))
或者更好,用列表代替:

letters = [chr(i) for i in range(33,127)]

如果您想以随机顺序用chr(33)到chr(126)填充列表,更好的方法是使用random.shuffle()


这三行可以取代你在问题中发布的所有内容。按照我的理解,这是一种更快、更容易理解的完成任务的方式。

@ChihebNexus我不认为
字母=[]
forwards应该在函数内部。@Sid,您的代码将处于无限循环中,因为
s
将始终在
范围(93)
之间。最好使用
for循环
@WillDaSilva,想法是用
chr(33)
chr(126)的所有字符填充
rep
以随机顺序。Sid的算法目前有一些缺陷,但即使修复了这些缺陷,这种方法也非常缓慢。更好的方法是使用内置的random.shuffle()你想用这种方法创建一个随机列表是很酷的,但是你知道它为什么慢吗?随着
rep
变得越来越长,通过
rep
来检查新的字符是否已经在其中,随机生成一个不在
rep
中的字符的几率越来越低andomly选择最后两个字符需要很长时间。谢谢您的回答@WillDaSilva
from random import shuffle
letters = [chr(x) for x in range(33, 127)]
shuffle(letters)