days2

参考文档

http://www.cnblogs.com/alex3714/articles/5717620.html

列表:[]

基本操作:

索引
切片
追加
删除
长度
切片
循环
包含

names = ['xiaxiaofan', 'jiangshuying', 'dengchuhan', 'summer']
# name_of_dengchuhan = names['dengchuhan']  # 此种取法是错误的
print(names[0], names[1])  # 位置从0开始算|二进制010101

# 切片
print(names[1:3])  # 字符串切片|顾头部不顾尾(从左往右数)|返回列表
print(names[-1])  # 取最后一个
# print(names[-1:-3])  # 取后面两个此时返回[]|从左往右取
print(names[-2:])  # 取后面两个|此处省略不写表示取值到末尾|前后都可以省略

# 添加

names.append('xiaobai')  # 注:此时直接打印返回的值是None
print(names)
# names.insert(位置,字符串) 在指定位置插入|不能批量插入,只能一个一个来
names.insert(1, 'others')
print(names)

# 修改

# names[位置]=字符串   修改
names[1] = 'weather'
print(names)


# 删除

'''
names.remove('summer')  # 删除指定字符串
print(names)
del names[1]  # 删除指定位置
print(names)
names.pop()  # 默认删除最后一个|当添加参数时,删除所制定位置的
print(names)
'''

# 查找

print(names)
print(names.index('dengchuhan'))  # 查找指定字符串的位置
print(names[names.index('dengchuhan')])  # 根据位置返回制定的字符串
names.insert(2, 'xiaobai')
print(names.count('xiaobai'))  # 统计字符串出现次数|可以重复



# names.clear() 清空列表
# names.reverse()    反转
# names.sort()   #排序|按照ASCII的规则

new_names = [1, 2, 3, 4]
names.extend(new_names)  # 合并
print(names, new_names)  # 此时new_names还存在
# del new_names 删除


#浅copy

# names = ['xiaxiaofan', 'jiangshuying', 'dengchuhan', 'summer']
names = ['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
#里面嵌套的列表是重新指向的一块内存地址

names2 = names.copy()  # 浅copy:只修改第一层|复制之后,name和name2指向同一块内存地址
print(names)
print(names2)

# names['dengchuhan']='邓楚涵'  错误的修改方法|必须用下标
names[3] = '邓楚涵'
print(names)
print(names2)  # name2此时没有修改

names[2][0] = 'Alex'
print(names)
print(names2)  # 此时都修改了

----------
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], '邓楚涵', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
['xiaxiaofan', 'jiangshuying', ['Alex', 'jack'], '邓楚涵', 'summer']
['xiaxiaofan', 'jiangshuying', ['Alex', 'jack'], 'dengchuhan', 'summer']
----------


#浅copy创建联合账号

person = ['name', ['saving', 100]]
'''
# 浅copy:三种方式
#p1 = copy.copy(person)
# p1 = person[:]
# p1 = license(person)
'''

p1 = person[:]
p2 = person[:]

p1[0] = 'alex'
p2[0] = 'fengjie'

p1[1][1] = 50

print(p1)
print(p2)




#深copy

import copy

# names = ['xiaxiaofan', 'jiangshuying', 'dengchuhan', 'summer']
names = ['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']

# names2 = copy.copy(names)   #浅copy|相当于 nmes2=names.copy()
names2 = copy.deepcopy(names)  # 深copy|一般不要轻易copy|文件很大时会造成空间浪费
print(names)
print(names2)

# names['dengchuhan']='邓楚涵'  错误的修改方法|必须用下标
names[3] = '邓楚涵'
print(names)
print(names2)  # name2此时没有修改

names2[2][0] = 'Alex'
print(names)
print(names2)  # 此时都修改了

----------
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], '邓楚涵', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], 'dengchuhan', 'summer']
['xiaxiaofan', 'jiangshuying', ['alex', 'jack'], '邓楚涵', 'summer']
['xiaxiaofan', 'jiangshuying', ['Alex', 'jack'], 'dengchuhan', 'summer']
----------


列表循环

for i in names:
    print(i)


步长切片

print(names)
print(names[0:-1:2])

元祖:只读列表

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

