python学习之路day3

时间:2022-12-31 12:44:03

元组

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

语法

1 names = ("alex","jack","eric")

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

注意:元组使用小括号,不同于列表的中括号

 


 

字符串操作

PS:对字符串的修改本质上是生成新的字符串,然后覆盖原先的字符串,不支持对字符串本身进行修改

PS:但是列表可以修改


 

.capitalize():首字母大写

.count(self):统计有几个“self”

.center(number,string):把字符串置中,把number数量的string填满其余位置(形如-------name-------)

.endswith(string):判断字符串是否以string结尾

.find(string):查找string在字符串中的位置(从0开始数起,空格也算一格,若不存在则返回-1);

字符串也可以切片;例:

name='Hello World!'
print(name[name.find('World'):])
显示包含字符串“World”及其之后的字符串,最后显示“World!
.isalnum():是否仅仅包含所有英文字符和阿拉伯数字,是则返回True,否(包含特殊字符等)则是False
.isalpha():是否是纯英文字符,
是则返回True,否则是False
.isdigit():是否是整数,
是则返回True,否则是False
.isidentifier:是否是合法的标识符(变量名)(较少用)
'+'.join(['1','2','3']):显示 1+2+3
.ljust(number,string):字符串在左边(left),右边不够number数量的用string填上
.rjust(number,string):字符串在右边(left),左边不够number数量的用string填上
.lower()和.upper()转换大小写
string.strip()去除string两头的换行和空格(\n)(space),
同理.lstrip()仅仅去除左边的换行和空格,rstrip仅仅去除右边的换行和空格

p=str.maketrans("abcdefg","!@#$%^&")#abcdefg与!@#$%^&一一对应
print("baggage".translate(p))
结果显示:@!&&!&%

string.replace(old_string,new_string,number):替换,number指替换的数量
string.rfind(string2):从左往右数,找到最右边的string2的下标并返回

string.split(string2):把string按照string2划分成列表,默认string2是空格,即从"xxx yyy"变为["xxx","yyy"]

例:print("alex lil".split('l'))
结果是['a', 'ex ', 'i', ''] #'l'被当成分隔符,没了
PS:string2可以为'\n',即按照换行来划分

string.swapcase() 把string的大写变小写,同时小写变大写
string.title() 把string的每个单词开头变大写(title形式)

 

最常用的:列表,字典,集合

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

 

