ToB企服应用市场:ToB评测及商务社交产业平台

标题: Python程序笔记20230306 [打印本页]

作者: 宁睿    时间: 2023-4-13 17:42
标题: Python程序笔记20230306
判断闰年

初始版本
  1. year = input('请输入一个年份:')
  2. while not year.isdigit():
  3.     year = input("抱歉,您的输入有误,请输入一个整数:")
  4. year = int(year)
  5. if year % 400 == 0:
  6.     print(year, "是闰年!")
  7. else:
  8.     if year % 4 == 0 and year % 100 != 0:
  9.         print(year, "是闰年!")
  10.     else:
  11.         print(year, "不是闰年!")
复制代码
isdigit()函数

isdigit() 是 Python 字符串对象的方法,用于判断字符串是否只包含数字字符。该方法返回一个布尔值,如果字符串中所有字符都是数字,则返回 True,否则返回 False。如果字符串为空,则返回 False。
  1. my_string = "12345"
  2. print(my_string.isdigit()) # 输出 True
  3. my_string = "123abc"
  4. print(my_string.isdigit()) # 输出 False
  5. my_string = ""
  6. print(my_string.isdigit()) # 输出 False
复制代码
在实际编程中,可以使用 isdigit() 来检查输入的是否是数字,以确保输入的是有效数据。例如,在一个需要输入数字的程序中,可以使用 isdigit() 来验证用户的输入是否为数字,如果不是,则提示用户重新输入。
优化版本

将判断闰年的逻辑封装到一个函数中,这样使得程序结构更加清晰。另外,对于输入的异常处理,可以考虑添加一个循环让用户在输入错误时可以重新输入,而不是只提示一次。这是一个修改后的版本:
  1. def is_leap_year(year: int) -> bool:
  2.     if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
  3.         return True
  4.     return False
  5. def get_year_input(prompt: str) -> int:
  6.     while True:
  7.         year = input(prompt)
  8.         if year.isdigit():
  9.             return int(year)
  10.         else:
  11.             print("抱歉,您的输入有误,请输入一个正整数。")
  12. def main():
  13.     year = get_year_input("请输入一个年份:")
  14.     if is_leap_year(year):
  15.         print(year, "是闰年!")
  16.     else:
  17.         print(year, "不是闰年!")
  18. if __name__ == "__main__":
  19.     main()
复制代码
语法分析

def is_leap_year(year: int) -> bool
  1. # 定义一个带有注解的函数
  2. def is_leap_year(year: int) -> bool:
  3.     if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
  4.         return True
  5.     return False
  6. # 查看函数的注解
  7. print(is_leap_year.__annotations__)
复制代码
输出结果:
  1. {'year': <class 'int'>, 'return': <class 'bool'>}
复制代码
这个例子中,-> bool 表示这个函数的返回值是一个布尔值,year: int 表示这个函数的参数 year 是一个整数。这样,其他人在阅读或调用这个函数时,就可以清楚地知道这个函数的输入和输出类型。当然,你也可以使用其他类型或表达式作为注解,比如字符串、列表、字典等,只要它们是合法的 python 表达式即可。你也可以使用 typing 模块中的一些特殊类型来表示更复杂的类型,比如 Union、Optional、List 等。
Python 安装交互式查询程序

问题展现

Python 历史上有几个重要的版本节点:
不同平台对Python环境的默认支持是不同的:
一般建议安装Python3.x 版本进行学习或开发。下面的Python字典给出了不同平台的安装信息:
  1. install = {
  2.     "Windows": "请下载 Windows 安装包安装:https://www.python.org/downloads/windows/",
  3.     "CentOS": "使用yum包管理器,执行命令:yum install -y python3",
  4.     "Ubuntu": "使用apt-get包管理器,执行命令:apt-get install -y python3",
  5.     "MacOS": "安装brew包管理器,然后执行命令: brew install python3",
  6. }
复制代码
基于这个信息,我们可以编写一个交互式Python程序,要求支持用户操作
  1. if __name__ == '__main__':
  2.     install = {
  3.         "Windows": "请下载 Windows 安装包安装:https://www.python.org/downloads/windows/",
  4.         "CentOS": "使用yum包管理器,执行命令:yum install -y python3",
  5.         "Ubuntu": "使用apt-get包管理器,执行命令:apt-get install -y python3",
  6.         "MacOS": "安装brew包管理器,然后执行命令: brew install python3",
  7.     }
  8.     shortcut_keys = {}
  9.     for platform in install:
  10.         key = platform[0].lower()
  11.         shortcut_keys[key] = platform
  12.    
  13.     # TODO(You): 请在此添加Python3.x安装文档交互式查询代码
复制代码
以下是交互式执行的操作样例:
  1. 请选择安装平台[w/c/u/m, 按q退出]:w
  2. Windows: 请下载 Windows 安装包安装:https://www.python.org/downloads/windows/
  3. 请选择安装平台[w/c/u/m, 按q退出]:c
  4. CentOS: 使用yum包管理器,执行命令:yum install -y python3
  5. 请选择安装平台[w/c/u/m, 按q退出]:u
  6. Ubuntu: 使用apt-get包管理器,执行命令:apt-get install -y python3
  7. 请选择安装平台[w/c/u/m, 按q退出]:m
  8. MacOS: 安装brew包管理器,然后执行命令: brew install python3
  9. 请选择安装平台[w/c/u/m, 按q退出]:q
复制代码
解决方案

