Python笔记
Python是一个免费、开源、跨平台、动态、面向对象的编程语言。
在命令行输入指令,回车即可得到结果。
python3
print(“hello world”)
exit()
将指令编写到.py文件,可以重复运行程序。
python3 文件名
计算机只能识别机器码(1010),不能识别源代码(python)
源代码 – 编译 --> 字节码 – 解释 --> 机器码
|————1次————|
给人看的,通常是对代码的描述信息
表示一个功能,函数定义者是提供功能的人,函数调用者是使用功能的人。
例如:
"""
练习:判断英文句子成分:I kiss you
"""
subject = input("请输入I kiss you的主语:")
predicate = input("请输入I kiss you的谓语:")
object = input("请输入I kiss you的宾语:")
print("您输入的主语是:" + subject + ",谓语是:" + predicate + ",宾语是:" + object + ".")
关联一个对象的标识符
#创建变量
name01 = "悟空"
name02 = "八戒"
#修改变量
name02 = "唐僧"
#相加产生新数据
name03 = name01 + name02
#传递数据地址
name04 = name03
"""
画出下列代码内存图,说出终端显示结果
"""
name_of_hubei_province = "湖北"
name_of_hunan_province = "湖南"
name_of_hunan_province = "湖南省"
name_of_hunan_province = name_of_hubei_province
print(name_of_hunan_province) # 湖北
del 变量名1, 变量名2
“”"
删除 del
“”"
`name01 = "悟空"`
`name02 = name01 # 创建2个变量,赋同样的值`
`name02 = name01 = "悟空"`
`del name01 # 删除变量,"悟空"存在`
`del name02 # 删除变量,"悟空"不存在(引用计数为0)`
`name02 = "唐僧" # 修改变量,"悟空"不存在(引用计数为0)`
在python中变量没有类型,但关联的对象有类型。
#命题:您是总统
result = input("请输入您的职业:") # "总统"
print(result) # True
print(type(result))
"""
练习:在终端中输入商品单价、购买的数量和支付金额。
计算应该找回多少钱。
效果:
请输入商品单价:5
请输入购买数量:3
请输入支付金额:20
应找回:5.0
"""
#1. 获取数据
price = float(input("请输入商品单价:"))
count = int(input("请输入购买数量:"))
money = float(input("请输入支付金额:"))
#2. 逻辑计算
result = money - price * count
#3. 显示结果
print("应找回:" + str(result))
加法 +
减法 -
乘法 *
除法 / :结果为浮点数
整除 // :除的结果去掉小数部分
求余 %
幂运算 **
优先级从高到低:
()
**
* / % //
+ -
算数运算符
+ - * / // % **
增强运算符:在算数运算符基础上增加了对自身赋值的功能
+= -= *= /= //= %= **=
"""
练习2:古代的秤,一斤十六两。
在终端中获取两,计算几斤零几两。
效果:
请输入总两数:100
结果为:6斤4两
"""
total_liang = int(input("请输入总两数:"))
jin = total_liang // 16
liang = total_liang % 16
print("结果为:" + str(jin) + "斤" + str(liang) + "两")
"""
练习2:
匀变速直线运动的速度与位移公式:
位移 = 初速度 × 时间 + 加速度 * 时间的平方 / 2
已知(在终端中录入):位移、时间、初速度
计算:加速度
"""
#(位移 -初速度 × 时间) * 2 / 时间 ** 2 = 加速度
s = float(input("请输入位移:"))
v0 = float(input("请输入初速度:"))
t = float(input("请输入时间:"))
a = (s - v0 * t) * 2 / t ** 2
print(a)
y += x 相当于 y = y + x
y -= x 相当于 y = y - x
y *= x 相当于 y = y * x
y /= x 相当于 y = y / x
y //= x 相当于 y = y // x
y %= x 相当于 y = y % x
y **= x 相当于 y = y ** x
"""
练习:在终端中输入一个四位整数,计算每位相加和。
例如:录入1234,打印1+2+3+4结果
效果:
请输入四位整数:1234
结果是:10
"""
number = int(input("请输入四位整数:"))
unit01 = number % 10 # 个位
#1234 // 10 --> 123 % 10 --> 3
unit02 = number // 10 % 10 # 十位
#1234 // 100 --> 12 % 10 --> 2
unit03 = number // 100 % 10 # 百位
unit04 = number // 1000 # 千位
result = unit01 + unit02 + unit03 + unit04
#建议
result = number % 10
result += number // 10 % 10
result += number // 100 % 10
result += number // 1000
print("结果是:" + str(result))
“”"
变量交换
“”"
bridegroom_name = "武大郎"
bride_name = "潘金莲"
#传统思想:借助第三方变量
#temp = bridegroom_name
#bridegroom_name = bride_name
#bride_name = temp
#交换律思想:a,b=b,a
bridegroom_name, bride_name = bride_name, bridegroom_name
print("交换后的新郎:" + bridegroom_name)
print("交换后的新娘:" + bride_name)
小于 <
小于等于 <=
大于 >
大于等于 >=
等于 ==
不等于 !=
返回布尔类型的值
比较运算的数学表示方式:0 <= x <= 100
表示并且的关系,一假俱假
#示例:
True and True # True
True and False # False
False and True # False
False and False # False
表示或者的关系,一真俱真
#示例:
True or True # True
True or False # True
False or True # True
False or False # False
表示取反
#例如:
not True # 返回False
not False # 返回True
print(True or True) # True
print(False or True) # True
print(True or False) # True
print(False or False) # False
一但结果确定,后面的语句将不再执行。
语法:
x is y
x is not y
作用:
is 用于判断两个对象是否是同一个对象,是时返回True,否则返回False。
is not 的作用与is相反
高到低:
算数运算符
比较运算符
增强运算符
身份运算符
逻辑运算符
#3个物理行 3个逻辑行 (建议)
a = 1
b = 2
c = a + b
#1个物理行 3个逻辑行(使用分号隔开多条命令)
a = 1;b = 2;c = a + b
#3个物理行 1个逻辑行(使用折行符在多个物理行下达一条命令)
a = 1+2+\
3+4+\
5+6
#通过括号(小中大)自动换行
a = (1+2+
3+
4+
5+
6)
if 条件1:
语句块1
elif 条件2:
语句块2
else:
语句块3
选择语句
让语句有选择性的执行
if 条件:
满足条件执行的语句
else:
不满足条件执行的语句
调试Debug
让程序中断,逐语句审查程序执行过程与实际取值.
1. 加断点(在可能出错的行)
2. 开始调试(点击Debug按钮)
3. 按F8逐语句执行,看变量取值
"""
练习1:
如果满足 职位是高管 或者 年薪大于50000的 条件 则显示“娶你”
否则显示”继续努力 ”
"""
if (input("请输入职位:") == "高管" or
int(input("请输入身高:")) > 500000):
print("娶你")
else:
print("继续努力")
# 练习2:
# 在终端中输入性别
# 打印"您好先生" "您好女士" "未知"
sex = input("请输入性别:")
if sex == "男":
print("您好先生")
elif sex == "女":
print("您好女士")
else:
print("未知")
"""
练习3:
在终端中输入课程阶段数,显示课程名称
1 显示 Python语言核心编程
2 显示 Python高级软件技术
3 显示 Web 全栈
4 显示 网络爬虫
5 显示 数据分析、人工智能
"""
course = input("请输入课程编号:")
if course == "1":
print("Python语言核心编程")
elif course == "2":
print("Python高级软件技术")
elif course == "3":
print("Web 全栈")
elif course == "4":
print("网络爬虫")
elif course == "5":
print("数据分析、人工智能")
# 练习4:
# 在终端中录入4个同学身高,打印最高的值.
# 算法:
# 170 160 180 165
# 假设第一个就是最大值
# 使用假设的和第二个进行比较, 发现更大的就替换假设的
# 使用假设的和第三个进行比较, 发现更大的就替换假设的
# 使用假设的和第四个进行比较, 发现更大的就替换假设的
# 最后,假设的就是最大的.
# 效果:
# 请输入第1个同学身高:170
# 请输入第2个同学身高:160
# 请输入第3个同学身高:180
# 请输入第4个同学身高:165
# 最高的同学:180
height01 = int(input("请输入第1个同学身高:"))
height02 = int(input("请输入第2个同学身高:"))
height03 = int(input("请输入第3个同学身高:"))
height04 = int(input("请输入第4个同学身高:"))
max_value = height01
if max_value < height02:
max_value = height02
if max_value < height03:
max_value = height03
if max_value < height04:
max_value = height04
print("最高的同学:" + str(max_value))
# 练习5:
# 根据心理年龄与实际年龄,打印智商等级。
# 智商IQ = 心理年龄MA 除以 实际年龄CA 乘以 100
# 天才:140以上(包含)
# 超常:120-139之间(包含)
# 聪慧:110-119之间(包含)
# 正常:90-109之间(包含)
# 迟钝:80-89之间(包含)
# 低能:80以下
#写法一:
ma = int(input("请输入心理年龄:"))
ca = int(input("请输入实际年龄:"))
iq = ma / ca * 100
# 连续区间的判断:建议只考虑单边
if 140 <= iq:
print("天才")
elif 120 <= iq: # 程序能执行到本行,说明一定小于140
print("超常")
elif 110 <= iq:
print("聪慧")
elif 90 <= iq:
print("正常")
elif 80 <= iq:
print("迟钝")
else:
print("低能")
#写法二:
# 下列写法,适合不连续的区间
# if iq >= 140:
# print("天才")
# elif 120 <= iq < 140: # el与iq < 140都在表达小于140
# print("超常")
# elif 110 <= iq < 120:
# print("聪慧")
# elif 90 <= iq < 110:
# print("正常")
# elif 80 <= iq < 90:
# print("迟钝")
# else:
# print("低能")
# 练习6:
# 在终端中输入月份,打印相应的天数.
# 1 3 5 7 8 10 12 有 31天
# 2 有 29天
# 4 6 9 11 有 30天
# 超过月份提示月份有误
# 效果:
# 请输入月份:10
# 31天
month = int(input("请输入月份:"))
if 1 <= month <= 12:
if month == 2:
print("28天")
elif month == 4 or month == 6 or month == 9 or month == 11:
print("30天")
else:
print("31天")
else:
print("月份有误")
if 100:
print("真值")
#等同于
if bool(100):
print("真值")
# 练习:在终端中输入一个整数,如果是奇数为变量state赋值"奇数",否则赋值"偶数"。
# 效果:
# 请输入数字:6
# state变量存储的是:偶数
#写法一:
# if int(input("请输入整数:")) % 2:
# state = "奇数"
# else:
state = "偶数"
state = "奇数" if int(input("请输入整数:")) % 2 \
else "偶数"
print(state)
语法:
变量 = 结果1 if 条件 else 结果2
作用:根据条件(True/False) 来决定返回结果1还是结果2。
“”"
条件表达式
变量 = 满足条件的值 if 条件 else 不满足条件的值
“”"
# 根据一个条件,为变量赋值
# if input("请输入性别:") == "男":
# value = 1
# else:
# value = 0
value = 1 if input("请输入性别:") == "男" else 0
print(value)
# 练习:在终端中输入一个年份,如果是闰年为变量day赋值29,否则赋值28。
# 闰年条件:年份能被4整除但是不能被100整除
# 年份能被400整除
# 效果:
# 请输入年份:2020
# 2020年的2月有29天
year = int(input("请输入年份:"))
if year % 4 == 0 and year % 100 != 0 or \
year % 400 == 0:
day = 29
else:
day = 28
while 循环计数
1. 开始
2. 结束
3. 间隔
# 计数器
count = 0
while count < 5:
print("跑圈" + str(count)) # 0 1 2 3 4
count += 1
while 条件:
满足条件执行的语句
else:
不满足条件执行的语句
“”"
while 循环
当满足条件时执行循环体
执行后再判断条件,如果还满足则继续执行…
while True:
循环体
if 退出条件:
break # 跳出循环
“”"
while True:
number = int(input("请输入数字:"))
if number > 0:
print("正数")
elif number < 0:
print("负数")
else:
print("零")
if input("请输入q键退出:") == "q":
break
#练习1:
#让下列代码重复执行,输入y继续(不输入y则退出)
sex = input("请输入性别:")
if sex == "男":
print("您好先生")
elif sex == "女":
print("您好女士")
else:
print("未知")
while True:
sex = input("请输入性别:")
if sex == "男":
print("您好先生")
elif sex == "女":
print("您好女士")
else:
print("未知")
if input("输入y继续") != "y":
break
#练习2:
#在终端中显示0 1 2 3
#在终端中显示2 3 4 5 6
#在终端中显示1 3 5 7
#在终端中显示8 7 6 5 4
#在终端中显示-1 -2 -3 -4 -5
count = 0
while count < 4:
print(count)
count += 1
count = 2
while count < 7:
print(count)
count += 1
count = 1
while count < 8:
print(count)
count += 2
count = 8
while count > 3:
print(count)
count -= 1
count = -1
while count > -6:
print(count)
count -= 1
"""
练习3:
在终端中循环录入5个成绩,
最后打印平均成绩(总成绩除以人数)
效果:
请输入成绩:98
请输入成绩:83
请输入成绩:90
请输入成绩:99
请输入成绩:78
平均分:89.6
"""
count = 0
total_score = 0
while count < 5:
count += 1
total_score += int(input("请输入成绩:"))
print("平均分:" + str(total_score / 5))
"""
练习4:
一张纸的厚度是0.01毫米
请计算,对折多少次超过珠穆朗玛峰(8844.43米)
数据: 厚度 次数
算法:厚度*=2 次数+=1
"""
# thickness = 0.01 / 1000
# thickness = 0.00001
thickness = 1e-5
count = 0
while thickness <= 8844.43:
thickness *= 2
count += 1
print("第"+str(count)+"次对折的高度是:"+str(thickness))
print("总共对折" + str(count) + "次")
"""
练习5:
程序产生1个,1到100之间的随机数。
让玩家重复猜测,直到猜对为止。
每次提示:大了、小了、恭喜猜对了,总共猜了多少次。
"""
# 准备一个随机数工具
import random
# 产生一个随机数
random_number = random.randint(1, 100)
count = 0
while True:
count += 1
input_number = int(input("请输入数字:"))
if input_number > random_number:
print("大了")
elif input_number < random_number:
print("小了")
else:
print("恭喜猜对了,总共猜了" + str(count) + "次。")
break
for 变量列表 in 可迭代对象:
语句块1
else:
语句块2
"""
for 循环
for 变量 in 可迭代对象 :
"""
message = "我是孙悟空"
for item in message:
print(item)
# item = "a" # 修改变量item,不影响message
"""
练习:
在终端中输入任意整数,计算累加和.
"1234" -> "1" -> 累加 1
"""
sum_value = 0
for item in input("请输入任意整数:"):
sum_value += int(item)
print(sum_value)
"""
练习:
在终端中累加 0 1 2 3
在终端中累加 2 3 4 5 6
在终端中累加 1 3 5 7
在终端中累加 8 7 6 5 4
在终端中累加 -1 -2 -3 -4 -5
"""
sum_value = 0
for item in range(4):
sum_value += item
print(sum_value)
sum_value = 0
for number in range(2, 7):
sum_value += number
print(sum_value)
sum_value = 0
for element in range(1, 8, 2):
sum_value += element
print(sum_value)
sum_value = 0
for i in range(8, 3, -1):
sum_value += i
print(sum_value)
sum_value = 0
for i in range(-1, -6, -1):
sum_value += i
print(sum_value)
跳过本次,继续下次循环。
# 练习:累加10 -- 60之间,个位不是3/5/8的整数和。
sum_value = 0
for number in range(10, 61):
unit = number % 10
# 满足条件 累加
if unit != 3 and unit != 5 and unit != 8:
sum_value += number
print(sum_value) # 1255
sum_value = 0
for number in range(10, 61):
unit = number % 10
# 不满足条件 跳过
if unit == 3 or unit == 5 or unit == 8:
continue
sum_value += number
print(sum_value) # 1255
#拼接两个容器元素
name03 = name01 + name02
print(name03) # 悟空八戒
#重复容器中的元素
name04 = name01 * 20
print(name04) # 悟空悟空
#依次比较两个容器中元素,一但不同则返回比较结果。
print(name01 > name02)
#成员运算符
#True
print("悟空" in "花果山水帘洞齐天大圣孙悟空")
print("水帘" in "花果山水帘洞齐天大圣孙悟空")
#False
print("大圣齐天" in "花果山水帘洞齐天大圣孙悟空")
print("水洞" in "花果山水帘洞齐天大圣孙悟空")
"""
for 循环
for 变量 in 可迭代对象 :
"""
message = "我是孙悟空"
for item in message:
print(item)
# item = "a" # 修改变量item,不影响message
"""
练习:
在终端中获取一个整数,作为边长,打印矩形
"""
number = int(input("请输入整数:"))
print("*" * number)
for __ in range(number - 2):
print("*%s*" % (" " * (number - 2)))
print("*" * number)
"""
索引
"""
message = "我是花果山水帘洞美猴王齐天大圣"
print(message[0]) # 我
print(message[4]) # 山
print(message[-4]) # 齐
# print(message[1.5]) # 编号必须是整数
# print(message[100]) # IndexError
# print(message[-100]) # IndexError
print(len(message)) # 字符串长度
# 通过正向索引定位最后一个元素
print(message[len(message) - 1])
# 通过反向索引定位第一个元素
print(message[-len(message)])
# 定位第三个、第五个、倒数第二个、倒数第四个
print(message[2])
print(message[4])
print(message[-2])
print(message[-4])
# 定位 "山" "王"
print(message[4])
print(message[-5])
"""
练习:
字符串: content = "我是京师监狱狱长金海。"
打印第一个字符、打印最后一个字符、打印中间字符
打印字前三个符、打印后三个字符
命题:金海在字符串content中
命题:京师监狱不在字符串content中
通过切片打印“京师监狱狱长”
通过切片打印“长狱狱监师京”
通过切片打印“我师狱海”
倒序打印字符
"""
content = "我是京师监狱狱长金海。"
print(content[0])
print(content[-len(content)])
print(content[len(content) - 1])
print(content[-1])
print(content[5])
print(content[len(content) // 2])
print(content[:3])
print(content[-3:])
print("金海" in content)
print("京师监狱" not in content)
print(content[2:-3])
print(content[-4:1:-1])
print(content[::3])
print(content[::-1])
由一系列字符组成的不可变序列容器,存储的是字符的编码值
"""
字符串编码
"""
#字 --> 数
number = ord("a")
print(number) # 97
#数 --> 字
chrt = chr(97)
print(chrt) # a
"""
练习1:
在终端中录入一个内容,循环打印每个文字的编码值。
"""
for itme in input("请输入一个内容:"):
number = ord(itme)
print(number)
"""
练习:
循环录入编码值打印文字,直到输入空字符串停止。
"""
while True:
str_number = input("请输入编码值:")
if str_number == "":
break
print(chr(int(str_number)))
"""
字符串字面值
"""
#1. 各种写法
content01 = "字面值"
content02 = '字面值'
#可见即所得
content03 = '''字面值'''
content03 = """
字
面
值"""
print(content03)
#2. 引号冲突
content04 = '我是"孙悟空"。'
content05 = "我是'孙悟空'。"
content06 = """我是'孙'悟"空"。"""
#3. 转义符:改变原始含义的特殊字符
#\" \' \\ \n换行 ...
content07 = "我是\"孙悟空\"。"
content08 = "我是\n孙悟空。"
url = "c:\\a\\b\c\d.txt"
#原始字符 r"字符串"
url = r"c:\a\b\c\d.txt"
print(content08)
#4. 字符串格式化
subject = "I"
predicate = "kiss"
object = "you"
#print("主语是:" + subject + ",谓语是:" + predicate + ",宾语是:" + object + ".")
print("主语是:%s,谓语是:%s,宾语是:%s." % (subject, predicate, object))
cure_rate = 99.5
#print("治愈比例为" + str(cure_rate) + "%")
print("治愈比例为%s%%" % (cure_rate))
#%f 用于控制小数精度
money = 1.23245124
print("金额是:%.2f元" % money) # 金额是:1.23元
#%d 用于控制整数位数
second = 6
print("秒:%.2d"%(second)) #秒:06
"""
练习:根据下列文字,提取变量,使用字符串格式化打印信息
湖北确诊67802人,治愈63326人,治愈率0.99
70秒是01分零10秒
"""
region = "湖北"
confirmed = 67802
cure = 63326
cure_rate = 0.99
print("%s确诊%s人,治愈%s人,治愈率%.2f" % (region, confirmed, cure, cure_rate))
second = 70
print("%s秒是%.2d分零%.2d秒" % (second, second // 60, second % 60))
由一系列变量组成的可变序列容器。
列表名 = []
列表名 = list(可迭代对象)
列表名.append(元素)
列表.insert(索引,元素)
3. 定位元素:
列表名[索引] = 元素
变量 = 列表名[索引] # 赋值单个给变量不会创建新列表
变量 = 列表名[切片] # 赋值给变量的是切片所创建的新列表
列表名[切片] = 容器 # 右侧必须是可迭代对象,左侧切片没有创建新列表。遍历列表:
正向:
for 变量名 in 列表名:
变量名就是元素
反向:
for 索引名 in range(len(列表名)-1,-1,-1):
列表名[索引名]就是元素
# 练习1:
# 创建地区列表、新增列表、现有列表,至少存储3行信息
list_region = ["香港", "上海", "新疆"]
list_new = [15, 6, 0]
list_now = [393, 61, 49]
# 练习2:
# 向以上三个列表追加数据第4行数据
list_region.append("四川")
list_new.append(0)
list_now.append(27)
# 在第1个位置插入第5行数据
list_region.insert(0,"台湾")
list_new.insert(0,0)
list_now.insert(0,19)
print(list_region)
print(list_new)
print(list_now)
"""
练习3:
打印香港疫情信息(xx地区新增xx人现存xx人)
将地区列表后2个元素修改为 ["XJ","SC"]
打印地区列表元素(一行一个)
倒序打印新增列表元素(一行一个)
"""
list_region = ["香港", "上海", "新疆"]
list_new = [15, 6, 0]
list_now = [393, 61, 49]
print("%s地区新增%d人现存%s人" % (list_region[0], list_new[0], list_now[0]))
print(f"{list_region[0]}地区新增{list_new[0]}人现存{list_now[0]}人")
list_region[-2:] = ["XJ", "SC"]
print(list_region)
for region in list_region:
print(region)
for i in range(len(list_new) - 1, -1, -1):
print(list_new[i])
"""
练习4:
在地区列表中删除“新疆”
在新增列表中删除第1个元素
在现有列表中删除前2个元素
"""
list_region = ["香港", "上海", "新疆"]
list_new = [15, 6, 0]
list_now = [393, 61, 49]
list_region.remove("新疆")
del list_new[0]
del list_now[:2]
print(list_region)
print(list_new)
print(list_now)
"""
练习5:
八大行星:"水星" "金星" "地球" "火星" "木星" "土星" "天王星" "海王星"
-- 创建列表存储4个行星:“水星” "金星" "火星" "木星"
-- 插入"地球"、追加"土星" "天王星" "海王星"
-- 打印距离太阳最近、最远的行星(第一个和最后一个元素)
-- 打印太阳到地球之间的行星(前两个行星)
-- 删除"海王星",删除第四个行星
-- 倒序打印所有行星(一行一个)
"""
list_planet = ["水星", "金星", "火星", "木星"]
list_planet.insert(2, "地球")
# list_planet.append("土星")
# list_planet.append("天王星")
# list_planet.append("海王星")
# list_planet += ["土星", "天王星", "海王星"]
list_planet[len(list_planet):] = ["土星", "天王星", "海王星"]
print(list_planet[0])
print(list_planet[-1])
print(list_planet[:2])
list_planet.remove("海王星")
del list_planet[3]
for i in range(len(list_planet) - 1, -1, -1):
print(list_planet[i])
浅拷贝:复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程。
深拷贝:复制整个依懒的变量。
#练习1:画出下列代码内存图
list01 = ["北京", "上海"]
list02 = list01
list01[0] = "广州"
list03 = list01[:]
list03[-1] = "深圳"
print(list01)#?`
#练习2:画出下列内存图
list01 = ["北京", "上海", "深圳"]
list02 = list01
list01.insert(0,"天津")
del list01[1]
print(list02)# ?
#练习3:画出下列内存图
import copy
list01 = ["北京",["上海","深圳"]]
list02 = list01
list03 = list01[:]
list04 = copy.deepcopy(list01)
list04[0] = "北京04"
list04[1][1] = "深圳04"
print(list01) # ?
list03[0] = "北京03"
list03[1][1] = "深圳03"
print(list01) # ?
list02[0] = "北京02"
list02[1][1] = "深圳02"
print(list02) # ?
"""
练习:
在终端中,循环录入字符串,如果录入空则停止.
停止录入后打印所有内容(一个字符串)
"""
result = []
while True:
content = input("请输入内容:")
if content == "":
break
result.append(content)
result = "_".join(result)
print(result)
"""
练习:将下列英文语句按照单词进行翻转.
转换前:To have a government that is of people by people for people
转换后:people for people by people of is that government a have To
"""
message = "To have a government that is of people by people for people"
list_temp = message.split(" ")
message = " ".join(list_temp[::-1])
print(message)
使用简易方法,将可迭代对象转换为列表。
变量 = [表达式 for 变量 in 可迭代对象]
变量 = [表达式 for 变量 in 可迭代对象 if 条件]
如果if真值表达式的布尔值为False,则可迭代对象生成的数据将被丢弃。
"""
练习:
生成10--30之间能被3或者5整除的数字
[10, 12, 15, 18, 20, 21, 24, 25, 27]
生成5 -- 20之间的数字平方
[25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]
"""
# result = []
# for item in range(10,31):
# if item % 3 ==0 or item % 5 ==0:
# result.append(item)
result = [item for item in range(10,31)if item % 3 ==0 or item % 5 ==0]
print(result)
result = [item ** 2 for item in range(5,21)]
print(result)
变量 = [表达式 for 变量1 in 可迭代对象1 for 变量2 in可迭代对象2]
result = []
for r in ["a", "b", "c"]:
for c in ["A", "B", "C"]:
result.append(r + c)
result = [r + c for r in list01 for c in list02]
"""
列表推导式嵌套
"""
list01 = ["香蕉", "苹果", "哈密瓜"]
list02 = ["牛奶", "咖啡", "雪碧", "可乐"]
# result = []
# for r in list01:
# for c in list02:
# result.append(r + c)
result = [r + c for r in list01 for c in list02]
print(result)
1. 由一系列变量组成的不可变序列容器。
2. 不可变是指一但创建,不可以再添加/删除/修改元素。
练习1:
name = "张无忌"
names = ["赵敏", "周芷若"]
tuple01 = ("张翠山", name, names)
name = "无忌哥哥"
tuple01[2][0] = "敏儿"
print(tuple01) # ?
"""
练习2:
根据月日,计算是这一年的第几天.
公式:前几个月总天数 + 当月天数
例如:5月10日
计算:31 29 31 30 + 10
"""
month = int(input("请输入月份:")) # 5
day = int(input("请输入日:")) # 10
day_of_month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
# result = 0
# for i in range(month - 1):
# result += day_of_month[i]
result = sum( day_of_month[:month - 1] )
result += day
print(result)
1. 由一系列键值对组成的可变散列容器。
2. 散列:对键进行哈希运算,确定在内存中的存储位置,每条数据存储无先后顺序。
3. 键必须惟一且不可变(字符串/数字/元组),值没有限制。
字典名[键] = 数据
说明:
键不存在,创建记录。
键存在,修改值。
3. 获取元素:
变量 = 字典名[键] # 没有键则错误
4. 遍历字典:
for 键名 in 字典名:
字典名[键名]
for 键名,值名 in 字典名.items():
语句
5. 删除元素:
del 字典名[键]
"""
练习1:
创建字典存储香港信息、字典存储上海信息、字典存储新疆信息
"""
dict_HongKong = {
"region": "香港",
"new": 15,
"now": 393,
"total": 4801,
"cure": 4320,
"death": 88
}
dict_shanghai = {
"region": "上海",
"new": 6,
"now": 61,
"total": 903,
"cure": 835,
"death": 7
}
dict_xingjiang = {
"region": "新疆",
"new": 0,
"now": 49,
"total": 902,
"cure": 850,
"death": 3
}
# 练习2:
# 在终端中打印香港的现有人数
print(dict_HongKong["now"])
# 在终端中打印上海的新增和现有人数
print(dict_shanghai["new"])
print(dict_shanghai["now"])
# 新疆新增人数增加1
dict_xingjiang["new"] += 1
"""
练习3:
删除香港现有人数信息
删除新疆新增人数信息
删除上海的新增和现有信息
"""
del dict_HongKong["now"]
del dict_xingjiang["new"]
del dict_shanghai["new"], dict_shanghai["now"]
"""
练习4:
在终端中打印香港字典的所有键(一行一个)
在终端中打印上海字典的所有值(一行一个)
在终端中打印新疆字典的所有键和值(一行一个)
在上海字典中查找值是61对应的键名称
"""
for key in dict_HongKong:
print(key)
for value in dict_shanghai.values():
print(value)
for key, value in dict_xingjiang.items():
print(key)
print(value)
for key, value in dict_shanghai.items():
if value == 61:
print(key)
break
使用简易方法,将可迭代对象转换为字典。
{键:值 for 变量 in 可迭代对象}
{键:值 for 变量 in 可迭代对象 if 条件}
"""
练习1:
将两个列表,合并为一个字典
姓名列表["张无忌","赵敏","周芷若"]
房间列表[101,102,103]
{101: '张无忌', 102: '赵敏', 103: '周芷若'}
练习2:
颠倒练习1字典键值
{'张无忌': 101, '赵敏': 102, '周芷若': 103}
"""
list_name = ["张无忌", "赵敏", "周芷若"]
list_room = [101, 102, 103]
# result = {}
# for i in range(len(list_name)):
# key = list_room[i]
# value = list_name[i]
# result[key] = value
result = {list_name[i]: list_room[i] for i in range(len(list_name))}
print(result)
# new_result = {}
# for key, value in result.items():
# new_result[value] = key
new_result = {value: key for key, value in result.items()}
print(new_result)
由一系列不重复的不可变类型变量(元组/数/字符串)组成的可变散列容器。
相当于只有键没有值的字典(键则是集合的数据)。
创建空集合:
集合名 = set()
集合名 = set(可迭代对象)
创建具有默认值集合:
集合名 = {1, 2, 3}
集合名 = set(可迭代对象)
添加元素:
集合名.add(元素)
删除元素:
集合名.discard(元素)
运算
交集&:返回共同元素。
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 & s2 # {2, 3}
并集:返回不重复元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 | s2 # {1, 2, 3, 4}
补集-:返回只属于其中之一的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 - s2 # {1} 属于s1但不属于s2
补集^:返回不同的的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 ^ s2 # {1, 4} 等同于(s1-s2 | s2-s1)
子集<:判断一个集合的所有元素是否完全在另一个集合中
超集>:判断一个集合是否具有另一个集合的所有元素
s1 = {1, 2, 3}
s2 = {2, 3}
s2 < s1 # True
s1 > s2 # True
相同或不同== !=:判断集合中的所有元素是否和另一个集合相同
s1 = {1, 2, 3}
s2 = {3, 2, 1}
s1 == s2 # True
s1 != s2 # False
子集或相同,超集或相同 <= >=
练习:一家公司有如下岗位:
"经理":"曹操","刘备","孙权"
"技术" :"曹操","刘备","张飞","关羽"
1. 定义数据结构,存储以上信息.
2. 是经理也是技术的都有谁?
3. 是经理不是技术的都有谁?
4. 不是经理是技术的都有谁?
5. 身兼一职的都有谁?
6. 公司总共有多少人数?
dict_persons = {
"经理": {"曹操", "刘备", "孙权"},
"技术": {"曹操", "刘备", "张飞", "关羽"}
}
# 交集
print(dict_persons["经理"] & dict_persons["技术"])
# 补集
print(dict_persons["经理"] - dict_persons["技术"])
print(dict_persons["技术"] - dict_persons["经理"])
print(dict_persons["技术"] ^ dict_persons["经理"])
# 并集
print(len(dict_persons["技术"] | dict_persons["经理"]))
{表达式 for 变量 in 可迭代对象}
{表达式 for 变量 in 可迭代对象 if 条件}
"""
编辑代码,打印效果如下图:
******
######
******
######
"""
#4行 6列
for r in range(4): # 0 1 2 3
for c in range(6):
if r % 2 == 0:
print("*", end="")
else:
print("#", end="")
print()
"""
练习2:二维列表
list01 = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
]
1. 将第一行从左到右逐行打印
2. 将第二行从右到左逐行打印
3. 将第三列行从上到下逐个打印
4. 将第四列行从下到上逐个打印
5. 将二维列表以表格状打印
先根据需求写死代码
再根据规律写活代码
"""
list01 = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
]
for item in list01[0]:
print(item)
# print(list01[1][4])
# print(list01[1][3])
# print(list01[1][2])
# print(list01[1][1])
# print(list01[1][0])
for c in range(len(list01[1]) - 1, -1, -1):
print(list01[1][c])
# print(list01[0][2])
# print(list01[1][2])
# print(list01[2][2])
for r in range(len(list01)):
print(list01[r][2])
# print(list01[2][3])
# print(list01[1][3])
# print(list01[0][3])
for r in range(len(list01)-1,-1,-1):
print(list01[r][3])
# 可读可写
for r in range(len(list01)):
for c in range(len(list01[r])):
print(list01[r][c],end = "\t")
print()
# 只读
for line in list01:
for item in line:
print(item,end = "\t")
print()
"""
练习3:多个人的多个爱好
dict_hobbies = {
"于谦": ["抽烟", "喝酒", "烫头"],
"郭德纲": ["说", "学", "逗", "唱"],
}
1.打印于谦的所有爱好(一行一个)
2.计算郭德纲所有爱好数量
3.打印所有人(一行一个)
4.打印所有爱好(一行一个)
"""
dict_hobbies = {
"于谦": ["抽烟", "喝酒", "烫头"],
"郭德纲": ["说", "学", "逗", "唱"],
}
print(dict_hobbies["于谦"])
print(len(dict_hobbies["郭德纲"]))
for key in dict_hobbies:
print(key)
for value in dict_hobbies.values():
for item in value:
print(item)
"""
练习5:
对数字列表进行降序排列排列(大 --> 小)
"""
list01 = [54, 56, 7, 78, 8]
for r in range(len(list01) - 1):
for c in range(r + 1, len(list01)):
if list01[r] < list01[c]:
list01[r], list01[c] = list01[c], list01[r]
print(list01)
"""
1.打印所有商品信息,
格式:商品编号xx,商品名称xx,商品单价xx.
2. 打印所有订单中的信息,
格式:商品编号xx,购买数量xx.
3. 打印所有订单中的商品信息,
格式:商品名称xx,商品单价:xx,数量xx.
4. 查找数量最多的订单(使用自定义算法,不使用内置函数)
5. 根据购买数量对订单列表降序(大->小)排列
"""
# 商品字典
dict_commodity_infos = {
1001: {"name": "屠龙刀", "price": 10000},
1002: {"name": "倚天剑", "price": 10000},
1003: {"name": "金箍棒", "price": 52100},
1004: {"name": "口罩", "price": 20},
1005: {"name": "酒精", "price": 30},
}
# 订单列表
list_orders = [
{"cid": 1001, "count": 1},
{"cid": 1002, "count": 3},
{"cid": 1005, "count": 2},
]
# 1.打印所有商品信息,
# 格式:商品编号xx,商品名称xx,商品单价xx.
for key, value in dict_commodity_infos.items():
print(f'商品编号{key},商品名称{value["name"]},商品单价{value["price"]}.')
# 2. 打印所有订单中的信息,
# 格式:商品编号xx,购买数量xx.
for item in list_orders:
print("商品编号%s,购买数量%s." % (item["cid"], item["count"]))
# 3. 打印所有订单中的商品信息,
# 格式:商品名称xx,商品单价:xx,数量xx.
for item in list_orders:
# item["cid"] --> 1001
cid = item["cid"]
# dict_commodity_infos[1001] --> 商品信息
commodity = dict_commodity_infos[cid]
# commodity = dict_commodity_infos[item["cid"]]
print(f"商品名称{commodity['name']},商品单价:{commodity['price']},数量{item['count']}.")
# 4. 查找数量最多的订单(使用自定义算法,不使用内置函数)
max_value = list_orders[0]
for i in range(1, len(list_orders)):
if max_value["count"] < list_orders[i]["count"]:
max_value = list_orders[i]
print(max_value)
# 5. 根据购买数量对订单列表降序(大->小)排列
for r in range(len(list_orders) - 1):
for c in range(r + 1, len(list_orders)):
if list_orders[r]["count"] < list_orders[c]["count"]:
list_orders[r], list_orders[c] = list_orders[c], list_orders[r]
print(list_orders)
Ctrl + P 参数信息(在方法中调用参数)
Ctrl + Q 快速查看文档
用于封装一个特定的功能,表示一个功能或者行为。
函数是可以重复执行的语句块, 可以重复调用。
提高代码的可重用性和可维护性(代码层次结构更清晰)。
def 函数名(形式参数):
函数体
"""
函数 - 入门
价值:减少代码的重复
语法:
def 函数名(?):
函数体
函数名()
"""
# 代码的重复是万恶之源
"""
# 做法(变化) + 用法
print("直拳")
print("摆拳")
print("勾拳")
print("肘击")
# ...
# 做法(变化) + 用法
print("直拳")
print("摆拳")
print("勾拳")
print("肘击")
"""
# 定义函数-做法(变化)
def attack():
print("直拳")
print("摆拳")
print("勾拳")
print("肘击")
print("鞭腿")
# 用法
attack()
# ...
# 用法
attack()
练习1: 定义函数,在终端中打印一维列表.
list01 = [5, 546, 6, 56, 76, ]
for item in list01:
print(item)
list02 = [7,6,879,9,909,]
for item in list02:
print(item)
练习2:创建函数,在终端中打印矩形.
number = int(input(“请输入整数:”)) # 5
for row in range(number):
if row == 0 or row == number - 1:
print("" * number)
else:
print("%s*" % (" " * (number - 2)))
返回值
练习1:创建计算治愈比例的函数
confirmed = int(input(“请输入确诊人数:”))
cure = int(input(“请输入治愈人数:”))
cure_rate = cure / confirmed * 100
print(“治愈比例为” + str(cure_rate) + “%”)
练习2:定义函数,根据总两数,计算几斤零几两.:
提示:使用容器包装需要返回的多个数据
total_liang = int(input(“请输入两:”))
jin = total_liang // 16
liang = total_liang % 16
print(str(jin) + “斤零” + str(liang) + “两”)
练习3:创建函数,根据课程阶段计算课程名称.
number = input(“请输入课程阶段数:”)
if number == “1”:
print(“Python语言核心编程”)
elif number == “2”:
print(“Python高级软件技术”)
elif number == “3”:
print(“Web全栈”)
elif number == “4”:
print(“网络爬虫”)
elif number == “5”:
print(“数据分析、人工智能”)
练习4:创建函数,计算梯形面积.
top_base = float(input(“请输入上底:”))
bottom_base = float(input(“请输入下底:”))
height = float(input(“请输入高:”))
result = (top_base + bottom_base) * height / 2
print(“梯形面积是:” + str(result))
练习5:创建函数,计算IQ等级
ma = int(input(“请输入你的心里年龄:”))
ca = int(input(“请输入你的实际年龄:”))
iq = ma / ca * 100
if 140 <= iq:
print(“天才”)
elif 120 <= iq:
print(“超常”)
elif 110 <= iq:
print(“聪慧”)
elif 90 <= iq:
print(“正常”)
elif 80 <= iq:
print(“迟钝”)
else:
print(“低能”)
练习6:创建函数,根据年龄计算人生阶段
age = int(input(“请输入年龄:”))
if age <= 6:
print(“童年”)
elif age <= 17: # 程序能执行到本行,说明age一定大于6
print(“少年”)
elif age <= 40:
print(“青年”)
elif age <= 65:
print(“中年”)
else:
print(“老年”)
练习7:创建函数,根据年月日计算这是这一年的第几天.
如果2月是闰年,按29天计算
平年 28
month = int(input(“请输入月:”))
day = int(input(“请输入日:”))
days_of_month = (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
total_days = sum(days_of_month[:month - 1])
total_days += day
print(f"{month}月{day}日是第{total_days}天.")
year = int(input(“请输入年份:”))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
day = 29
else:
day = 28
可变/不可变类型在传参时的区别
练习1:画出下列代码内存图,并写出打印结果。
def func01(p1, p2):
p1 = “孙悟空”
p2[“八戒”] += 50
a = “悟空”
b = {“八戒”: 100}
func01(a, b)
print(a) # ?
print(b) # ?
练习2:画出下列代码内存图,并写出打印结果。
def func01(p1, p2):
p1 = [100, 200]
p2[:] = [300, 400]
a = [10, 20]
b = [30, 40]
func01(a, b)
print(a) # ?
print(b) # ?
练习3:根据下列代码,创建降序排列函数。
list01 = [5, 15, 25, 35, 1, 2]
for r in range(len(list01) - 1):
for c in range(r + 1, len(list01)):
if list01[r] < list01[c]:
list01[r], list01[c] = list01[c], list01[r]
print(list01)
练习4:定义函数,将列表中大于某个值的元素设置为None
参数 结果
[34, 545, 56, 7, 78, 8] -10-> [None,None,None,7,None,8]
[34, 545, 56, 7, 78, 8] -100-> [34, None, 56, 7, 78, 8]
函数参数
实参传递方式argument
位置传参
定义:实参与形参的位置依次对应。
序列传参
定义:实参用*将序列拆解后与形参的位置依次对应。
关键字传参
定义:实参根据形参的名字进行对应。
字典关键字传参
练习:说出程序执行结果.
def func01(list_target):
print(list_target)# ?
def func02(*args):# 三合一
print(args)# ?
def func03(args,**kwargs):# 三合一
print(args)# ?
print(kwargs)# ?
def func04(p1,p2,,p4,**kwargs):
print(p1)# 10
print(p2)# 20
print(p4)# 30
print(kwargs)# {p5 : 40}
func01([1,2,3])
func02(*[1,2,3])# 一拆三
func03(1,2,3,a=4,b=5,c=6)
func04(10,20,p4 = 30,p5 = 40)
作用域LEGB
作用域:变量起作用的范围。
Local局部作用域:函数内部。
Enclosing 外部嵌套作用域 :函数嵌套。
Global全局作用域:模块(.py文件)内部。
Builtin内置模块作用域:builtins.py文件。
变量名的查找规则
由内到外:L -> E -> G -> B
在访问变量时,先查找本地变量,然后是包裹此函数外部的函数内部的变量,之后是全局变量,最后是内置变量。
局部变量
定义在函数内部的变量(形参也是局部变量)
只能在函数内部使用
调用函数时才被创建,函数结束后自动销毁
全局变量
定义在函数外部,模块内部的变量。
在整个模块(py文件)范围内访问(但函数内不能将其直接赋值)。
global 语句
作用:
在函数内部修改全局变量。
在函数内部定义全局变量(全局声明)。
语法:
global 变量1, 变量2, …
说明
在函数内直接为全局变量赋值,视为创建新的局部变量。
不能先声明局部的变量,再用global声明为全局变量。
nonlocal 语句
作用:
在内层函数修改外层嵌套函数内的变量
语法
nonlocal 变量名1,变量名2, …
说明
在被嵌套的内函数中进行使用
练习:根据下列代码,创建函数。
dict_commodity_infos = {
1001: {“name”: “屠龙刀”, “price”: 10000},
1002: {“name”: “倚天剑”, “price”: 10000},
1003: {“name”: “金箍棒”, “price”: 52100},
1004: {“name”: “口罩”, “price”: 20},
1005: {“name”: “酒精”, “price”: 30},
}
list_orders = [
{“cid”: 1001, “count”: 1},
{“cid”: 1002, “count”: 3},
{“cid”: 1005, “count”: 2},
]
for cid, info in dict_commodity_infos.items():
# print(f"商品编号{cid},商品名称{info[‘name’]},商品单价{info[‘price’]}.")
print(“商品编号%d,商品名称%s,商品单价%d.” % (cid, info[“name”], info[“price”]))
for order in list_orders:
if info[“price”]>10000:
# print(f"商品编号{cid},商品名称{info[‘name’]},商品单价{info[‘price’]}.")
print(“商品编号%d,商品名称%s,商品单价%d.” % (cid, info[“name”], info[“price”]))
max_value = list_orders[0]
for i in range(1, len(list_orders)):
if max_value[“count”] < list_orders[i][“count”]:
max_value = list_orders[i]
print(max_value)
for r in range(len(list_orders) - 1):
for c in range(r + 1, len(list_orders)):
if list_orders[r][“count”] < list_orders[c][“count”]:
list_orders[r], list_orders[c] = list_orders[c], list_orders[r]
print(list_orders)