Python——第二周

1、二元运算

a, b, c = 1, 3, 5
d = a if a > b else c

print(d)

--》5

2、bytes类型(字节数据类型)

Python3中文本用Unicode、str类型表示;二进制数据用byte类型表示。

print('£20'.encode('utf-8'))    # 转换前的数据类型
# 打印结果 b'\xc2\xa320' 带b开头的是二进制的byte类型

print(b'\xc2\xa320'.decode('utf-8'))
# 打印结果 £20

msg = '£20€30'
print(msg.encode(encoding='utf-8')) # 编码
# 打印结果 b'\xc2\xa320\xe2\x82\xac30'
print(msg.encode(encoding='utf-8').decode(encoding='utf-8')) #解码
# 打印结果 £20€30

3、列表操作

names = ['Alex', "Tenglan", 'Eric']
# 通过下标访问列表中的元素,从0开始
print(names[0])
print(names[1])
print(names[2])
# 也可以倒着取,从-1开始
print(names[-1])
print(names[-2])
print(names[-3])

--》打印结果:
Alex
Tenglan
Eric
Eric
Tenglan
Alex

切片:

names = ["Alex", "Tenglan", "Eric", "Rain", "Tom", "Amy"]
print(names[1:4]) # 取下标1至下标4之间的数字,包括1,不包括4
print(names[1:-1]) # 取下标1至-1的值,不包括-1
print(names[0:3])
print(names[:3]) # 如果是从头开始取,0可以忽略,跟上句效果一样
print(names[3:]) # 如果想取最后一个,必须不能写-1,只能这么写
print(names[3:-1]) # 这样-1就不会被包含了
print(names[0::2]) # 后面的2是代表,每隔一个元素,就取一个
print(names[::2]) # 和上句效果一样

追加

names = ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
print(names)
names.append('我是新来的')  # 在最后追加值
print(names)
--》打印结果:
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']

 插入:

names = ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
print(names)
names.insert(2, "强行从Eric前面插入")  # 想在下标为几的位置插入就写几
print(names)
names.insert(5, "从eric后面插入试试新姿势")
print(names)
--》打印结果:
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']

修改:

names = ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
names[2] = "该换人了"  # 在响应下标位置修改
print(names)
--》打印结果:
['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']

删除:

