在Python中生成随机字母,我有两种思路,一种基于ASCII码还有一种基于Python自带的String函数:
基于ASCII码的随机数生成
import random
s=chr(random.randint(65,90))
print(s)
其中 chr()负责吧int数据根据ASCII表转译成字符,random.randint()负责生成随机数,方法优点是只需要调用一个random,缺点就是灵活性不高。
基于String的方法可调用性高相对较高,具体代码如下:
import random
import string
s=random.choice(string.ascii_uppercase)
print(s)
其中string.ascii_uppercase 会生成一个全英文大写字母的字符串,在通过random.choice()来随机从字符串中获取其中的一个。
那么通过这个原理,我们可以进行车牌号的随机生成,用辽宁举例,因为辽宁的前开头字母只到K,所以我们首先需要用chr(random.randint(A,B)) 的方法将字母控制在A-K之间(实际上没有辽I,一个while解决的问题暂且忽略),然后在获取后面的五个随机字母+数字,代码具体如下:
import random
import string
s1=chr(random.randint(65,69))
#基于ASCII码生成一个在A-E之间的大写字母
s2=random.sample(string.ascii_uppercase+string.digits,5)
#在大写字母+0-9数字的字符串中以数组的形式随机取5个值
s3="".join(s2)
#使用"".join 拼接数组
CarNumber=""" 辽%s :%s """
print(CarNumber % (s1,s3))
最终的成果版如下:
import random
import string
s=3
for i in range(3):
num=[] #定义一个用来存储车牌号的列表
for j in range(20):
s1=chr(random.randint(65,69)) #基于ASCII码生成一个在A-E之间的大写字母
while s1==("I"):
s1 = chr(random.randint(65, 69))
#排除辽I
s2=random.sample(string.ascii_uppercase+string.digits,5) #在大写字母+0-9数字的字符串中以数组的形式随机取5个值
s3="".join(s2) #使用"".join 将数组拼接成字符串
CarNumber="""辽%s-%s"""
print(CarNumber % (s1,s3))
num.append(CarNumber % (s1,s3)) #将生成记录存储到num数组
choice = input(f"请输入你选中的号码,若不满意可以输入任意字符随机生成,您还有{s}次机会重新生成:").strip()
s=s-1
if choice in num:
print(f"恭喜您选择了车牌号{choice}")
exit("Goode Luck")
else:
print("重新生成中")
print("____________________")