如何调整 for 循环的重复次数?

How can I adjust the repetition of for loops?

我想亲自考虑这个问题但我知道这里有经验丰富的人有很好的解决方案。我正在尝试创建一个代码编号生成器,我将对其进行改进以包括所有字母大小写。但是我的问题是,比如一个8个字母的字符串,我要复制for循环8次,而且我不能通过设置一个数字说出我想要多少个字符串。现在想请问有没有解决方法,防止代码中for for重复,只能通过设置generate number来实现?

myPass = []
print("Calculate started..")
for a in string.digits:
    for b in string.digits:
        for c in string.digits:
            for d in string.digits:
                for e in string.digits:
                    for f in string.digits:
                        for g in string.digits:
                            for h in string.digits:
                                myPass.append(a + b + c + d + e + f + g + h)

print("Calculate finish..")

例如,我想有一个函数,只需设置一个数字即可执行上述过程。这就是我调整字符串数量的方法:

def Generate(lettersCount):
    print("Generate for loops for 12 times..")  # for e.g.
    print("12 letters passwords calculated..")  # for e.g.

Generate(12) # 12 for loop's generated..

这里接受任何想法和建议。

您要制作密码生成器吗?

这可以通过随机模块和一个 for 循环来完成

all_symbols = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
import random

def password_gen():
    return ''.join(random.choice(all_symbols)for i in range(15))
    
password = password_gen()

    
print(f"Secure password - {password}")

Hope this helps :)

您可以像下面这样创建递归函数。

class PasswordGenerator():
    def __init__(self):
        self.password_list = []

    def generate_password(self, len, added_string=""):
        if len == 0:
            self.password_list.append(added_string)
        else:
            for i in string.digits:
                self.generate_rand_with_for(len - 1, i + added_string)

然后你可以使用这个class得到密码列表。

password_gen = PasswordGenerator()
password_gen.generate_password(12)
print(password_gen.password_list)

或者您可以使用 python 生成器来实现。

import string
from random import choices

def generate_random_string(len):
    while True:
        yield ''.join(choices(string.ascii_letters + string.digits, k = len))

gen = generate_random_string(12)

那么你可以随时从这个生成器中得到一个字符串。

print(next(gen))

或者您可以获得任意数量的密码,如下所示

number_of_passwords = 100000
for index, item in enumerate(gen_loop):
    print(item)
    if index == number_of_passwords:
        break

希望对您有所帮助。

在 python 中有一个名为 ord() 的函数。此函数 returns 字符的 unicode 值。从 0 到 9 的数字也是字符。我们可以查看'0'到'9'字符的unicode值如下...

for c in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']:
print('Character : ', c, ' and Unicode value : ', ord(c))

你会得到这样的结果...

Character :  0  and Unicode value :  48
Character :  1  and Unicode value :  49
Character :  2  and Unicode value :  50
Character :  3  and Unicode value :  51
Character :  4  and Unicode value :  52
Character :  5  and Unicode value :  53
Character :  6  and Unicode value :  54
Character :  7  and Unicode value :  55
Character :  8  and Unicode value :  56
Character :  9  and Unicode value :  57

模块“random”中有一个名为“randint()”的函数

random.randint(a, b)

Return a random integer N such that a <= N <= b. Alias for randrange(a, b+1).

现在考虑到您的 paawrod 将只包含从“0”到“9”的数字,您可以使用以下代码解决您的问题 ()...

def passwordGenerator(password_length):
    password = ''
    for length in range(password_length):
        password += chr(random.randint(48, 57))
    return password

print(passwordGenerator(12))

下面给出了生成密码的几个例子...

852501224302
501575191222
271006502875
914595005843

python returns 中的函数 chr() 来自 unicode 值的字符串表示形式。

你想要这样的东西吗?

import itertools as it
my_string = '1234'
s = it.permutations(my_string, len(my_string))
print([x for x in s])

输出:[('1', '2', '3', '4'), ('1', '2', '4', '3'), ('1', '3', '2', '4'), ('1', '3', '4', '2'), ('1', '4', '2', '3'), ('1', '4', '3', '2'), ('2', '1', '3', '4'), ('2', '1', '4', '3'), ('2', '3', '1', '4'), ('2', '3', '4', '1'), ('2', '4', '1', '3'), ('2', '4', '3', '1'), ('3', '1', '2', '4'), ('3', '1', '4', '2'), ('3', '2', '1', '4'), ('3', '2', '4', '1'), ('3', '4', '1', '2'), ('3', '4', '2', '1'), ('4', '1', '2', '3'), ('4', '1', '3', '2'), ('4', '2', '1', '3'), ('4', '2', '3', '1'), ('4', '3', '1', '2'), ('4', '3', '2', '1')]

编辑:如果要添加以获取字符串,请使用 print(["".join(x) for x in s])。 输出:['1234', '1243', '1324', '1342', '1423', '1432', '2134', '2143', '2314', '2341', '2413', '2431', '3124', '3142', '3214', '3241', '3412', '3421', '4123', '4132', '4213', '4231', '4312', '4321']

使用

import itertools as it
my_string = '1234'
my_list = it.permutations(my_string, len(my_string))
with open('your_file.txt', 'w') as f:
    for item in my_list:
        f.write("%s\n" % item)

如果您想将结果保存到文件中。如果您向控制台打印很长的结果,控制台通常会开始删除旧行。