names = ['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
print(names)
del names[2] # 删除相应下标的值
print(names)
del names[4]
print(names)
names.remove('Eric') # 删除指定元素
print(names)
names.pop() # 删除列表最后一个值
print(names)
--》打印结果:
['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
['Alex', 'Tenglan', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新来的']['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']

扩展:

names = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
b = [1, 2, 3]
names.extend(b)
print(names)
--》打印结果:
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]

查找:

names = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
print(names.index('Alex')) # 返回所查找值得下标
print(names[names.index('Alex')]) # 如果有则打印该值
--》打印结果:
0
Alex

统计:

names = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 'Alex']
print(names.count('Alex'))
--》打印结果:2

清除:

names = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
names.clear()
print(names)
--》打印结果:[]

翻转:

names = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
names.reverse()
print(names)
--》打印结果:['Amy', 'Tom', 'Rain', 'Tenglan', 'Alex']

排序:(默认按照ASCII顺序排列)

names = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
names.sort()
print(names)
--》打印结果:['Alex', 'Amy', 'Rain', 'Tenglan', 'Tom']

复制:

names = ['Alex', 'Tenglan', 'Rain', 'Tom', [1, 2, 3]]
names_copy = names.copy()
print(names_copy)
names_copy[4][1] = '我变了'
print(names)
print(names_copy) # copy是浅copy,只copy第一层,列表中的列表用了copy之后,copy到的是内部列表的内存地址
--》打印结果:

['Alex', 'Tenglan', 'Rain', 'Tom', [1, 2, 3]]
['Alex', 'Tenglan', 'Rain', 'Tom', [1, '我变了', 3]]
['Alex', 'Tenglan', 'Rain', 'Tom', [1, '我变了', 3]]

深copy:

import copy
names = ['Alex', 'Tenglan', 'Rain', 'Tom', [1, 2, 3]]
names_copy = copy.deepcopy(names)
print(names_copy)
names_copy[4][1] = '我变了'
print(names)
print(names_copy)
--》打印结果:

['Alex', 'Tenglan', 'Rain', 'Tom', [1, 2, 3]]
['Alex', 'Tenglan', 'Rain', 'Tom', [1, 2, 3]]
['Alex', 'Tenglan', 'Rain', 'Tom', [1, '我变了', 3]]

依次打印列表中的:

names = ['Alex', 'Tenglan', 'Rain', 'Tom', [1, 2, 3]]
for i in names:
print(i)
--》打印结果:
Alex
Tenglan
Rain
Tom[1, 2, 3]

 步数:

names = ['Alex', 'Tenglan', 'Rain', 'Tom', 1, 2, 3]     # [起始位置:结束位置:步数](不包括结束位置的值)
print(names[0:-1:2])
--》打印结果:
['Alex', 'Rain', 1]

4、元组

一旦建立无法修改,又叫只读列表。names = ("alex","jack","eric")

只有count 和 index两种方法。

数据库连接文件用元组,不可更改。

程序练习:

  a、启动程序后,让用户输入工资,然后打印商品列表

  b、允许用户根据商品编号购买商品

  c、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 

  d、可随时退出,退出时,打印已购买商品和余额

price_list = [('A', 500), ('B', 800), ('C', 1000), ('D', 5000)]
shopping_list = []
salary = input("请输入你的工资:") # 输入的salary默认是字符串,应改为整数类型
if salary.isdigit():
salary = int(salary)
while True:
for item in price_list: # 打印商品列表
print(price_list.index(item), item)
user_choice = input("请输入要购买物品的序号(或按q键退出):")
if user_choice.isdigit():
user_choice = int(user_choice)
if len(price_list) > user_choice >= 0:
p_item = price_list[user_choice]
if p_item[1] <= salary:
salary -= p_item[1]
shopping_list.append(p_item)
print('Added %s into shopping cart, your balance is %s' % (p_item, salary))
print('购物车中已有:%s' % shopping_list)
else:
print("余额不足,只剩%s" % salary)
else:
print("商品%s不存在" % user_choice)
elif user_choice == 'q':
print('exit')
for p in shopping_list:
print(p)
print("余额:", salary)
exit()
else:
print("invalid option")

 5、字符串操作

name = 'alex'
print(name.capitalize()) # 首字母大写
print(name.casefold()) # 大写全部变小写
print(name.center(50, "-")) # 输出 '---------------------Alex Li----------------------'(一共打印50个字符,不够用-补齐)
print(name.count('lex')) # 统计 lex出现次数
print(name.encode()) # 将字符串编码成bytes格式(转换为二进制)
print(name.endswith("Li")) # 判断字符串是否以 Li结尾(输出True/False)
print("Alex\tLi".expandtabs(10)) # 输出'Alex Li', 将\t转换成多长的空格
print(name.find('A')) # 查找A,找到返回其索引, 找不到返回-1(找到对应字符开头位置的索引)
name.index('a')      # 返回a所在字符串的索引
'9aA'.isalnum() # 判断是否包含英文字符和数字,返回True/False
'9'.isdigit() # 判断是否整数
name.isnumeric() # 检测字符串是否只由数字组成
name.isprintable() # 判断字符串中所有字符是否都是可打印字符(in repr())或字符串为空。
name.isspace() # 检测字符串是否只由空格组成
name.istitle() # 检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写
name.isupper() # 检测字符串中所有的字母是否都为大写
name.isalpha() # 检测字符串是否只由字母组成
print("|".join(['alex', 'jack', 'rain'])) # 'alex|jack|rain'


trans_str = "this is string example....wow!!!"
print(trans_str.partition('is')) # 根据指定的分隔符将字符串进行分割,返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。
--》打印结果:
('th', 'is', ' is string example....wow!!!')


msg = 'my name is {name}, and age is {age}'
msg.swapcase()    # 大小写互换
msg.zfill(40)    # 返回指定长度的字符串,原字符串右对齐,前面填充0
'00000my name is {name}, and age is {age}'


n4 = 'Hello 2orld'
n4.ljust(40,"-")    # 返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。\
'Hello 2orld-----------------------------'
n4.rjust(40,"-")    # 返回一个原字符串右对齐,并使用空格填充至长度的新字符串。如果指定的长度小于字符串的长度则返回原字符串。
'-----------------------------Hello 2orld'


b="ddefdsdff_哈哈"
b.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则返回True/False

# 字符串切片
name = 'my name is alex'
print(name[name.find(("name")):7])
--》打印结果:name

# format :(详情看https://www.runoob.com/python/att-string-format.html
msg = "my name is {}, and age is {}"
print(msg.format("alex", 22)) # 'my name is alex, and age is 22'
msg = "my name is {1}, and age is {0}"
print(msg.format("alex", 22)) # 'my name is 22, and age is alex'
msg = "my name is {name}, and age is {age}"
print(msg.format(age=22, name="ale")) # 'my name is ale, and age is 22'
# format_map
print(msg.format_map({'name': 'alex', 'age': 22})) # 'my name is alex, and age is 22'

 

# maketrans
a = "aeiou" # This is the string having actual characters.
b = "12345" # This is the string having corresponding mapping character
trans = str.maketrans(a, b)
trans_str = "this is string example....wow!!!"
final_trans = trans_str.translate(trans)
print(final_trans)
--》打印结果:th3s 3s str3ng 2x1mpl2....w4w!!!


# 替换
print('alex li'.replace('l', 'L'))
print('alex li'.replace('l', 'L', 1)) # 只交换一次
 
 
print('alex li'.split())        # 把字符串分割成列表,默认是空格

 6、字典

字典一种key - value 的数据类型,通过key去找。无序,key唯一。info = {    'stu1101': "TengLan Wu",

    'stu1102': "LongZe Luola",
'stu1103': "XiaoZe Maliya",
}

# 增加
info["stu1104"] = "苍井空"
print(info)

# 修改
info['stu1101'] = "武藤兰"
print(info)

# 删除
info.pop("stu1101") #标准删除姿势
print(info)
# 随即删除
info.popitem()
print(info)

# 查找
info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
print('stu1102' in info) # 判断是否有stu1102这个key,返回True/False
print(info.get('stu1102')) # 获取stu1102的值,有则输出,没有输出None
print(info['stu1102']) # 获取stu1102的值,不存在则会报错

# 多级字典嵌套
av_catalog = {
"欧美":{
"www.youporn.com": ["很多免费的,世界最大的","质量一般"],
"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
},
"大陆":{
"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
}

av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
print(av_catalog["大陆"]["1024"])


# 循环dict
for key in info:
print(key, info[key])


--》打印结果:
{'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': '苍井空'}
{'stu1101': '武藤兰', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': '苍井空'}
{'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': '苍井空'}
{'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
True
LongZe LuolaLongZe Luola
['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']
stu1102 LongZe Luola
stu1103 XiaoZe Maliya

 7、作业

购物车优化:

A、用户入口

  a、商品信息存在文件里

  b、已购物品和余额记录

B、商家入口

  a、可以填加、修改商品的价格

 

f_p = open('price_list.py', encoding='utf-8')
f_price = f_p.read()
price_list = eval(f_price)
print(type(price_list))
print(price_list)
f_p.close()

f_c = open("customers_list.py", encoding='utf-8')
f_customers = f_c.read()
customers_list = eval(f_customers)
print(type(customers_list))
print(customers_list)
f_c.close()

f_m = open("merchant_list.py", encoding='utf-8')
f_merchant = f_m.read()
merchant_list = eval(f_merchant)
print(type(merchant_list))
print(merchant_list)
f_m.close()

while True:
user_name = input("请输入用户名:")
print(type(user_name))
if user_name in customers_list or merchant_list:
user_password = input("请输入密码:")
paw_c = customers_list.get(user_name)
paw_m = merchant_list.get(user_name)
if user_password == paw_c:
print('已进入客户界面')
shopping_list = []
salary = input("请输入你的工资:") # 输入的salary默认是字符串,应改为整数类型
if salary.isdigit():
salary = int(salary)
while True:
for item in price_list: # 打印商品列表
print(price_list.index(item), item)
user_choice = input("请输入要购买物品的序号(或按q键退出):")
if user_choice.isdigit():
user_choice = int(user_choice)
if len(price_list) > user_choice >= 0:
p_item = price_list[user_choice]
if p_item[1] <= salary:
salary -= p_item[1]
shopping_list.append(p_item)
print('已添加 %s 到购物车中,你的余额为: %s' % (p_item, salary))
print('购物车中已有:%s' % shopping_list)
else:
print("余额不足,只剩%s" % salary)
else:
print("商品%s不存在" % user_choice)
elif user_choice == 'q':
print('exit')
for p in shopping_list:
print('购物车中的商品有: %s' % p)
print("余额:", salary)
exit()
else:
print("invalid option")
elif user_password == paw_m:
print('已进入商家界面')
while True:
f_p = open('price_list.py', 'r+', encoding='utf-8')
f_price = f_p.read()
price_list = eval(f_price)
name = input("请输入添加的商品名(或按q键退出): ")
if name != "q":
price = input("请输入价格:")
add = [(name, price)]
price_list.extend(add)
f_p.seek(0)
f_p.write('%s' % price_list)
f_p.close()
print(type(price_list))
print("商品信息已改为: %s" % price_list)
else:
exit()
else:
print('登陆失败')
else:
print("找不到该用户")

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/yolo1221/p/11555821.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值