目录
摘要
本文通过一个完整的车牌选号系统项目,结合while
循环、for
循环和条件判断,帮助初学者掌握循环语句的核心用法。代码包含车牌生成、分组选择、用户交互等逻辑,适合新手理解循环在实际开发中的应用场景。
一、项目功能概述
-
生成车牌:随机生成45个符合规则的车牌(格式:晋A● + 5位字母/数字)。
-
选择车牌:分三组展示车牌,用户依次选择,最终确定一个车牌。
-
退出系统:输入
q
或Q
退出程序。
二、代码分段解析
1. 初始化与全局变量
import random
# 固定前缀
car_first = "晋A●"
# 允许的字符列表(字母+数字)
character = "A B C D E F G H J K L M N P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0".split(" ")
# 存储生成的所有车牌
car_number_list = []
# 存储用户选择的候选车牌
select_car_number = []
-
character
:通过split
方法将字符串转为列表,包含所有可用字符。 -
全局列表:
car_number_list
保存生成的车牌,select_car_number
保存用户选择的候选车牌。
2. 主程序循环(核心交互逻辑)
while True:
# 打印菜单
print("*" * 50)
print("<==========车牌选号系统===========>")
print("1. 生成车牌")
print("2. 选择号牌")
print("q/Q 退出")
print("*" * 50)
# 用户输入选项
car_number = input("请输入选项:")
-
while True
:无限循环保持程序运行,直到用户选择退出。 -
菜单打印:通过
print
输出可视化菜单,提升用户体验。
3. 功能1:生成车牌(while
循环嵌套for
循环)
if car_number == "1":
sum_1 = 0 # 计数器,确保生成45个车牌
while sum_1 < 45:
number_buf = "" # 临时存储生成的车牌号
# 生成5位随机字符
for j in range(5):
number_buf += random.choice(character)
# 容错判断:车牌不能全为字母或全为数字
if not number_buf.isalpha() and not number_buf.isdecimal():
cal_num = 0 # 统计字母数量
# 遍历字符,统计字母个数
for char in number_buf:
if char.isalpha():
cal_num += 1
# 如果字母数≥3,直接退出循环
if cal_num >= 3:
break
# 若字母数≥3,将车牌添加到列表
if cal_num >= 3:
car_number_list.append(car_first + number_buf)
# 更新计数器
sum_1 = len(car_number_list)
print("号牌已经生成完毕!!!")
-
while sum_1 < 45
:确保生成45个有效车牌。 -
for j in range(5)
:生成5位随机字符。 -
for char in number_buf
:遍历字符统计字母数量。 -
关键逻辑:车牌必须包含至少3个字母,且不能全为字母或数字。
4. 功能2:选择车牌(for
循环遍历列表)
elif car_number == "2":
# 将车牌分为三组
select_number_list_1 = car_number_list[:15]
select_number_list_2 = car_number_list[15:30]
select_number_list_3 = car_number_list[30:]
# 处理第一组选择
for i in range(len(select_number_list_1)):
print(f"序号{i+1}--{select_number_list_1[i]}")
num_1 = input("请输入这一组你喜欢的号牌的序号")
# 容错:检查输入是否为1-15的数字
if num_1.isdecimal() and "1" <= num_1 <= "15":
num_1 = int(num_1)
car_number1 = select_number_list_1[num_1-1]
select_car_number.append(car_number1)
# 第二组、第三组代码类似(略)
# 最终选择
print("您选中的号码为:", select_car_number)
# 用户从候选车牌中选择一个
final_choice = int(input("请填写车牌序号:")) - 1
print(f'恭喜您,最终选择的车牌为:{select_car_number[final_choice]}')
-
for i in range(len(...))
:遍历列表打印车牌及其序号。 -
输入校验:通过
isdecimal()
和范围检查确保输入合法。 -
列表切片:
car_number_list[:15]
将车牌分成三组。
5. 退出与容错处理
elif car_number.lower() == "q":
break # 退出循环
else:
print("无效指令,请输入正确的指令")
三、循环语句核心知识点
1. while
循环
-
作用:重复执行代码块,直到条件不满足。
-
适用场景:不确定循环次数时(如用户反复操作菜单)。
-
示例:
while sum_1 < 45:
# 生成车牌直到满足数量
2. for
循环
-
作用:遍历序列(如列表、字符串)中的每个元素。
-
适用场景:已知循环次数或需要遍历数据时。
-
示例:
for j in range(5):
# 生成5位字符
3. 循环控制
-
break
:立即退出循环。 -
continue
:跳过当前循环,进入下一次迭代。
五、总结
通过本项目,你学会了:
-
while
循环实现持续交互。 -
for
循环遍历数据与生成车牌。 -
条件判断与循环结合实现输入校验。
下一步练习:
-
尝试为系统添加“保存车牌到文件”功能。
-
优化分组选择逻辑,减少重复代码。