Python程序笔记20230306
判断闰年
初始版本
year = input('请输入一个年份:')
while not year.isdigit():
year = input("抱歉,您的输入有误,请输入一个整数:")
year = int(year)
if year % 400 == 0:
print(year, "是闰年!")
else:
if year % 4 == 0 and year % 100 != 0:
print(year, "是闰年!")
else:
print(year, "不是闰年!")
isdigit()函数
isdigit() 是 Python 字符串对象的方法,用于判断字符串是否只包含数字字符。该方法返回一个布尔值,如果字符串中所有字符都是数字,则返回 True,否则返回 False。如果字符串为空,则返回 False。
my_string = "12345"
print(my_string.isdigit()) # 输出 True
my_string = "123abc"
print(my_string.isdigit()) # 输出 False
my_string = ""
print(my_string.isdigit()) # 输出 False
在实际编程中,可以使用 isdigit() 来检查输入的是否是数字,以确保输入的是有效数据。例如,在一个需要输入数字的程序中,可以使用 isdigit() 来验证用户的输入是否为数字,如果不是,则提示用户重新输入。
优化版本
将判断闰年的逻辑封装到一个函数中,这样使得程序结构更加清晰。另外,对于输入的异常处理,可以考虑添加一个循环让用户在输入错误时可以重新输入,而不是只提示一次。这是一个修改后的版本:
def is_leap_year(year: int) -> bool:
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
return True
return False
def get_year_input(prompt: str) -> int:
while True:
year = input(prompt)
if year.isdigit():
return int(year)
else:
print("抱歉,您的输入有误,请输入一个正整数。")
def main():
year = get_year_input("请输入一个年份:")
if is_leap_year(year):
print(year, "是闰年!")
else:
print(year, "不是闰年!")
if __name__ == "__main__":
main()
语法分析
def is_leap_year(year: int) -> bool
year: int是一个类型提示注释,用于告诉程序员和解释器该函数的参数year应该是一个整数类型。->的语法是一种函数注解(function annotation),它可以用来为函数的参数和返回值添加一些元数据,比如类型、描述等。函数注解是可选的,它不会影响函数的执行,也不会强制类型检查,它只是提供了一些额外的信息,方便阅读和理解代码。你可以使用__annotations__属性来访问函数的注解。例如:
# 定义一个带有注解的函数
def is_leap_year(year: int) -> bool:
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
return True
return False
# 查看函数的注解
print(is_leap_year.__annotations__)
输出结果:
{'year': <class 'int'>, 'return': <class 'bool'>}
这个例子中,-> bool 表示这个函数的返回值是一个布尔值,year: int 表示这个函数的参数 year 是一个整数。这样,其他人在阅读或调用这个函数时,就可以清楚地知道这个函数的输入和输出类型。当然,你也可以使用其他类型或表达式作为注解,比如字符串、列表、字典等,只要它们是合法的 python 表达式即可。你也可以使用 typing 模块中的一些特殊类型来表示更复杂的类型,比如 Union、Optional、List 等。
Python 安装交互式查询程序
问题展现
Python 历史上有几个重要的版本节点:
- January 1994,Python1.0 发布
- 2000年10月16日,Python2.0 发布
- 2010年7月3日,Python2.7 发布,这是Python2.x的最后一个版本,Python2.x 和 Python3.x不兼容
- 2008年12月3日,Python3.0 发布,Python3引入多个和Python2.x不兼容的特性,Python 从2.x到3.x的迁移经历了比较长的时间,编程语言版本不兼容有时候会是个致命错误(例如Perl6),好在Python挺过来了。
- 2021年10月5号,Python3.10 发布,这是目前到2021年为止最新的版本
- 而最新的开发中版本是 Python3.11
不同平台对Python环境的默认支持是不同的:
- Windows 平台没有默认安装 Python
- Linux/Mac 平台大部分默认安装了 Python2.7
一般建议安装Python3.x 版本进行学习或开发。下面的Python字典给出了不同平台的安装信息:
install = {
"Windows": "请下载 Windows 安装包安装:https://www.python.org/downloads/windows/",
"CentOS": "使用yum包管理器,执行命令:yum install -y python3",
"Ubuntu": "使用apt-get包管理器,执行命令:apt-get install -y python3",
"MacOS": "安装brew包管理器,然后执行命令: brew install python3",
}
基于这个信息,我们可以编写一个交互式Python程序,要求支持用户操作:
- 反复输入平台快捷键字符查询不同平台应该如何快速安装 Python3.x 版本
- 按
q退出查询
if __name__ == '__main__':
install = {
"Windows": "请下载 Windows 安装包安装:https://www.python.org/downloads/windows/",
"CentOS": "使用yum包管理器,执行命令:yum install -y python3",
"Ubuntu": "使用apt-get包管理器,执行命令:apt-get install -y python3",
"MacOS": "安装brew包管理器,然后执行命令: brew install python3",
}
shortcut_keys = {}
for platform in install:
key = platform[0].lower()
shortcut_keys[key] = platform
# TODO(You): 请在此添加Python3.x安装文档交互式查询代码
以下是交互式执行的操作样例:
请选择安装平台[w/c/u/m, 按q退出]:w
Windows: 请下载 Windows 安装包安装:https://www.python.org/downloads/windows/
请选择安装平台[w/c/u/m, 按q退出]:c
CentOS: 使用yum包管理器,执行命令:yum install -y python3
请选择安装平台[w/c/u/m, 按q退出]:u
Ubuntu: 使用apt-get包管理器,执行命令:apt-get install -y python3
请选择安装平台[w/c/u/m, 按q退出]:m
MacOS: 安装brew包管理器,然后执行命令: brew install python3
请选择安装平台[w/c/u/m, 按q退出]:q
解决方案
方案 1
while True:
ret = input("请选择安装平台[w/c/u/m, 按q退出]:")
if ret != 'q':
platform = shortcut_keys.get(ret)
if platform is not None:
doc = install.get(platform)
print(f"{platform}: {doc}")
else:
print("不支持的平台")
else:
break
方案 2
while True:
ret = input("请选择安装平台[w/c/u/m, 按q退出]:")
platform = shortcut_keys.get(ret)
if ret == 'q':
break
if platform is None:
print("不支持的平台")
continue
doc = install.get(platform)
print(f"{platform}: {doc}")
方案 3
while True:
ret = input("请选择安装平台[w/c/u/m, 按q退出]:")
if ret == 'q':
break
platform = shortcut_keys.get(ret)
if platform is None:
print("不支持的平台")
else:
doc = install.get(platform)
print(f"{platform}: {doc}")
重点语法分析
shortcut_keys = {}
for platform in install:
key = platform[0].lower()
shortcut_keys[key] = platform
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。这样,我们得到了与第一段代码相同的结果。
优化结果
if __name__ == '__main__':
install = {
"Windows": "请下载 Windows 安装包安装:https://www.python.org/downloads/windows/",
"CentOS": "使用yum包管理器,执行命令:yum install -y python3",
"Ubuntu": "使用apt-get包管理器,执行命令:apt-get install -y python3",
"MacOS": "安装brew包管理器,然后执行命令: brew install python3",
}
shortcut_keys = {platform[0].lower(): platform for platform in install}
while True:
platform_input = input("请选择安装平台[w/c/u/m, 按q退出]:")
if platform_input.lower() == 'q':
break
platform = shortcut_keys.get(platform_input.lower())
if platform:
print(f"{platform}: {install[platform]}")
else:
print("输入有误,请重新输入。")
可以考虑将用户输入和指令显示的功能封装到函数中,以提高代码的可读性。
def display_install_instructions(install_dict, shortcut_keys):
while True:
platform_input = input("请选择安装平台[w/c/u/m, 按q退出]:")
if platform_input.lower() == 'q':
break
platform = shortcut_keys.get(platform_input.lower())
if platform:
print(f"{platform}: {install_dict[platform]}")
else:
print("输入有误,请重新输入。")
if __name__ == "__main__":
install = {
"Windows": "请下载 Windows 安装包安装:https://www.python.org/downloads/windows/",
"CentOS": "使用yum包管理器,执行命令:yum install -y python3",
"Ubuntu": "使用apt-get包管理器,执行命令:apt-get install -y python3",
"MacOS": "安装brew包管理器,然后执行命令: brew install python3",
}
shortcut_keys = {platform[0].lower(): platform for platform in install}
display_install_instructions(install, shortcut_keys)
字典和列表
字典(dictionary)和列表(list)都是 Python 中常用的数据结构,但它们之间存在一些关键的区别:
- 键值对 vs. 有序元素集合:
- 字典是一个基于键值对(key-value pair)的无序集合。在字典中,每个元素都有一个唯一的键(key)与之对应。字典中的元素通过键来访问,而不是通过索引。
- 列表是一个有序的元素集合。列表中的元素可以通过索引访问,索引从 0 开始,按元素在列表中的顺序递增。
- 可变性:
- 字典和列表都是可变的(mutable),这意味着它们的内容可以在运行时修改。
- 查找速度:
- 字典使用散列(hashing)技术,因此在查找特定键时,字典的查找速度通常非常快。字典的查找速度与字典的大小无关。
- 列表查找元素的速度通常较慢,尤其是在大型列表中。列表的查找速度取决于列表的大小。
- 语法:
- 字典使用大括号
{}来创建,每个元素由键和值组成,键值对之间用冒号:分隔,元素之间用逗号,分隔。例如:{'key1': 'value1', 'key2': 'value2'}。 - 列表使用方括号
[]来创建,元素之间用逗号,分隔。例如:[1, 2, 3, 4]。
- 字典使用大括号
常用的列表(list)和字典(dictionary)的操作方法:
列表(list)操作
创建列表:
my_list = [1, 2, 3, 4]访问列表元素:
first_element = my_list[0] second_element = my_list[1]修改列表元素:
my_list[0] = 10 my_list[1] = 20添加元素到列表末尾:
my_list.append(5)在列表指定位置插入元素:
my_list.insert(1, 1.5)从列表中删除元素(通过索引):
del my_list[0]从列表中删除元素(通过值):
my_list.remove(2)弹出列表中的最后一个元素:
last_element = my_list.pop()弹出列表中的指定位置的元素:
second_element = my_list.pop(1)列表切片(截取列表的一部分):
sublist = my_list[1:3]列表排序(从小到大):
my_list.sort()列表反转:
my_list.reverse()计算列表中元素的个数:
length = len(my_list)计算列表中特定元素出现的次数:
count = my_list.count(2)查找列表中特定元素的索引(如果元素不存在,会抛出异常):
index = my_list.index(3)列表拼接:
list1 = [1, 2, 3] list2 = [4, 5, 6] combined_list = list1 + list2列表复制:
copied_list = my_list.copy()清空列表:
my_list.clear()
字典(dictionary)操作
创建字典:
my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}访问字典元素:
value1 = my_dict['key1']
value2 = my_dict['key2']修改字典元素:
my_dict['key1'] = 'new_value1'
my_dict['key2'] = 'new_value2'添加新的键值对到字典:
my_dict['key4'] = 'value4'从字典中删除键值对:
del my_dict['key1']检查字典中是否存在某个键:
if 'key1' in my_dict: print("Key 'key1' exists in the dictionary.")获取字典中所有的键:
keys = my_dict.keys()获取字典中所有的值:
values = my_dict.values()获取字典中所有的键值对(元组形式):
items = my_dict.items()使用
get()方法访问字典元素(如果键不存在,返回默认值):
value1 = my_dict.get('key1', 'default_value')使用
update()方法将另一个字典的键值对合并到当前字典中(如果有重复的键,当前字典的值将被覆盖):
another_dict = {'key5': 'value5', 'key6': 'value6'} my_dict.update(another_dict)使用
pop()方法删除并返回字典中指定键的值(如果键不存在,返回默认值或抛出异常):
value3 = my_dict.pop('key3', 'default_value')使用
popitem()方法删除并返回字典中最后一个键值对(如果字典为空,抛出异常):
last_item = my_dict.popitem()设置字典中指定键的默认值(如果键已经存在,则不修改其值):
my_dict.setdefault('key1', 'default_value1')清空字典:
my_dict.clear()
Python程序笔记20230306的更多相关文章
- 20180821 Python学习笔记:如何获取当前程序路径
20180821 Python学习笔记:如何获取当前程序路径 启动的脚本的路径为:D:\WORK\gitbase\ShenzhenHouseInfoCrawler\main.py 当前脚本的路径为:D ...
- python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
- python笔记:#002#第一个python程序
第一个 Python 程序 目标 第一个 HelloPython 程序 Python 2.x 与 3.x 版本简介 执行 Python 程序的三种方式 解释器 -- python / python ...
- Python学习笔记(Ⅰ)——Python程序结构与基础语法
作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了.不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的. 零.先抄书: 1.Py ...
- Python开发【笔记】:python程序添加到systemctl系统服务
systemctl系统服务 环境:centos7 systemctl服务使用详解 实现 正常情况下我们在/usr/lib/systemd/system/目录下,创建一个以.service 后缀的文件, ...
- Python学习笔记一:第一个Python程序,变量,字符编码与二进制,用户交互程序
第一个python程序 Windows:设置环境变量,X:\pthonxxx,xxx是版本号 在命令提示符下 输入python,进入解释器 >>>print(“Hello World ...
- Python学习笔记:PyInstaller(exe程序打包)
PyInstaller可以将Python程序打包成一个exe程序来独立运行,用户使用时只需要执行这个exe文件即可,不需要在机器上再安装Python及其他包就可运行了.另外,PyInstaller相较 ...
- Python学习笔记:py2exe打包Python程序
使用py2exe将一个Python程序打包成一个exe程序,这样Python程序也可以在没有安装Python的环境中运行Python程序了.使用这个工具需要写一个用于打包的setup.py文件(名称可 ...
- Python学习笔记(四)Python程序的控制结构
在学习了 Python 的基本数据类型后,我们就要开始接触Python程序的控制结构,了解 Python 是如何使用控制结构来更改程序的执行顺序以满足多样的功能需求.如果有的小伙伴在之前学过C语言,j ...
- Python学习笔记(二)使用Sublime Text编写简单的Python程序()
一.使用Sublime Text编写Python 1.点击“文件” →”新建文件“ 2.点击”文件“→”保存“,并保存为.py文件 此时已经创建好Python文件了,接下来就可以编写Python程序了 ...
随机推荐
- 1js 高级
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Django 基础(二)
cookie和session from django.shortcuts import render from django.http import HttpResponse # Create you ...
- 【Win11】Win11家庭版升级专业版
1.将已激活的Win11家庭版升级成未激活的Win11专业版:输入密钥[BCQNW-3VWYB-4V7QD-M6R2B-7MH26] 2.将未激活的Win11专业版升级成已激活的专业版 :输入密钥[6 ...
- 使用generator进行代码自动生成
在使用generator 进行逆向工程时,一下为步骤 添加mybatis generator的maven插件依赖 添加mybatis generator的配置文件:generatorConfig.xm ...
- 8-WebShell总结
WebShell 1.webshell介绍 在计算机科学中,Shell 俗称壳(用来区别"核"),是指"为使用者提供操作界面"的软件(命令解释器).类似于win ...
- 7. 基础增删改 - 创建管理员用Model-Drive App管理后台信息 - 在Model-Driven App中创建视图
当我们创建完Model-Driven之后,就可以在里面创建我们所需要的视图,视图一般分为三类: 个人:根据自己的个人需求创建个人视图,只有创建者和其分享的人才能查看这些视图. 公共:可以根据团体需 ...
- 记一个jdbc创建数据库、用户操作时,创建新用户提示CREATE USER权限问题
手写存储表数据库信息,访问链接动态数据源操作: mysql: 1.root登录服务器 进入数据库 mysql -u root -p2.创建数据库 create database shop; shop ...
- Cmakelist如何添加自己的组件
在components文件夹下添加各组件的CMakeList,其中可以设置的变量如下: COMPONENT_SRCS:要编译进当前组件的源文件的路径,推荐使用此方法向构建系统中添加源文件.COMPON ...
- windows下使用route添加路由
1,首先在"运行"窗口输入cmd(按WIN+R打开运行窗口),然后回车进入命令行. 2,在命令行下输入route命令,会有对应的提示信息. ROUTE [-f] [-p] [-4| ...
- 对于jsp页面中内嵌Java代码失败的解决方法(总是报出jsp类无法编译的错误)
准备好接收奥!解决方法来啦! 在我这几天查看了好几遍内嵌的Java代码之后,没有发现什么语法上面的错误,看来错误应该就是出现在环境上面了,或者是有什么我没有注意到的小细节.还好,终于将"罪魁 ...