Python字符串生成器,在特定的ord中

2024-09-30 01:33:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个程序,运行时会从我定义的字符列表中生成一个随机字符串。 代码是:

from random import randint
from random import *
import random
Upperletters=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
Lowerletters = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
Symbols = ["!","$","%","^","&","*","(",")","_","-","+","="]
Numbers = ["1","2","3","4","5","6","7","8","9","0"]
random.shuffle(Symbols)
random.shuffle(Numbers)
random.shuffle(Upperletters)
random.shuffle(Lowerletters)
randomlength = randint(8, 12)
stringgenerator = ''.join(choice(Upperletters + Symbols + Numbers + 
Lowerletters) for x in range(randomlength))
print(stringgenerator)
stringgeneratorlower = stringgenerator.lower()
letter_combos = ["qwe","wer","ert","rty","tyu","yui","uio","iop","asd","sdf","dfg","fgh","ghj","hjk","jkl","zxc","xcv","cvb","vbn","bnm"]
keyboard =int(sum(stringgeneratorlower.count(fragment) for fragment in letter_combos))
if keyboard >= 1:
    print("Bad try again")

但我的问题是,我希望字符串按符号添加的顺序使用符号,因此它应该首先是大写字符,然后是一些符号,然后是一些数字,然后是小写。我的问题是,它以完全随机的顺序生成它们。如何使它按我想要的顺序生成它们,以便生成的字符串不包含列表中的任何字母组合?你知道吗


Tags: 字符串fromimport列表顺序符号random字符
2条回答

编辑并修复它 我一年前才开始编写代码,从来没有使用过sorted,所以我没有为此烦恼。我把你的密码改了一点。我删除了Shuffle,因为你为什么要从一个无序列表中随机挑选一些东西?这和随机挑选一样! Full code

def shuffle():
    randomlength = randint(8, 12)
    pre = {0: '', 1:'',2:'',3:''}
    lists = {0: Upperletters, 1: Lowerletters, 2: Symbols, 3: Numbers}
    for x in range(4): pre[x]+=(choice(lists[x]))
    for i in range(randomlength-4):
        x = randint(1, 74)
        if x < 27: pre[0]+=choice(lists[0])
        elif x < 53: pre[1]+=choice(lists[1])
        elif x < 65: pre[2]+=choice(lists[2])
        else: pre[3]+=choice(lists[3])
    pw = ''
    for v in pre.values():
           pw += v
    return pw
print(shuffle())

一种方法是为每个类别分配一个权重,然后根据这些权重对生成的字符串进行排序:

import string
from random import choice, randint

symbols = '!$%^&*()_-+='

categories = [
    string.ascii_uppercase,
    symbols,
    string.digits,
    string.ascii_lowercase,
]
choices = ''.join(categories)
weights = {char: n for n, chars in enumerate(categories) for char in chars}

length = randint(8, 12)
rand_unordered = [choice(choices) for _ in range(length)]
rand_ordered = ''.join(sorted(rand_unordered, key=weights.get))

相关问题 更多 >

    热门问题