语法:左边是key word,右边是数据,整体用大括号包起info = {

    'stu1101': "TengLan Wu",
'stu1102': "LongZe Luola",
'stu1103': "XiaoZe Maliya",
字典无下标,也没必要,因此字典是无序

要取出对应的数据: info['stu1101']加中括号,里面包含key word即可
增加:

info["stu1104"] = "苍井空"
修改:

info['stu1101'] = "武藤兰"
删除:

info.pop("stu1101") #标准删除姿势

del info['stu1103'] #换个姿势删除

info.popitem() #随机删

查找:

info.get('stu1103') #可以输入不存在字典的key word,返回None,比较保险,不会出错

判断 key word 是否存在:

'stu1103' in info #标准用法

字典可以层层嵌套:

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"])
#ouput
['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']

修改:av_catalog["大陆"]["1024"][1]=“可以用爬虫爬下来
PS:key word尽量别写中文

info.value()打印所有的值(除了key word)
info.keys()打印所有的key word

setdefault:如果key word存在原先的字典里,则不进行操作,如果不存在原先的字典里,则创建新的值

av_catalog.setdefault('*',{'www.baidu.com':[1,2]})

后一个字典名={'key word' : '数据','key word2' : '数据2',------}

前一个字典名.update(后一个字典名):用后一个字典来更新(加入到)前一个字典,如果后一个字典的keyword与前一个字典的keyword重复,则覆盖掉前一个字典该keyword及其对应的数据

字典名.items():把字典转换成一个大的列表

dict.fromkeys([key1,key2,key3],[value1,value2,value3]) #等于创建了新的字典,不过三个key共享同一个[value1,value2,value3]的值

#通过一个列表生成默认dict,有个没办法解释的坑,少用吧这个
>>> dict.fromkeys([1,2,3],'testd')
{1: 'testd', 2: 'testd', 3: 'testd'}

基本的字典循环:

for i in info:
  print(i) # 打印的只是keyword
  print(i, info[i]) # 既打印keyword又打印value(通过keyword取出value)

 


今日代码

# -----------------Welcome to python---------------------
# ------------------购物车程序-----------------------
salary = input("Please enter your salary:")
shoppinglist = [['A', 8000], ['b', 6000], ['c', 4000], ['d', 2000]]
temlist = []
'''原始版本
for i in range(0, 4):
print(i, shoppinglist[i])

'''
for item in shoppinglist:
print(shoppinglist.index(item), item) # 改进版本(既显示下标又显示列表元素)
'''装逼版本
for index, item in enumerate(shoppinglist)# enumerate 把列表的下标取出来了
print(index,item)
'''
if salary.isdigit():
salary = int(salary)
while salary >= 0:
num = input("please enter the number of the goods you want to buy:")
if num.isdigit(): # 判断用户输入的是否为数字(字符串形式的数字)
num = int(num) # 转成数字
if num < len(shoppinglist) and num > -1:
price_item = shoppinglist[num] # 取出用户选择对应的单个商品列表
if price_item[1] <= salary: # 买得起
temlist.append(price_item)
salary = salary - price_item[1]
print('Added %s into shopping cart, you balance is %s' % (price_item, salary))
print(shoppinglist)
else:
print("你的钱不够啦!")
print('--------------shoping cart----------------')
for p in temlist:
print(p)
print("you balance is %s" % (salary))
exit()
else:
print("商品号%s不存在" % (num))
elif num == 'q':
print('--------------shoping cart----------------')
for p in temlist:
print(p)
print("you balance is %s" % (salary))
exit()
else:
print("invalid option!")
'''

# -----------------多级菜单---------------------
data = {
'北京': {
'海淀': {
'五道口': {
'soho': {},
'网易': {},
'google': {}
},
'中关村': {
'爱奇艺': {},
'汽车之家': {},
'youku': {},
},
'上地': {
'百度': {},
},
},
'昌平': {
'沙河': {
'老男孩': {},
'北航': {},
},
'天通苑': {},
'回龙观': {},
},
'朝阳': {},
'东城': {},
},
'上海': {
'闵行': {
"人民广场": {
'炸鸡店': {}
}
},
'闸北': {
'火车战': {
'携程': {}
}
},
'浦东': {},
},
'山东': {},
}
exit_flag = False
while not exit_flag: #为什么不是True?因为要实现在任何一层按q就退出整个程序,
#下面的while not true则导致整个while not true,最后退出while循环,程序结束

for i in data:
print(i) #打印第一层

choice = input('选择进入1>>:')

if choice in data: # 此时进入下一级菜单,又要循环
while not exit_flag:
for i2 in data[choice]:
print('\t', i2) #打印第二层
choice2 = input('选择进入2>>:')

if choice2 in data[choice]:
while not exit_flag:
for i3 in data[choice][choice2]:
print('\t\t', i3) #打印第三层
choice3 = input('选择进入3>>:')

if choice3 in data[choice][choice2]:
for i4 in data[choice][choice2][choice3]:
print('\t\t', i4) #打印第四层
choice4 = input('最后一层,按b返回>>:')
if choice4 == 'b':
pass # 什么也不做,即跳过,避免报错
elif choice4 == 'q':
exit_flag = True #要退出,这设置成True
if choice3 == 'b': # 在第四级菜单按b之后,直接pass到了这里,choice3显然不等于b(还没输入呢)
# 又因为这个if语句从属于上级的 while True,因此又运行choice3 = input('选择进入3>>:')
break
elif choice3 == 'q':
exit_flag = True
if choice2 == 'b':
break
elif choice2 == 'q':
exit_flag = True
if choice == 'b':
break
#注意,这里最后的三个if的位置
#累死,麻烦,啰嗦

作业:重点是与文件的交互操作
python学习之路day3

 

 

----------------------感想----------------------
注意格式,比如每个if\elif\else\while等之后都要加冒号,注意缩进,最重要的是逻辑要清晰'''