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.可以添加商品,修改商品价格
用c语言编写下面这题: 关于日期的结构定义如下: struct DateG{ int yy,mm,dd;}; 编写两个函数,一个计算自公元1年1月1日到指定的日期共经历了多少天。另一个是前一个函数的逆函数:由自公元1年1月1日历经指定的天数后的日期(返回年月日构成的日期)。 函数接口定义: struct DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11} int Days(DateG x);// {2,,4,11} return 465 from{1,1,1} 裁判测试程序样例: struct DateG{ int yy,mm,dd; }; char leapYear(int year);//闰年否 struct DateG _DateG(char *st);{//"1919-9-9"-->{1919,9,9} struct DateG Add(struct DateG x,int y);//{1919,9,9}+50-->{1919,10,29} char* Date2string(struct DateG x);//{1919,9,9}-->"1919-09-09" //以上为测试程序提供的测试用函数,略去不表, //以下两函数是必须自己完成的函数 struct DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11} int Days(struct DateG x);// {2,,4,11} return 465 from{1,1,1} int main(){ char st[12];scanf("%s",st); struct DateG d1=_DateG(st), d2=Add(d1,60*365); printf("%s\n",Date2string(d2)); d2=Add(d2,-1000); printf("%s\n",Date2string(d2)); d2=_DateG("2020-1-23"); printf("%.2f\n",(Days(d2)-Days(d1))/365.0); return 0; } /* 请在这里填写答案 */ 输入样例: 输入用-号分隔的出生年月日,系统确保测试数据的合法性 2001-1-1 输出样例: 共三行输出。分别是:60年(按365天计一年精确计算的)后的退休日期;退休前倒计时1000天的日期;武汉抗疫封城时(2020-1-23)的年龄(按每365天为一岁,保留2位小数)。 [2060-12-17] [2058-03-23] 19.07
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值