Python-Basis-4th

周日,多云,记录生活分享点滴

参考博客:https://www.cnblogs.com/yuanchenqi/articles/5782764.html

Python版本:3.5

嵌套基本逻辑

a = [[1,2,3],"chung",4,(5,6,7)]
#print(a)
print (a[0][1])#取[2]
print (a[3][1])#查(6),元组可以被查询,但不能被修改

Shopping

用户将商品添加到购物车并购买的程序

product_list = [
    ('Mac', 9000),
    ('kindle', 800),
    ('tesla', 900000),
    ('python book', 105),
    ('bike', 2000),
]
saving = input('please input your money:')
shopping_car = []
if saving.isdigit():
    saving = int(saving)
    while True:
        for i, v in enumerate(product_list, 1):
            print(i, '>>>>', v)
        choice = input('选择购买商品编号[退出:q]:')
        if choice.isdigit():
            choice = int(choice)
            if choice > 0 and choice <= len(product_list):
                p_item = product_list[choice - 1]
                if p_item[1] < saving:
                    saving -= p_item[1]
                    shopping_car.append(p_item)
                else:
                    print('余额不足,还剩%s' % saving)
                print(p_item)
            else:
                print('编码不存在')
        elif choice == 'q':
            print('------------您已经购买如下商品----------------')
            for i in shopping_car:
                print(i)
            print('您还剩%s元钱' % saving)
            break
        else:
            print('invalid input')

Shopping 解析版

#首先将商品数据储存到一个列表中(通过嵌套方式)
product_list=[
#商品信息用元组或列表表示,目的是把多个信息作为一个元素存储
    ('Mac',9000),
    ('kindle',800),
    ('tesla',900000),
    ('python book',105),
    ('bike',2000),
]
#目前把商品信息存储到一个大的list里面了

#用一个变量代表现在拥有多少钱
saving=input('please input your money:')
shopping_car=[]
#有变量之后需要对变量做一个校验,通过 .isdigit 判断输入内容是否为纯数字
if saving.isdigit():  
    #如果是数字,将字符串转成整型,为后面加减法做准备
    saving=int(saving)  
    
    while True:  #while True 的目的是需要反复给用户提供商品列表进行选择

        #接下来是具体内容:
        #通过for循环打印商品内容
        for i,v in enumerate(product_list,1):  ##enumerate(列举),表示在列表中以“1”的位置开始,起到加序号作用
            print(i,'>>>>',v)

        #引导用户选择商品
        choice=input('选择购买商品编号[退出:q]:')
        
        #验证输入是否合法
        if choice.isdigit():
            choice=int(choice)
            if choice>0 and choice<=len(product_list):  ##len所对应的值是列表的长度

                #验证无问题,需要做两件事
                #第一:将用户选择商品通过choice取出来
                p_item=product_list[choice-1]

                #如果钱够,用本金saving减去该商品价格,并将该商品加入购物车
                if p_item[1]<saving:
                    saving-=p_item[1]
                    shopping_car.append(p_item)

                else:
                    print('余额不足,还剩%s'%saving)
                print(p_item)
            else:
                print('编码不存在')
        elif choice=='q':
            print('------------您已经购买如下商品----------------')
            
            #循环遍历购物车里的商品,购物车存放的是已买商品
            for i in shopping_car:
                print(i)
            print('您还剩%s元钱'%saving)
            break
        else:
            print('invalid input')

字典

两大特点:无序、键唯一

数据类型

  • 不可变类型:整型,字符串,元组
  • 可变类型:列表,字典

创建字典

第一种,常用创建方法

dic={'name':'alex'}

第二种,不常用创建方法

dic1={}
dic2=dict((('name','alex'),)) #从外往里:第一组括号是dict本身携带的,第二组括号代表序列,第三组括号代表键值对。第二三组括号可以是一个列表也可以是一个元组。
print(dic2)

第三种,不常用创建方法

dic3=dict([['name','alex'],])
print(dic3) 

第一种:如果有,做修改;如果没有,做创建

dic1={'name':'alex'}
dic1['age']=18
print(dic1)

