首页 > 解决方案 > 将随机字母分配给变量,但每个字母在 Python 中必须出现 2 次或 4 次

问题描述

如何为变量分配随机字母并确保每个字母必须分配 2 次或 4 次?我对分配随机字母没有问题,但我在后面的部分遇到了很大的麻烦。

这是我当前的代码,肯定有问题,但我不知道如何解决:

import random
import string
def assign():
    alphabet = string.ascii_uppercase
    n1 = random.choice(alphabet)
    n2 = random.choice(alphabet)
    n3 = random.choice(alphabet)
    n4 = random.choice(alphabet)
    n5 = random.choice(alphabet)
    n6 = random.choice(alphabet)
    n7 = random.choice(alphabet)
    n8 = random.choice(alphabet)
    
alphabet = string.ascii_uppercase
n1 = random.choice(alphabet)
n2 = random.choice(alphabet)
n3 = random.choice(alphabet)
n4 = random.choice(alphabet)
n5 = random.choice(alphabet)
n6 = random.choice(alphabet)
n7 = random.choice(alphabet)
n8 = random.choice(alphabet)   

if ((n1+n2+n3+n4+n5+n6+n7+n8).count(random.choice(alphabet))) != 2 or 4:
    assign()
else:
    print(n1,n2,n3,n4,n5,n6,n7,n8)

如何修复它,以便将任何随机分配的字母分配给另一个变量或 3 个以上?(指定的字母出现 2 或 4 次)。

标签: pythonrandom

解决方案


这是你想要的吗?

import string
import random

number_of_variables_to_create = 8
print(
    [
        ''.join(
            random.choice(string.ascii_uppercase)
            for _ in range(random.choice([2, 4]))
            ) for _ in range(number_of_variables_to_create + 1)
    ]
)

输出:一个8随机字符串列表,长度 24字符长。您可以将这些字符串分配给变量。

['JV', 'CRFQ', 'DA', 'KSPW', 'NVRB', 'MQOM', 'IB', 'QD', 'EU']

要添加和访问变量,请尝试以下操作:

import string
import random

number_of_variables_to_create = 8
strings = [
    ''.join(
        random.choice(string.ascii_uppercase)
        for _ in range(random.choice([2, 4]))
        ) for _ in range(number_of_variables_to_create + 1)
]


for idx, _string in enumerate(strings, start=1):
    globals()[f"n{idx}"] = _string

print(strings)
print(globals()["n1"])

样本输出:

['BZJV', 'EBYL', 'NW', 'IDVU', 'VUGJ', 'IP', 'PJ', 'HW', 'IE']
BZJV

推荐阅读