打印随机字符而不是相同的字符[重复]
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
是一个元组,而不是一个列表,redmi4A
的numList
参数是一个字符串,也不是一个列表。
【参考方案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
模块。下面是一个如何在0
和9
之间生成随机数的例子:
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
从未使用过以上是关于打印随机字符而不是相同的字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章