第二种:键存在,不改动,返回字典中相应的键对应的值

dic1={'name':'alex'}
ret=dic1.setdefault('age',34)
print(ret)

第三种:键不存在,在字典中中增加新的键值对,并返回相应的值

dic1={'name':'alex'}
ret2=dic1.setdefault('hobby','girl')
print(dic1)
print(ret2)

第一种:通过键去查找

dic3={'age': 18, 'name': 'alex', 'hobby': 'girl'}
print(dic3['name'])

第二种:通过list来将 dic3.keys() 的结果转换成列表式结果 keys()/values()/items()

dic3={'age': 18, 'name': 'alex', 'hobby': 'girl'}
print(list(dic3.keys())) #输出的是键
print(list(dic3.values())) #输出的是值
print(list(dic3.items())) #输出的是元组,键与值的组合

第一种:

dic3={'age': 18, 'name': 'alex', 'hobby': 'girl'}
dic3['age']=55
print(dic3)

第二种: .update 如果原来有,覆盖掉,如果没有,做创建

dic4={'age': 18, 'name': 'alex', 'hobby': 'girl'}
dic5={'1':'111','2':'222'} #做创建
dic5={'1':'111','name':'222'} #覆盖掉
dic4.update(dic5)
print(dic4)
print(dic5)

第一种:清空字典

dic5 = {'name': 'chung', 'age': 18, 'class': 1}
dic5.clear()
print(dic5)

第二种:删除字典中指定键值对

dic5 = {'name': 'alex', 'age': 18, 'class': 1}
del dic5['name'] 
print(dic5) 

第三种:删除字典中指定键值对,并返回该键值对的值

dic5 = {'name': 'alex', 'age': 18, 'class': 1}
print(dic5.pop('age')) 
ret=dic5.pop('age')
print(ret)
print(dic5)

第四种:随机删除某组键值对,并以元组方式返回值

dic5 = {'name': 'alex', 'age': 18, 'class': 1}
a = dic5.popitem() 
print(a, dic5)

第五种:删除整个字典

dic5 = {'name': 'alex', 'age': 18, 'class': 1}
del dic5
print(dic5)

其他操作以及涉及到的方法

dict.fromkeys方法

dic6=dict.fromkeys(['host1','host2','host3'],'test')
print(dic6)  #{'host3': 'test', 'host1': 'test', 'host2': 'test'}

以下涉及深浅拷贝的一点知识

dic6=dict.fromkeys(['host1','host2','host3'],['test1','tets2'])
print(dic6)  #{'host2': ['test1', 'tets2'], 'host3': ['test1', 'tets2'], 'host1': ['test1', 'tets2']}
dic6['host2'][1]='test3'
print(dic6)  #{'host3': ['test1', 'test3'], 'host2': ['test1', 'test3'], 'host1': ['test1', 'test3']}
类似深浅拷贝

字典的嵌套

在修改前进行查询,查询时遇到字典就用键,遇到列表就用位置

城市 = {
     "一线":{
         "北京": ["故宫","颐和园"],
         "上海": ["迪士尼"],
     },
     "二线":{
         "杭州":["西湖","其他的?求补充"],
         "南京":["夫子庙","秦淮河"],
     }
 }
 城市['二线']["杭州"][1]='雷峰塔'
 print(城市['二线']["杭州"]) 

排序

dic={5:'555',2:'666',4:'444'}
print(sorted (dic))  #根据键来排序,显示键
print(sorted(dic.values()))  #根据值来排序,显示值
print(sorted(dic.items()))  #根据键来排序,显示键值对
dic.has_keys(5)
print(5 in dic) 

字典的遍历

第一种:效率高

dic5={'name': 'alex', 'age': 18}
for i in dic5:
    print(i)  #默认循环字典里面的键
for i in dic5:
    print(i,dic5[i])+  #打印字典里面的键和值

第二种:效率低,转化步骤偏多

dic5={'name': 'alex', 'age': 18}
for i,v in dic5.items():
     print(i,v)  #打印字典里面的键值对,当只有一个变量i时,则打印元组形式的键值对

