I am a teacher!

导航

习题解析之:汽车限行

【问题描述】

为缓解城市交通压力,武汉市交管局对于长江一桥及江汉一桥实行限行,规定如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

每日7时至22时,中型(含)以下载客汽车(新能源车除外)按车牌尾号分单双日通行(法定节假日、休息日除外),车牌尾号为英文字母的,按字母前最后一位阿拉伯数字对应日期的通行管理措施通行。出租车不受单双日限制通行。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬请根据输入的汽车牌号判断单双日通行。

编程要求
输入武汉市车牌号,本题中正确的数据形式为"鄂A-*****",8位长度。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

前3位为'鄂A-',后5位字符串由数字字符和大写字母字符(不包含大写O与I字母)组成,大写字母数量不超过两个,车牌号最后一位可能是数字字符或字母字符。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
如'鄂A-FQ234'或'鄂A-1D23A'。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

如果输入为正确的车牌号,则对应输出‘单号通行’或'双号通行'。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
如果输入不正确,输出'Data Error!'

示例1:

输入:
鄂A-12345
输出
单号通行
示例2:
输入:
鄂A-5432W
输出:
双号通行
示例3:
输入:
鄂A-2345
输出:
Data Error!

【编程思路】

        对于输入的车牌号 license,若其长度 len(license) 不是 8 位,或者车牌号前 3 位 license[0:3] 不是 '鄂A-',则输入不正确;
        对于可能的正确输入,再根据后 5 位信息组成的子字符串 sub (sub = license[3:]) 进行判断。
        若子字符串 sub 中包含大写字母 O 或 I ,则输入不正确;
        若子字符串 sub 中不包含大写字母 O 或 I,再用循环  while i <len(sub): 遍历 sub 中的每个字符,若当前字符 sub[i] 是大写字母('A' <= sub[i] <= 'Z'),则移除 sub 字符串中的这个大写字母,方法为:sub = sub[0:i] + sub[i + 1:] 。
        将 sub 字符串中的大写字母全部移除后,若 sub 字符串的长度小于 3,表示移除的大写字母数量超过了两个,输入不正确;若移除大写字母后的 sub 字符串不是全部由数字组成(not sub.isdigit()),则表示后 5 位中还有除数字字符和大写字母字符外的其他字符,输入也不正确。
        对于正确的输入,根据 sub 字符串的最后一位 sub[-1] 的奇偶性,输出“单号通行”或“双号通行”
        编写的源程序如下: 

         image

posted on 2025-11-21 16:40  aTeacher  阅读(1)  评论(0)    收藏  举报