目录
1 列表操作
1.1 通过索引提取列表元素
1.2 列表的切片操作
1.3 列表元素的增删改
1.3.1 增加列表元素
1.3.2 删除列表元素
1.3.3 修改列表元素
1.4 列表推导式
1.4.1 示例
1.4.2 练习1:求y=sin(x)在区间 [0, 2*pi] 与X轴围成的面积
1.4.3 练习2:蒙特卡洛算法估算pi
2 分支语句
2.1 练习1:判断用户名及密码是否正确
2.2 练习2:冒泡排序
1 列表操作
# 创建列表 a = [1, 'Hello', 2.3, True, 'World'] a
运行结果:
[1, 'Hello', 2.3, True, 'World']
1.1 通过索引提取列表元素
# 用正数索引提取列表元素;索引从左往右,0开始
a[0]
运行结果:
1
# 用负数索引提取列表元素;索引从右往左为-1、-2、... a[-3]
运行结果:
2.3
1.2 列表的切片操作
a[1: 4] # [from: to] 前闭后开;取索引为[1,4)内的所有元素
运行结果:
['Hello', 2.3, True]
a[1:] # [from: to];from默认为0,to默认为-1
运行结果:
['Hello', 2.3, True, 'World']
a[::2] # [from: to: step],切片第三个参数为步长,默认值为0
# 提取的元素的索引为:0,2,4,...,是一个等差数列,公差为step
运行结果:
[1, 2.3, 'World']
a[::-1] # 步长取-1,:元素顺序前后颠倒
运行结果:
['World', True, 2.3, 'Hello', 1]
1.3 列表元素的增删改
1.3.1 增加列表元素
# 1 创建列表
a = ['一']
print('1', a)
# 2 通过加号拼接列表
a = a + ['二']
print('2', a)
# 3 .append():将对象追加到列表末尾,不改变待追加对象的数据结构(下例直接把列表对象追加到列表中)
a.append(['三'])
print('3', a)
# 4 .extend():列表拼接,类似 a + ['pear']
a.extend(['四'])
print('4', a)
# 5 .insert():在指定位置插入对象,不改变待插入对象的数据结构(下例直接把列表对象插入列表中)
a.insert(1, ['插队']) # 在索引为1的位置上插入['插队'];
print('5', a)print('e', e)
# 1 创建列表
a = ['一']
print('1', a)
# 2 通过加号拼接列表
a = a + ['二']
print('2', a)
# 3 .append():将对象追加到列表末尾,不改变待追加对象的数据结构(下例直接把列表对象追加到列表中)
a.append(['三'])
print('3', a)
# 4 .extend():列表拼接,类似 a + ['pear']
a.extend(['四'])
print('4', a)
# 5 .insert():在指定位置插入对象,不改变待插入对象的数据结构(下例直接把列表对象插入列表中)
a.insert(1, ['插队']) # 在索引为1的位置上插入['插队'];
print('5', a)print('e', e)
运行结果:
1 ['一'] 2 ['一', '二'] 3 ['一', '二', ['三']] 4 ['一', '二', ['三'], '四'] 5 ['一', ['插队'], '二', ['三'], '四']
1.3.2 删除列表元素
# 创建列表
a = list('abccded')
print(a)
# .remove():删除列表中首次出现的指定元素
a.remove('c')
print(a)
# del:先用索引提取出元素,再作删除
del a[-1]
print(a)
运行结果:
['a', 'b', 'c', 'c', 'd', 'e', 'd'] ['a', 'b', 'c', 'd', 'e', 'd'] ['a', 'b', 'c', 'd', 'e']
1.3.3 修改列表元素
# 创建列表
a = list('abcdef')
print(a)
# 提取出元素,重新赋值
a[1] = 'B' # 'b'转换为'B'
print(a)
运行结果:
['a', 'b', 'c', 'd', 'e', 'f'] ['a', 'B', 'c', 'd', 'e', 'f']
1.4 列表推导式
1.4.1 示例
# 创建列表
# a = list('123') # list():创建列表,把引号内的内容变一个个字符元素
# a # ['1','2','3']
a = [1, 2, 4]
# 列表推导式
b = [i*2 for i in a]
print(b)
# 上述列表推导式相当于
b = []
for i in a:
b.append(i*2)
print(b)
# for循环,列表推导式,自定义函数三者效率由高到低:
# 自定义函数 > 列表推导式 > for循环
# 创建列表
# a = list('123') # list():创建列表,把引号内的内容变一个个字符元素
# a # ['1','2','3']
a = [1, 2, 4]
# 列表推导式
b = [i*2 for i in a]
print(b)
# 上述列表推导式相当于
b = []
for i in a:
b.append(i*2)
print(b)
# for循环,列表推导式,自定义函数三者效率由高到低:
# 自定义函数 > 列表推导式 > for循环
运行结果:
[2, 4, 8] [2, 4, 8]
1.4.2 练习1:求y=sin(x)在区间 [0, 2*pi] 与X轴围成的面积
提示:把曲线围成的面积分割成多个矩形,分割得越细,矩形面积和越接近真是面积。
# 求y=sin(x)从0到2*pi与X轴围成的面积 import math # 1 把定义域[0, 2*pi]划分为n小份 n = 50000 # n越大,计算越接近真实值 # 2 求出每小份宽度 width = 2*math.pi/n # 3 求出每小份对应的高度 x = [i*width for i in range(n)] y = [abs(math.sin(x0)) for x0 in x] # abs():取绝对值 # 4 求面积 s = sum([width*y[i] for i in range(n)]) s
运行结果:
3.999999994736218
1.4.3 练习2:蒙特卡洛算法估算pi
提示:由下图易知,当点足够多时有以下关系:
扇形面积:正方形面积 = 扇形中点数:正方形中点数 = (pi*r*r)/4:1 = pi/4:1(此处r为1)
则:pi = 4*M/N
# 蒙特卡洛算法估算pi # 1. 设置总点数N N = 10000 # N越大,计算结果越接近真实值 # 2. 生成N对随机数对,模拟平面中的点 import random data = [[random.random() for j in range(2)] for i in range(N)] # 3. 计算扇形内点数M M = sum([(math.sqrt(x**2 + y**2)<=1) for x, y in data]) # 分析: # math.sqrt(x**2 + y**2),计算该点到原点的距离 # math.sqrt(x**2 + y**2)<=1,若点在扇形上,则记为True,否则记为False # M = sum([(math.sqrt(x**2 + y**2)<=1) for x, y in data]),计算扇形上的点数 # 4. 计算pi 4*M/N # pi值不能被正确估算的原因: # (1)N值数量有限 # (2)生成的数据没取到1 # (3)计算机并非真正随机
运行结果:
3.1348
2 分支语句
2.1 练习1:判断用户名及密码是否正确
题目:让用户输入账号及密码,然后判断用户名及密码是否正确,如果正确则输出“登陆成功”,否则输出 “用户名或密码错误”。
参考样例:
# 1 设定正确用户名、密码
user_name = '快乐派大星'
password = '123456'
# 2 输入用户名、密码进行登录验证
user_name_tmp = input('请输入用户名:')
password_tmp = input('请输入密码:')
# 3 判断用户名、密码是否正确,并执行相应操作
if ((user_name_tmp == user_name) & (password_tmp == password)): # 如果条件为真,输出登录成功
print('登录成功!')
else: # 否则,输出以下内容
print('用户名或密码错误。')
运行结果:
请输入用户名:快乐派大星 请输入密码:123456 登录成功!
2.2 练习2:冒泡排序
# 对序列[28,30,10,17,3,25,12,35,8,49,46]按从小到大顺序进行排列。
data = [28,30,10,17,3,25,12,35,8,49,46]
# 1 比较两两之间的大小
# 2 如果前一个数据大于后一个数据,则大者放在后
# 代码一:(未优化)
# data = [28,30,10,17,3,25,12,35,8,49,46]
# for i in range(len(data)):
# for j in range(len(data)-1):
# if data[j] > data[j+1]:
# data[j], data[j+1] = data[j+1], data[j]
# data
# 代码二:优化后
for i in range(len(data)-1): # n个数,实际上只需排序n-1轮
for j in range(len(data)-1-i): # 减i:已排好序的数无需再次排序
# 第一轮需排10个数,第二轮9,第三轮8...
if data[j] > data[j+1]:
data[j], data[j+1] = data[j+1], data[j]
data
# 代码一、二结果一样,代码二运算量较小
运行结果:
[3, 8, 10, 12, 17, 25, 28, 30, 35, 46, 49]
本期到此结束,下期再见!



