Skip to content

Latest commit

 

History

History
372 lines (326 loc) · 17.6 KB

146-1982777-多分支和嵌套分支.sy.md

File metadata and controls

372 lines (326 loc) · 17.6 KB
show version enable_checker
step
1.0
true

比较运算符

回忆

  • 上次学习了 and
    • and 是一个逻辑与运算符
    • 都是 True 的时候
      • 才返回 True
      • 其余都返回 False
  • 这个运算符变量可以
    • 有数字、字符串、容器之类的
    • 逻辑还是零、空串、空容器对应 False
  • 一旦出现 False
    • 就返回逻辑值 False 对应的变量
  • 什么时候
    • 一定要用嵌套条件
    • 不能用分支条件呢?
  • 多分支和嵌套分枝是什么关系呢?

嵌套结构的多分支

  • 这个逻辑是先选语言
    • 后点菜
  • 不选语言
    • 没法点菜
#!/usr/bin/python
print("欢迎来到选择语言程序!")  
print("请选择您想使用的语言:")  
print("1. 中文")  
print("2. English")  
print("3. Deutsch")
choice = input("请输入您的选择(1/2/3):")  
if choice == "1":  
    print("您选择了中文。")  
    print("欢迎光临!以下是我们的菜单:")  
    print("a. 宫保鸡丁")  
    print("b. 红烧肉")  
    print("c. 鱼香肉丝")  
    print("d. 清炒时蔬")  
    print("请选择您想点的菜品(输入数字):")  
    choice = input()  
    if choice == "a":  
        print("您选择了宫保鸡丁。")  
        print("菜已经下单,请等待上菜。")  
    elif choice == "b":  
        print("您选择了红烧肉。")  
        print("菜已经下单,请等待上菜。")  
    elif choice == "c":  
        print("您选择了鱼香肉丝。")  
        print("菜已经下单,请等待上菜。")  
    elif choice == "d":  
        print("您选择了清炒时蔬。")  
        print("菜已经下单,请等待上菜。")  
    else:  
        print("无效的选择,请重新输入。")  
elif choice == "2":  
    print("您选择了英文。")  
    print("Welcome! Here is our menu:")  
    print("a. Kung Pao Chicken")  
    print("b. Red-Cooked Pork")  
    print("c. Fish-Flavored Shredded Pork")  
    print("d. Stir-Fried Greens")  
    print("Please choose the dish you want to order (input the number):")  
    choice = input()  
    if choice == "a":  
        print("You chose Kung Pao Chicken.")  
        print("Dish has been ordered, please wait for it to be served.")  
    elif choice == "b":  
        print("You chose Red-Cooked Pork.")  
        print("Dish has been ordered, please wait for it to be served.")  
    elif choice == "c":  
        print("You chose Fish-Flavored Shredded Pork.")  
        print("Dish has been ordered, please wait for it to be served.")  
    elif choice == "d":  
        print("You chose Stir-Fried Greens.")  
        print("Dish has been ordered, please wait for it to be served.")  
    else:
        print("please try again")
elif choice == "3":
    print("您已选择德文。")
    print("Willkommen! Hier ist unser Speiseplan:")  
    print("a. Königsberger Pferdefleisch")  
    print("b. Rot gagasierte Schweinebraten")  
    print("c. Fischgeschnetzeltes mit soße" )   
    print("d. Gemüse mit Reis" )   
    print("Bitte wählen Sie das Gericht aus dem Menü (Eingabe der Nummer):" )
    choice = input()
    if choice == "a":
        print (" Sie haben Königsberger Pferdefleisch gewählt." )   
        print ("Das Gericht wird gefordert, bitte warten Sie bis es serviert wird." ) 
    elif choice == "b":
        print (" Sie haben Rot gagasierte Schweinebraten." )   
        print ("Das Gericht wird gefordert, bitte warten Sie bis es serviert wird." ) 
    elif choice == "c":
        print (" Sie haben Fischgeschnetzeltes mit soße" )   
        print ("Das Gericht wird gefordert, bitte warten Sie bis es serviert wird." ) 
    elif choice == "d":
        print (" Sie haben Gemüse mit Reis." )   
        print ("Das Gericht wird gefordert, bitte warten Sie bis es serviert wird." ) 
    else:
        print("kaputt")
else:
    print("请重新输入")

嵌套的必要性

  • 这个程序 就是 一个嵌套的多分枝
    • 先选语言
    • 再选菜
  • 还有更复杂的吗?

限号规则

图片描述

  • 真的太复杂了
    • 多个条件
    • 层层嵌套

代码

"""
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\"。")

效果

  • 真的好复杂

图片描述

  • 这只是个简单的限号规则
  • 更复杂的是法律

秦律

  • 各行各业各个领域"皆有法式"

图片描述

  • 征发徭役和兵役的《徭律》、《傅律》、《敦表律》和《戍律》

大泽乡

  • 认字的人不多
    • 法律又太复杂
    • 需要专业人士

图片描述

  • 驻守渔阳密云的队伍
    • 罪不至死
    • 但是 没有人知道细节

约法三章

  • 与父老约,法三章耳;
  • 杀人者死,伤人及盗抵罪。
  • 余悉除去秦法。

图片描述

  • 这就简单明确多了

汉律

  • 但是 律法不能光简单
  • 也要 细致
  • 否则就容易被钻空子

图片描述

  • 据《晋书·刑法志》记载
    • 东汉末年﹐汉律包括萧何的《九章律》
    • 叔孙通《傍章》十八篇
    • 张汤《越宫律》二十七篇
    • 赵禹《朝律》七篇
    • 又有《令甲》三百余篇
    • 以及鲍昱关于嫁娶辞讼的《法比都目》
    • 总共九百零六卷😳

总结

  • 这次研究了 限号规则 真的太复杂啦
  • 你还见过什么复杂的规则吗?
  • 可以做成python程序吗?
  • 生活中很多数值都是天然有范围限制的
  • 对于这些数值 应该如何判断呢?
  • 下次再说 👋