方案 1
  1. while True:
  2.     ret = input("请选择安装平台[w/c/u/m, 按q退出]:")
  3.     if ret != 'q':
  4.         platform = shortcut_keys.get(ret)
  5.         if platform is not None:
  6.             doc = install.get(platform)
  7.             print(f"{platform}: {doc}")
  8.         else:
  9.             print("不支持的平台")
  10.     else:
  11.         break
复制代码
方案 2
  1. while True:
  2.     ret = input("请选择安装平台[w/c/u/m, 按q退出]:")
  3.     platform = shortcut_keys.get(ret)
  4.     if ret == 'q':
  5.         break
  6.    
  7.     if platform is None:
  8.         print("不支持的平台")
  9.         continue
  10.    
  11.     doc = install.get(platform)
  12.     print(f"{platform}: {doc}")
复制代码
方案 3
  1. while True:
  2.     ret = input("请选择安装平台[w/c/u/m, 按q退出]:")
  3.     if ret == 'q':
  4.         break
  5.     platform = shortcut_keys.get(ret)
  6.     if platform is None:
  7.         print("不支持的平台")
  8.     else:
  9.         doc = install.get(platform)
  10.         print(f"{platform}: {doc}")
复制代码
重点语法分析
  1. shortcut_keys = {}
  2. for platform in install:
  3.     key = platform[0].lower()
  4.     shortcut_keys[key] = platform
复制代码
  1. shortcut_keys = {platform[0].lower(): platform for platform in install}
复制代码
两段代码的目的都是根据 install 字典创建一个新的 shortcut_keys 字典,键是平台名字的首字母的小写形式,值是完整的平台名字。
第一段代码:使用了一个 for 循环来遍历 install 字典的键(即平台名字)。对于每个平台名字,它首先提取平台名字的第一个字符(platform[0]),然后将其转换为小写形式(platform[0].lower()),并将其作为新字典 shortcut_keys 的键。接着,它将完整的平台名字作为键对应的值。这样,我们就得到了一个与 install 字典具有相同值但键不同的新字典。
在这一段 python 语句中,shortcut_keys = {} 用的是大括号{},是因为 shortcut_keys 是一个字典(dictionary)。字典是一种用来存储键值对(key-value pairs)的数据结构,它们用大括号{}来表示。字典的键(key)可以是任何不可变的类型,比如字符串、数字或元组,而值(value)可以是任何类型,比如列表、函数或对象。字典的元素可以通过键来访问,而不是通过索引(index)。例如,shortcut_keys[‘i’] 会返回 install  这个值。
第二段代码:这段代码使用了字典推导(dictionary comprehension),它是一种更简洁的创建字典的方法。字典推导的语法类似于列表推导,但使用大括号 {}(而不是方括号 []),并在其内部包含键值对(而不是单个元素)。
字典推导的基本结构是:{key_expression: value_expression for item in iterable}
在这个例子中,key_expression 是 platform[0].lower(),value_expression 是 platform,iterable 是 install。这个字典推导的含义是:对于 install 字典的每个键(即平台名字 platform),创建一个键值对,键是 platform[0].lower(),值是 platform。这样,我们得到了与第一段代码相同的结果。
优化结果
  1. if __name__ == '__main__':
  2.     install = {
  3.         "Windows": "请下载 Windows 安装包安装:https://www.python.org/downloads/windows/",
  4.         "CentOS": "使用yum包管理器,执行命令:yum install -y python3",
  5.         "Ubuntu": "使用apt-get包管理器,执行命令:apt-get install -y python3",
  6.         "MacOS": "安装brew包管理器,然后执行命令: brew install python3",
  7.     }
  8.     shortcut_keys = {platform[0].lower(): platform for platform in install}
  9.     while True:
  10.         platform_input = input("请选择安装平台[w/c/u/m, 按q退出]:")
  11.         if platform_input.lower() == 'q':
  12.             break
  13.         platform = shortcut_keys.get(platform_input.lower())
  14.         if platform:
  15.             print(f"{platform}: {install[platform]}")
  16.         else:
  17.             print("输入有误,请重新输入。")
复制代码
可以考虑将用户输入和指令显示的功能封装到函数中,以提高代码的可读性。
  1. def display_install_instructions(install_dict, shortcut_keys):
  2.     while True:
  3.         platform_input = input("请选择安装平台[w/c/u/m, 按q退出]:")
  4.         if platform_input.lower() == 'q':
  5.             break
  6.         platform = shortcut_keys.get(platform_input.lower())
  7.         if platform:
  8.             print(f"{platform}: {install_dict[platform]}")
  9.         else:
  10.             print("输入有误,请重新输入。")
  11. if __name__ == "__main__":
  12.     install = {
  13.         "Windows": "请下载 Windows 安装包安装:https://www.python.org/downloads/windows/",
  14.         "CentOS": "使用yum包管理器,执行命令:yum install -y python3",
  15.         "Ubuntu": "使用apt-get包管理器,执行命令:apt-get install -y python3",
  16.         "MacOS": "安装brew包管理器,然后执行命令: brew install python3",
  17.     }
  18.     shortcut_keys = {platform[0].lower(): platform for platform in install}
  19.     display_install_instructions(install, shortcut_keys)
复制代码
字典和列表

字典(dictionary)和列表(list)都是 Python 中常用的数据结构,但它们之间存在一些关键的区别:
常用的列表(list)和字典(dictionary)的操作方法:
列表(list)操作

字典(dictionary)操作


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4