String 字符串

字符串操作

第一种:双引号与单引号无区别,但是在特殊情况下注意区分

a="Let's go "
print(a)

第二种: * 重复输出字符串

print('hello'*20)

第三种: [] ,[:] 通过索引获取字符串中字符,这里和列表的切片操作是相同的,具体内容见列表

print('helloworld'[2:])

第四种:判断in前面内容是否在后面内容中

print(123 in [23,45,123])
print('e2l' in 'hello')

第五种: % 格式字符串

print('alex is a good teacher')
print('%s is a good teacher'%'alex')

第六种:拼接

# 第一个  join 用字符串将a,b,d拼接,效率高
c= ''.join([a,b,d])
print(c)
  
# 第二个  效率低
a='123'
b='abc'
d='44'
c=a+b
print(c) 

String的内置方法

常用字符串内置方法:

st='hello kitty {name} is {age}'

print(st.count('l'))  #统计元素个数
print(st.center(50,'#'))  #居中
print(st.startswith('he'))  #判断是否以某个内容开头
print(st.find('t'))  #查找到第一个元素,并将索引值返回
print(st.format(name='alex',age=37))  #格式化输出的另一种方式
print('My tLtle'.lower())  #大写变小写
print('My tLtle'.upper())  #小写变大写
print('	My tLtle
'.strip())  #只处理文本内容(左右两边),跳过空格、换行符
print('My title title'.replace('itle','lesson',1))  #将字符串内容进行替换,1表示在有多个相同内容的时候,只替换一次
print('My title title'.split('i',1))  #以左为准,分割对象(i)把字符串分割成列表,分割一次

其他字符串内置方法

st='hello kitty {name} is {age}'

print(st.count('l'))  #统计元素个数
print(st.capitalize())  #首字母大写
print(st.center(50,'#'))  #居中
print(st.endswith('tty3'))  #判断是否以某个内容结尾
print(st.startswith('he'))  #判断是否以某个内容开头
print(st.expandtabs(tabsize=20))  #规定字符串中的空格数	
print(st.find('t'))  #查找到第一个元素,并将索引值返回
print(st.format(name='alex',age=37))  #格式化输出的另一种方式
print(st.format_map({'name':'alex','age':22}))  #字典也可表示格式化输出
print(st.index('t'))  #正常状况下同find输出一样
print('asd'.isalnum())  #判断是否包含字母或数字,汉字也可以
print('12632178'.isdecimal())  #判断是否为十进制的数
print('1269999.uuuu'.isnumeric())  #判断是否只由数字组成
print('abc'.isidentifier())  #判断是否满足标识符定义规则。标识符定义规则为:只能是字母或下划线开头、不能包含除数字、字母和下划线以外的任意字符。
print('Abc'.islower())  #判断是否为全小写
print('ABC'.isupper())  #判断是否为全大写
print('  e'.isspace())  #判断是否是空格
print('My title'.istitle())  #判断首字母是否是大写
print('My tLtle'.lower())  #大写变小写
print('My tLtle'.upper())  #小写变大写
print('My tLtle'.swapcase())  #大写变小写,同时小写变大写
print('My tLtle'.ljust(50,'*'))  # *依次向左补充,推动字符串至最左端
print('My tLtle'.rjust(50,'*'))  # *依次向右补充,推动字符串至最右端
print('	My tLtle
'.strip())  #只处理文本内容(左右两边),跳过空格、换行符
print('	My tLtle
'.lstrip())  #只处理文本内容(左边),跳过空格、换行符
print('	My tLtle
'.rstrip())  #只处理文本内容(左边),跳过空格、换行符
print('My title title'.replace('itle','lesson',1))  #将字符串内容进行替换,1表示在有多个相同内容的时候,只替换一次
print('My title title'.rfind('t'))  #从右往左的第一个t的索引位置
print('My title title'.split('i',1))  #以左为准,分割对象(i)把字符串分割成列表,分割一次
print('My title title'.title())  #按照起始字符的格式将后面变成统一格式
原文地址:https://www.cnblogs.com/chungzhao/p/12902166.html