names = ('Alex', 'jack')
print(names.count('Alex'))
print(names.index('Alex'))

它只有2个方法,一个是count,一个是index,完毕。

购物车程序练习

1.启动程序后,让用户输入工资,然后打印商品列表
2.允许用户根据商品编号购买商品
3.用户选择商品后,检测余额是否够,如果够则直接扣款,不够提醒
4.可以随时退出,退出时,打印已购买商品和余额

字符串操作 

特性:不可修改

字符串操作

name = 'xiaxiaofan'
print(name.capitalize())  # 首字母大写
print(name.count('x'))  # 统计x出现次数
print(name.center(20, '-'))  # 运行结果:-----xiaxiaofan-----
print(name.endswith('ex'))  # 判断字符串以什么结尾
print(name.expandtabs(tabsize=10))  # 设置tab键\t的长度
# print(name.format())      #格式化字符串
# print(name.format_map())  #类似于foemat
print(name.isalnum())  # 字符串是不是由阿拉伯数字和字幕组成
print('aS123'.isalpha())  # 是否全部为英文
print(name.isdigit())  # 是否为数字
print('1A'.isidentifier())  # 判断是否是合法的变量名
print(name.istitle())  # 判断是否为title
print(name.isupper())  # 是否全部为大写
print('+'.join(['1', '2', '3']))  # 运行结果:1+2+3
print(name.ljust(20, '*'))  # 运行结果:xiaxiaofan**********
print(name.rjust(20, '^'))  # 运行结果:^^^^^^^^^^xiaxiaofan
print(name.lower())  # 大写变为小写
print(name.upper())  # 小写变为大写
print(name.strip())  # 去掉两头的空格和回车
p = str.maketrans('abcdef', '123456')
print('alex li'.translate(p))  # 把字符串转移成后面对应的值|执行结果:1l5x li

print(name.replace('x', 'X', 1))  # 将小写替换成大写
print('xiaxiaofan'.split('x'))  # 用x分割字符串
print('1+2+3+4'.split('+'))  # ['1', '2', '3', '4']

字典

字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

语法:

info = {
    'stu1101': "TengLan Wu",
    'stu1102': "LongZe Luola",
    'stu1103': "XiaoZe Maliya",
}
字典的特性:

dict是无序的
key必须是唯一的,so 天生去重


info = {
    'stu1101': "TengLan Wu",
    'stu1102': "LongZe Luola",
    'stu1103': "XiaoZe Maliya",
}
print(info)
print(info['stu1101'])  # 查找:取stu1101对应的value值
info['stu1101'] = '武藤兰'  # 修改
print(info)
# info['stu1104']   #查找没有时,会报错
print(info.get('stu1104'))  # 安全获取方法|没有时返回none

info.pop('stu1102')  # 标准删除姿势
print(info)
# info.popitem()  # 随机删除
# del info['stu1101']
# print(info)

字典的循环

(1)最推荐的循环方式
for i in info:
    print(i, info[i])

(2)key-value循环
#有把字典转化成列表的过程,数据量大时转换列表会花费很长时间
for k, v in info.items():   
    print(k, v)

b = {
    'stu1102': 'Alex',
    1: 3,
    2: 5
}

info.update(b)  # 合并两个字典|有交叉的地方更新,没有的创建
print(info)
print(info.items()) #把字典转化成列表

c = info.fromkeys([6, 7, 8], [1, {'name': 'Alex'}, 444])
c[7][1]['name'] ='jack'     #三个key共享一个内存地址
print(c)

作业:优化购物车

用户入口:
1.商品信息存在文件里
2.已购商品,余额记录

