我正在尝试使用随机abc进行简单的加密以将其转换 但是我在随机库方面遇到了问题。
import random
def random(st = 'i love cats')
abc = 'abcdefghijklmnopqrstuvwxyz'
randomabc = abc
random.shuffle(randomabc)
print(randomabc)
预期输出是ABC的随机顺序 实际输出是一个错误(由于错误,代码在打印之前停止了)
答案 0 :(得分:1)
由于abc
是不可变的字符串(不能就地更改它),所以不能那样做。
相反,您必须:
将字符串分成字符列表。
随机播放列表
将字符列表重新加入字符串
import random
abc = 'abcdefghijklmnopqrstuvwxyz'
ls = list(abc)
random.shuffle(ls)
abc = ''.join(ls)
print(abc)
示例输出:
erbkvownuhcmfljtgqpyiazdxs
也:切勿使用与标准库相冲突的名称来命名函数或.py文件。在这种情况下,您的函数与random
模块的名称相同,这是一个很大的问题。
答案 1 :(得分:1)
您不能随机播放string
,它是一个不变的对象,一旦分配就无法更改。
相反,您需要将其转换为列表(一个可变对象),通过random.shuffle对其进行混洗,从而就地对列表进行混洗,然后将列表转换回字符串。
import random
abc = 'abcdefghijklmnopqrstuvwxyz'
#Convert string to list
li = list(abc)
#Shuffle the list inplace
random.shuffle(li)
#Convert list to string
print(''.join(li))
输出将为
dpfozwhyxalebnqrmstcjvuigk
qgjefyrahobpnxtzmsdkwivlcu
nchkriewsuxdzyjfgvpblomtqa
.....
除此以外,另一种选择(单线)是使用random.sample来选择len(abc)
个唯一的样本,并将所有样本连接成一个字符串(感谢@JonClements),但更多适合一次性改组
print(''.join(random.sample(abc, len(abc))))
答案 2 :(得分:1)
正如我在评论中提到的那样,您应该给函数名称不同于python关键字,导入的模块,类名称等。尝试将方法形式从random
重命名为random_alphabet
。
import random
def random_alphabet(st = 'i love cats'):
pass