打印随机字符,而不是相同的字符

时间:2019-06-23 00:57:52

标签: python

对不起,标题太糟糕了,我不知道该怎么形容我的问题。

我正在尝试生成一个包含15个字符的代码。其中7个已经给出,将被称为“基础”。其他8个必须是0到9之间的随机数。

这是我的代码

numList = "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"

whatSerial = input("Serial to generate?").upper()

def redmi4A(numList):
    return "8655920" + numList + numList + numList + numList + numList + numList + numList + numList + " -> Redmi 4A"
if whatSerial == "4A":
    for i in numList:
        print(redmi4A(i))

但是输出看起来像这样:

865592011111111 -> Redmi 4A
865592022222222 -> Redmi 4A
865592033333333 -> Redmi 4A
865592044444444 -> Redmi 4A
865592055555555 -> Redmi 4A
865592066666666 -> Redmi 4A
865592077777777 -> Redmi 4A
865592088888888 -> Redmi 4A
865592099999999 -> Redmi 4A
865592000000000 -> Redmi 4A

如您所见,它生成基数+ 11111、2222、3333等。 我希望基数后面的数字能够输出所有可能的解决方案,所以基数后面的数字将是随机的。

2 个答案:

答案 0 :(得分:3)

尝试:-

import random

numList = "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"

whatSerial = input("Serial to generate?").upper()

def redmi4A(opt):
    return "8655920" + "".join([random.choice(numList) for x in range(8)]) + " -> Redmi 4A"
if whatSerial == "4A":
    for i in numList:
        print(redmi4A(i))

输出:-

865592087748606 -> Redmi 4A
865592065496599 -> Redmi 4A
865592061039159 -> Redmi 4A
865592004047509 -> Redmi 4A
865592089008612 -> Redmi 4A
865592065068787 -> Redmi 4A
865592015446593 -> Redmi 4A
865592095893322 -> Redmi 4A
865592074954808 -> Redmi 4A
865592019366958 -> Redmi 4A

您的代码中也存在一个逻辑错误,在函数redmi4A()中,参数名称与元组numList的名称相同,这会导致影子名称问题,并用传递给函数的参数(因为两者都使用相同的名称)。因此,我将变量名称更改为opt,您可以使用其他名称。

答案 1 :(得分:2)

要生成随机数,请使用random模块。这是一个如何在09之间生成随机数的示例:

import random

random_num = random.randint(0, 9)

因此您的代码需要更改为此:

import random

whatSerial = input("Serial to generate?").upper()

def redmi4A():
    return "8655920" + ''.join([str(random.randint(0, 9)) for _ in range(8)]) + " -> Redmi 4A" # 8655920 + 8 random digits + " -> Redmi 4A"

if whatSerial == "4A":
    for i in range(10):
        print(redmi4A())

我希望这会有所帮助。如果不是,请尝试进一步澄清您的问题。