打印随机字符而不是相同的字符[重复]

Posted

技术标签:

【中文标题】打印随机字符而不是相同的字符[重复]【英文标题】:Printing random characters instead of the same ones [duplicate] 【发布时间】:2019-11-05 07:08:18 【问题描述】:

对不起这个可怕的标题,我不知道如何描述我的问题。

我正在尝试生成包含 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 等。 我希望底数之后的数字输出所有可能的解决方案,因此底数之后的数字将是随机顺序。

【问题讨论】:

注:第一行中定义的numList 是一个元组,而不是一个列表,redmi4AnumList 参数是一个字符串,也不是一个列表。 【参考方案1】:

试试:-

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,你可以改个别的名字。

【讨论】:

【参考方案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())

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

【讨论】:

稍微纠正一下,range()应该是8而不是7,因为不包括上限 @verbids 当您更改range() 时,它只会更改您将看到制作序列号的次数。例如,如果你使用range(1),你只会看到:865592019366958 -> Redmi 4A 而如果你使用range(2),你会看到:865592019366958 -> Redmi 4A 865592015446593 -> Redmi 4A 感谢 Vasu Deo.S,我已经编辑了我的答案。 numList 从未使用过

以上是关于打印随机字符而不是相同的字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C#中如何产生随机字符串

返回结构指针的字符串打印随机结果[重复]

printf() 在没有双引号的情况下工作,打印随机字符 [重复]

返回相同字符串的随机字符串生成器[重复]

打印字符串,而不是字符数

试图随机化一个数组,但每次都保持相同的随机化[重复]