商家入口:
1.可以添加商品,修改商品价格
基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
### `is_leap_year` 函数 ```python def is_leap_year(year): return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) ``` - `def is_leap_year(year):`:使用 `def` 关键字定义一个名为 `is_leap_year` 的函数,该函数接受一个参数 `year`,用于表示年份。 - `(year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)`:这是一个布尔表达式,用于判断年份是否为闰年。闰年的判断规则是:能被 4 整除但不能被 100 整除,或者能被 400 整除。 - `return`:将布尔表达式的结果返回。 ### `days_in_month` 函数 ```python def days_in_month(year, month): days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] if is_leap_year(year) and month == 2: return 29 return days[month - 1] ``` - `def days_in_month(year, month):`:定义一个名为 `days_in_month` 的函数,接受两个参数 `year` 和 `month`,分别表示年份和月份。 - `days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]`:创建一个列表 `days`,存储每个月的天数(平年)。 - `if is_leap_year(year) and month == 2:`:判断是否为闰年且月份为 2 月。 - `return 29`:如果是闰年的 2 月,返回 29 天。 - `return days[month - 1]`:否则,返回 `days` 列表中对应月份的天数。由于列表索引从 0 开始,所以使用 `month - 1` 作为索引。 ### `days_since_year_start` 函数 ```python def days_since_year_start(year, month, day): total_days = 0 for m in range(1, month): total_days += days_in_month(year, m) total_days += day return total_days ``` - `def days_since_year_start(year, month, day):`:定义一个名为 `days_since_year_start` 的函数,接受三个参数 `year`、`month` 和 `day`,分别表示年份、月份和日期。 - `total_days = 0`:初始化一个变量 `total_days`,用于存储从年初到指定日期的总天数。 - `for m in range(1, month):`:使用 `for` 循环遍历从 1 到 `month - 1` 的所有月份。 - `total_days += days_in_month(year, m)`:累加每个月的天数。 - `total_days += day`:加上指定日期的天数。 - `return total_days`:返回从年初到指定日期的总天数。 ### `days_between_dates` 函数 ```python def days_between_dates(year1, month1, day1, year2, month2, day2): if year1 > year2 or (year1 == year2 and month1 > month2) or (year1 == year2 and month1 == month2 and day1 > day2): year1, year2 = year2, year1 month1, month2 = month2, month1 day1, day2 = day2, day1 total_days = 0 for y in range(year1, year2): if is_leap_year(y): total_days += 366 else: total_days += 365 days1 = days_since_year_start(year1, month1, day1) days2 = days_since_year_start(year2, month2, day2) return total_days + days2 - days1 ``` - `def days_between_dates(year1, month1, day1, year2, month2, day2):`:定义一个名为 `days_between_dates` 的函数,接受六个参数,分别表示两个日期的年、月、日。 - `if year1 > year2 or (year1 == year2 and month1 > month2) or (year1 == year2 and month1 == month2 and day1 > day2):`:判断第一个日期是否晚于第二个日期。 - `year1, year2 = year2, year1`、`month1, month2 = month2, month1`、`day1, day2 = day2, day1`:如果第一个日期晚于第二个日期,交换两个日期的年、月、日。 - `total_days = 0`:初始化一个变量 `total_days`,用于存储两个日期之间的总天数。 - `for y in range(year1, year2):`:使用 `for` 循环遍历从 `year1` 到 `year2 - 1` 的所有年份。 - `if is_leap_year(y):`:判断当前年份是否为闰年。 - `total_days += 366`:如果是闰年,累加 366 天。 - `total_days += 365`:如果是平年,累加 365 天。 - `days1 = days_since_year_start(year1, month1, day1)` 和 `days2 = days_since_year_start(year2, month2, day2)`:分别计算两个日期从年初开始的天数。 - `return total_days + days2 - days1`:返回两个日期之间的总天数。 ### 主程序 ```python year1, month1, day1 = map(int, input().split()) year2, month2, day2 = map(int, input().split()) result = days_between_dates(year1, month1, day1, year2, month2, day2) print(result) ``` - `year1, month1, day1 = map(int, input().split())`:使用 `input()` 函数获取用户输入的第一个日期,使用 `split()` 方法将输入的字符串按空格分割成多个字符串,再使用 `map(int, ...)` 将这些字符串转换为整数,最后将结果分别赋值给 `year1`、`month1` 和 `day1`。 - `year2, month2, day2 = map(int, input().split())`:同理,获取用户输入的第二个日期,并赋值给 `year2`、`month2` 和 `day2`。 - `result = days_between_dates(year1, month1, day1, year2, month2, day2)`:调用 `days_between_dates` 函数,计算两个日期之间的天数,并将结果赋值给 `result`。 - `print(result)`:将计算结果输出到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值