Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0159
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在:
- 个人网站: `https://oeasy.org`
- 蓝桥云课: `https://www.lanqiao.cn/courses/3584`
- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial`
- Gitee: `https://gitee.com/overmind1980/oeasypython`
---- 上次完成了猜丁壳
- 程序可以优化
- 也需要提高鲁棒性
- 注意 鲁棒性的判断
0 <= choice <= 2:
- 相当于2个比较都为真
- 0 <= choice
- choice <= 2
- 这里面 的逻辑 是什么呢??🤔
0 <= choice <= 2:
- 等价于
0 <= choice and choice <= 2:
- and 是
- 逻辑与运算符
help
- 去帮助手册
- 布尔运算其实有三种
- 逻辑与 and
- 逻辑或 or
- 逻辑非 not
- not 我们见过了
- and 是两个 bool型的运算
- bool 型变量总共就两个
- True
- False
- 我们遍历一下
- 全真得真 有假得假
- 为什么有 and运算 呢?
- 逻辑来源于电路
- 两个开关量
- 必须
都为 True
- 整个电路 才连起来
- 生活中这种例子也常见
- 如果
- 你快乐并且感到了
- 那就拍拍手
- 不快乐不拍
- 感受不到不拍
- 都有的时候才拍
- 一个巴掌 拍不响
- 就和 搞对象 一样
- 比如 说俩人 搞对象 谈恋爱
- 必须 俩人都认为是 谈恋爱
- 才算是谈恋爱
- 否则的话
- 只有一个人认为 是谈恋爱
- 那 算是什么
- 算是追求吧。。。应该是
- 就像声控灯似的
- 也要满足两个条件
- 满足哪两个条件呢?
- 光敏开关 得满足条件
- 声控开关 也满足条件
- 得都 满足条件
- 有一个不满足
- 就 不行
- 有一个不满足 就不亮
- 差一个 都不行
- 用户名密码
- 都有 都对才行
- 差一点 都不对
- 大巴得等 人都上来了
- 才能开
- 不能说 来一个人 就开
- 5v5 得都准备好才开
- 你说我等不急了
- 谁先进去谁先开
- 那不行
- 地铁人多的时候
- 什么时候发车
- 得等到 门都关好之后 发车
- 你说有个门 也不知道 关没关好
- 强行开车?
- 那就很可能出危险
- 如果有 0
- 就返回 0
- 如果都不是零
- 就返回后面的
- 最终结果是
- 可以通过 bool 转化的
- 字符串如何呢?
- 有空串 返回空串
- 没空串 返回后面的
- 判断的是
- 是不是空串
- 还有什么数据类型呢?
- 有空容器
- 返回空容器
- 没有空容器
- 返回后面的
- 如果是
- 两个
不同类型的 空容器呢?
- 两个
- 其实返回什么空容器
- 不是很重要
- 各种空容器 对应的布尔值 是相同的
- 逻辑运算像 四则运算 一样
- 可以 连续 计算
- 上图中 第二种表述 加了括号
- 逻辑含义 更明确
- 符合禅意
- In the face of ambiguity, refuse the temptation to guess.
- 面对不明确的 语义时
- 拒绝猜测
- 可以放心加括号
- 越明确清晰越好
- 拒绝猜测
- 经典的多条件判断
if 发热 and 口渴 and 黄痰
风热
elif 怕冷 and 流清涕
风寒
else
食积/气虚- 北京市机动车限号规则
- 真的太复杂了
- 多个条件
- 层层嵌套
"""
Author by chenmengde
"""
from datetime import datetime
def is_traffic_limited(day, day_of_week, license_plate_tail): # 定义一个函数,内含日期、星期、车牌尾号三个参数
# 2023.4.3 - 2023.7.2规则:
if (datetime(2023, 4, 3) <= day <= datetime(2023, 7, 2) and
day_of_week == "Monday" and license_plate_tail in ["4", "9"]):
return True
elif (datetime(2023, 4, 3) <= day <= datetime(2023, 7, 2) and
day_of_week == "Tuesday" and license_plate_tail in ["5", "0"]):
return True
elif (datetime(2023, 4, 3) <= day <= datetime(2023, 7, 2) and
day_of_week == "Wednesday" and license_plate_tail in ["1", "6"]):
return True
elif (datetime(2023, 4, 3) <= day <= datetime(2023, 7, 2) and
day_of_week == "Thursday" and license_plate_tail in ["2", "7"]):
return True
elif (datetime(2023, 4, 3) <= day <= datetime(2023, 7, 2) and
day_of_week == "Friday" and license_plate_tail in ["3", "8"]):
return True
# 2023.7.3 - 2023.10.1规则:
elif (datetime(2023, 7, 3) <= day <= datetime(2023, 10, 1) and
day_of_week == "Monday" and license_plate_tail in ["3", "8"]):
return True
elif (datetime(2023, 7, 3) <= day <= datetime(2023, 10, 1) and
day_of_week == "Tuesday" and license_plate_tail in ["4", "9"]):
return True
elif (datetime(2023, 7, 3) <= day <= datetime(2023, 10, 1) and
day_of_week == "Wednesday" and license_plate_tail in ["5", "0"]):
return True
elif (datetime(2023, 7, 3) <= day <= datetime(2023, 10, 1) and
day_of_week == "Thursday" and license_plate_tail in ["1", "6"]):
return True
elif (datetime(2023, 7, 3) <= day <= datetime(2023, 10, 1) and
day_of_week == "Friday" and license_plate_tail in ["2", "7"]):
return True
# 2023.10.2 - 2023.12.31规则:
elif (datetime(2023, 10, 2) <= day <= datetime(2023, 12, 31) and
day_of_week == "Monday" and license_plate_tail in ["2", "7"]):
return True
elif (datetime(2023, 10, 2) <= day <= datetime(2023, 12, 31) and
day_of_week == "Tuesday" and license_plate_tail in ["3", "8"]):
return True
elif (datetime(2023, 10, 2) <= day <= datetime(2023, 12, 31) and
day_of_week == "Wednesday" and license_plate_tail in ["4", "9"]):
return True
elif (datetime(2023, 10, 2) <= day <= datetime(2023, 12, 31) and
day_of_week == "Thursday" and license_plate_tail in ["5", "0"]):
return True
elif (datetime(2023, 10, 2) <= day <= datetime(2023, 12, 31) and
day_of_week == "Friday" and license_plate_tail in ["1", "6"]):
return True
# 2024.1.1 - 2024.3.31规则:
elif (datetime(2024, 1, 1) <= day <= datetime(2024, 3, 31) and
day_of_week == "Monday" and license_plate_tail in ["1", "6"]):
return True
elif (datetime(2024, 1, 1) <= day <= datetime(2024, 3, 31) and
day_of_week == "Tuesday" and license_plate_tail in ["2", "7"]):
return True
elif (datetime(2024, 1, 1) <= day <= datetime(2024, 3, 31) and
day_of_week == "Wednesday" and license_plate_tail in ["3", "8"]):
return True
elif (datetime(2024, 1, 1) <= day <= datetime(2024, 3, 31) and
day_of_week == "Thursday" and license_plate_tail in ["4", "9"]):
return True
elif (datetime(2024, 1, 1) <= day <= datetime(2024, 3, 31) and
day_of_week == "Friday" and license_plate_tail in ["5", "0"]):
return True
else:
return False
choose1 = input("您的机动车是否悬挂北京市牌照?悬挂北京市牌照请输入\"1\",悬挂外埠牌照请输入\"0\":") # 判断是否京牌
# 本地
if choose1 == str(1): # 若京牌:
choose2 = input("您的机动车是否属于以下类别?属于请输入\"1\",不属于请输入\"0\"。"
"(一)警车、消防车、救护车、工程救险车;\n"
"(二)公共电汽车、省际长途客运车辆及大型客车、京B号段号牌出租汽车(不含租赁车辆)、邮政专用车、"
"持有市交通行政管理部门核发的旅游客车营运证件的车辆、经市公安交通管理部门核定的单位班车和学校校车;\n"
"(三)车身喷涂统一标识并执行公务的行政执法车辆和清障专用作业车辆;\n"
"(四)环卫、园林、道路养护、应急通信保障的专项作业车辆,殡仪馆的殡葬车辆;\n"
"(五)悬挂“使”字头号牌车辆及经批准临时入境的车辆;\n"
"(六)纯电动小客车(以可充电电池作为唯一动力来源、由电动机驱动的小客车)。\n") # 判断是否特种车辆
if choose2 == str(1): # 若是特种车辆:
print("不限行")
elif choose2 == str(0): # 若不是特种车辆:
choose3 = input("您的机动车是否是公务用车?是请输入\"1\",不是请输入\"0\"。") # 判断是否公车:
if choose3 == str(1): # 若是公车:
day = datetime.today() # 获取当前日期
day_of_week = datetime.now().strftime("%A") # 获取当前星期几
license_plate_tail = input("\n请输入您的机动车车牌尾号(机动车车牌尾号为字母的请输入“0”): ") # 获取车牌尾号
if is_traffic_limited(day, day_of_week, license_plate_tail):
print("今日全天限行,范围为北京市全域。")
else:
print("今日不限行。")
elif choose3 == str(0): # 若非公车,即是普通车:
day = datetime.today() # 获取当前日期
day_of_week = datetime.now().strftime("%A") # 获取当前星期几
license_plate_tail = input("\n请输入您的机动车车牌尾号(机动车车牌尾号为字母的请输入“0”): ") # 获取车牌尾号
if is_traffic_limited(day, day_of_week, license_plate_tail) and int("700") <= int(datetime.now().strftime("%H%M")) <= int("2000"):
print("当前至20时限行,范围为五环路以内道路(不含五环路)。")
else:
print("当前至(次日)7时不限行,可放心行驶。")
else:
print("\n错误!请输入\"1\"或\"0\"。") # 错误处理,下同
else:
print("\n错误!请输入\"1\"或\"0\"。")
# 外地
elif choose1 == str(0): # 若外地牌:
choose4 = input("您的机动车是载客汽车还是载货汽车?载客汽车请输入\"1\",载货汽车请输入\"0\"。") # 判断车辆类型
if choose4 == str(1): # 若是客车:
choose5 = input("您的机动车是否已办理\"进京通行证\"?已办理请输入\"1\",未办理请输入\"0\"。") # 判断是否已办通行证
if choose5 == str(1): # 已办:
choose6 = input("您办理的进京通行证属于以下那种类型?\"进京通行证(六环内)\"请输入\"1\",\"进京通行证(六环外)\"请输入\"0\"。") # 判断通行证类型
if choose6 == str(1): # 六环内:
day_of_week = datetime.now().strftime("%A") # 获取当前星期几
import datetime
from datetime import datetime
if int("700") <= int(datetime.now().strftime("%H%M")) <= int("900") or int("1700") <= int(datetime.now().strftime("%H%M")) <= int("2000"): # 判断时间,工作日高峰期限行
print("禁止在五环路主辅路及其以内道路和大兴区部分道路行驶")
elif int("900") <= int(datetime.now().strftime("%H%M")) <= int("1700"): # 平峰按规则判断
day = datetime.today() # 获取当前日期
day_of_week = datetime.now().strftime("%A") # 获取当前星期几
license_plate_tail = input("\n请输入您的机动车车牌尾号(机动车车牌尾号为字母的请输入“0”): ") # 获取车牌尾号
if (is_traffic_limited(day, day_of_week, license_plate_tail) and int("900") <= int(datetime.now().strftime("%H%M")) <= int("1700")):
print("\n当前至20时限行,范围为五环路以内道路(不含五环路),禁止驶入二环路(含)以内道路、建国门外大街、复兴门外大街、复兴路(木樨地桥至新兴桥段)。")
else:
print("\n当前至17时不限行,禁止驶入二环路(含)以内道路、建国门外大街、复兴门外大街、复兴路(木樨地桥至新兴桥段)。")
else:
print("当前至(次日)7时不限行,禁止驶入二环路(含)以内道路、建国门外大街、复兴门外大街、复兴路(木樨地桥至新兴桥段)。")
elif choose6 == str(0): # 六环外:
print("不限行,您可在通行证规定的区域(六环路及以外道路、通州区以外道路)放心行驶。")
else: # 错误处理
print("错误!请输入\"1\"或\"0\"。")
elif choose5 == str(0): # 未办理:
print("禁止驶入北京市行政区域内道路。")
else:
print("错误!请输入\"1\"或\"0\"。")
elif choose4 == str(0): # 若是货车:
choose7 = input("您的机动车是黄标车吗?是请输入\"1\",不是请输入\"0\"。") # 判断是否黄标
if choose7 == str(1): # 黄标:
print("禁止驶入北京市行政区域内道路。")
elif choose7 == str(0): # 不是黄标:
if int("600") <= int(datetime.now().strftime("%H%M")) <= int("2400"): # 判断时间,6-24时限行
print("禁止驶入六环路(含)以内道路")
else:
choose8 = input("您的机动车是否为整车运送鲜活农产品车辆?是请输入\"1\",不是请输入\"0\"。") # 判断是否绿通
if choose8 == str(1): # 若是绿通:
print("可驶入六环路(含)以内道路,全天禁止驶入长安街(新兴桥至国贸桥)、人民大会堂南侧路、西侧路、广场东、西侧路、南、北池子大街,南、北长街,府右街、王府井大街,台基厂路、中关村南路、科学院南路(知春路至北四环路)、三里河路(木樨地路口至甘家口)、万寿路(万寿路口至万寿路北口)、朱各庄路(万寿路北口至西四环中路东辅路)等道路。")
elif choose8 == str(0): # 若不是绿通:
choose9 = input("您的机动车是否已办理\"进京通行证\"?已办理请输入\"1\",未办理请输入\"0\"。") # 判断是否办理货车通行证
if choose9 == str(1): # 已办理:
print("可驶入六环路(含)以内道路,全天禁止驶入长安街(新兴桥至国贸桥)、人民大会堂南侧路、西侧路、广场东、西侧路、南、北池子大街,南、北长街,府右街、王府井大街,台基厂路、中关村南路、科学院南路(知春路至北四环路)、三里河路(木樨地路口至甘家口)、万寿路(万寿路口至万寿路北口)、朱各庄路(万寿路北口至西四环中路东辅路)等道路。")
elif choose9 == str(0): # 未办理:
print("禁止驶入六环路(含)以内道路")
else: # 错误处理,下同
print("错误!请输入\"1\"或\"0\"。")
else:
print("错误!请输入\"1\"或\"0\"。")
else:
print("错误!请输入\"1\"或\"0\"。")
else:
print("错误!请输入\"1\"或\"0\"。")
else:
pint("错误!请输入\"1\"或\"0\"。")
- 这次学习了 and
- and 是一个逻辑与运算符
- 都是 True 的时候
- 才返回 True
- 其余都返回 False
- 这个运算符变量可以
- 有数字、字符串、容器之类的
- 逻辑还是零、空串、空容器对应 False
- 一旦出现 False
- 就返回逻辑值 False 对应的变量
- 什么时候
- 一定要用嵌套条件
- 不能用分支条件呢?
- 下次再说 👋
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。























