字符串、列表、元组、字典、参数


 

python_two_day

 

作者:_晓冬

归档:学习笔记

2016/9/16

 


目  录

第1章... 1

1.1 可变和不可变类型... 1

第2章 字符串类型... 1

2.1 【重点】字符串取值方法... 1

2.2 【了解】字符串方法... 1

2.3 练习题... 2

2.4 打破顺序位置占位... 3

2.5 辨别find,rfind,index,rindex,ocunt 3

2.6 判断数字... 4

第3章 列表类型... 5

3.1 其他操作... 7

第4章 元组... 10

4.1 循环元组... 11

4.2 字典... 12

4.3 注意:设计数据结构的根本目的是方便自己的存和取... 13

4.4 两种赋值方式... 13

4.5 集合... 17

4.6 去重并定序... 19

 

 

 

 

 

 

 

 

 

 

 

 

第1章  

 

1.1 可变和不可变类型

注意:当数值量较小时定义变量指向同一块内存空间

x=123
y=123
print(id(x))
print(id(y))

字符串也是一样样的

第2章 字符串类型

2.1 【重点】字符串取值方法

l  按照索引取值

l  按照切片取值

l  字符串长度计算:len

l  成员运算 :in 和 not in

l  移除空白strip

l  切分split

l  循环

2.2 【了解】字符串方法

l  .replace :替换

例:

msg='alex say i have one telsa,my name is alec'
print(msg.replace('alex','Sb',1))

 

C:\python3\python.exe D:/python/untitled/two_day.py

Sb say i have one telsa,my name is alec

l  .format::占位

例:

 

print('my name is %s my age is %s' %('egon',18))
print('my name is {} my age is {}'.format('egon',18))

 

C:\python3\python.exe D:/python/untitled/two_day.py

my name is egon my age is 18

my name is egon my age is 18

l  count说明

统计l在整个字符串出现的次数,可以按索引范围规定内统计

msg='hello word'
print(msg.count('l',0,4))
print(msg.count('l',0,3))

C:\python3\python.exe D:/python/untitled/two_day.py

 

2.3 练习题

l  去除空格及打印以al开头的字符串

name = ' alex oldboy'
#print(name.strip(' '))

name = 'alex'
a=name.startswith('al')
print(a)

C:\python3\python.exe D:/python/untitled/two_day.py

False

l  以l为分隔符

a=name.split('l')
print(a)

C:\python3\python.exe D:/python/untitled/two_day.py

['a', 'ex']

l  将小写转化成大写


# print(name.upper())
#
# print(name.lower())

C:\python3\python.exe D:/python/untitled/two_day.py

ALEX

alex

l  输出name 变量对应的值的第2个字符

print(name[2])
print(name[1:3])
print(name[-2:])

C:\python3\python.exe D:/python/untitled/two_day.py

e

le

eX

l  cente说明

msg='hello word'
print(msg.center(30,'='))
print(msg.rjust(30,'='))
print(msg.ljust(30,'='))

C:\python3\python.exe D:/python/untitled/two_day.py

==========hello word==========

====================hello word

hello word====================

 

2.4 打破顺序位置占位

语法:

print('my name is {x} my age is {y}'.format(x='wxd',y=19))
print('{0} {0} {1}'.format('egon',19))

执行:

C:\python3\python.exe D:/python/untitled/two_day.py

my name is wxd my age is 19

egon egon 19

Process finished with exit code 0

2.5 辨别find,rfind,index,rindex,ocunt

l  find 说明

从左到右找,如有则返回第一个字符的索引;如果没有返回 -1

msg='hello word'
print(msg.find('ell'))
print(msg.find('x'))

C:\python3\python.exe D:/python/untitled/two_day.py

1

-1

l  index说明

从左到右找,有则返回第一个字符的索引;没有则报错

print(msg.index('d'))
print(msg.index('x'))

C:\python3\python.exe D:/python/untitled/two_day.py

9

Traceback (most recent call last):

  File "D:/python/untitled/two_day.py", line 115, in <module>

    print(msg.index('x'))

ValueError: substring not found

2

1

2.6 判断数字

age=10
inp=input('>>: ').strip()
if inp.isdigit():
    inp=int(inp)
    if inp > age:
        print('ok')

else:
    print('you mast input number')

 

C:\python3\python.exe D:/python/untitled/two_day.py

>>: fd

you mast input number

 

 

 

 

 

第3章 列表类型

3.1 追加

my_frinds=['w','x','z',1,3,5]
my_frinds.append('6')
print(my_frinds)
#print(my_frinds)

3.2 删除

my_frinds=['w','x','z',1,3,5]my_frinds=['w','x','z',1,3,5]
my_frinds.append('6')
print(my_frinds)
#print(my_frinds)
'''''
my_frinds=['w','x','z',1,3,5]
#del my_frinds[2] 按照所引来删除
print(my_frinds)

my_frinds.remove('x')
print(my_frinds)

C:\python3\python.exe D:/python/untitled/two_day.py

['w', 'x', 'z', 1, 3, 5]

['w', 'z', 1, 3, 5]

3.3 remove与pop的区别

l  remove 只是单纯的删除不会返回删除的值,并且是按照值来删除

l  pop  按照索引去删除 默认从末尾开始删除,并且可以取出删除的值

第4章 列表其他操作

4.1 【重点】随意插入一个值

my_girl_frinds=['alex','wupei','yuanhao',4,5]
my_girl_frinds.insert(0,'sb_alex')
print(my_girl_frinds)

C:\python3\python.exe D:/python/untitled/two_day.py

['sb_alex', 'alex', 'wupei', 'yuanhao', 4, 5]

Process finished with exit code

 

4.2 追加加多个值

my_girl_frinds=['alex','wupei','yuanhao',4,5]
# my_girl_frinds.insert(0,'sb_alex')
# print(my_girl_frinds)
my_girl_frinds.extend([1,2,34,5])
print(my_girl_frinds)

C:\python3\python.exe D:/python/untitled/two_day.py

['alex', 'wupei', 'yuanhao', 4, 5, 1, 2, 34, 5]

Process finished with exit code 0

4.3 【常用操作】统计

my_girl_frinds=['alex','wupei','yuanhao',4,5]
print(my_girl_frinds.count('alex'))

C:\python3\python.exe D:/python/untitled/two_day.py

1

Process finished with exit code 0

4.4 练习题

4.4.1 先进先出

l1=[]
l1.append('first')
l1.append('second')
l1.append('third')
print(l1.pop(0))
print(l1.pop(0))
print(l1.pop(0))

C:\python3\python.exe D:/python/untitled/two_day.py

first

second

third

4.4.2 先进后出

l1=[]
l1.append('first')
l1.append('second')
l1.append('third')
print(l1.pop())
print(l1.pop())
print(l1.pop())

C:\python3\python.exe D:/python/untitled/two_day.py

third

second

first

第5章 元组

5.1 【重点】区别于列表

和列表的唯一区别是:元组是不可变的

ages=(10,20,18,33) #ages=tuble((10,12,18,33))
print(id(ages),type(ages),ages)

C:\python3\python.exe D:/python/untitled/two_day.py

41796456 <class 'tuple'> (10, 20, 18, 33)

5.2 【重点】按索引取值

ages=(10,20,18,33) #ages=tuble((10,12,18,33))
#print(id(ages),type(ages),ages)
print(ages.index(10))

C:\python3\python.exe D:/python/untitled/two_day.py

0

5.3 【重点】切片取值

ages=(10,20,18,33) #ages=tuble((10,12,18,33))
#print(id(ages),type(ages),ages)
print(ages[0])

C:\python3\python.exe D:/python/untitled/two_day.py

10

5.4 【重点】长度len

ages=(10,20,18,33) #ages=tuble((10,12,18,33))
#print(id(ages),type(ages),ages)
print(ages.__len__())

C:\python3\python.exe D:/python/untitled/two_day.py

4

5.5 成员运算in /not in

ages=(10,20,18,33) #ages=tuble((10,12,18,33))
#print(id(ages),type(ages),ages)
#print(ages.__len__())
print(19 not in ages)

C:\python3\python.exe D:/python/untitled/two_day.py

True

 

5.6 【重点】循环列表:

l=['a','b','c','d','e']
index=0
while index < len(l):
   
print(l[index])
   
index+=1

C:\python3\python.exe D:/python/untitled/two_day.py

a

b

c

d

e

5.7 【重点】循环元组

msg_dic={
   
'apple':10,
    'tesla':10000,
    'mac':300,
    'lenovo':3000,
    'chicken':10,
}

goods_l=[]
while True:
   
for key in msg_dic:
       
print(key,msg_dic[key])
       
choice = input('商品名称>>: ')
       
if choice not in msg_dic:continue
       
count = input('个数>>: ').strip()
       
if count.isdigit():
           
goods_l.append((choice,msg_dic[choice],int(count)))
           
print(goods_l)

lenovo 3000

商品名称>>: apple

个数>>: sdfsa

chicken 10

商品名称>>: apple

个数>>: 10

[('apple', 10, 19), ('apple', 10, 10)]

apple 10

商品名称>>:

第6章 字典

l  字典作用:存多个值,key-value 存取,取值速度快

l  字典定义:key必须是不可变类型,value可以是任意类型

6.1 【重点】按key存取值:可存可取

info={'name':'agen','age':18,'sex':'male',(0,'mac'):3000}
print(info[(0,'mac')])

C:\python3\python.exe D:/python/untitled/two_day.py

3000

6.2 【掌握】长度算法len

info={'name':'agen','age':18,'sex':'male',(0,'mac'):3000}
print(info[(0,'mac')])
print(info.__len__())

C:\python3\python.exe D:/python/untitled/two_day.py

3000

4

6.3 【掌握】成员运算in /not in

info={'name':'agen','age':18,'sex':'male',(0,'mac'):3000}
print(info[(0,'mac')])
print(info.__len__())
print('name' in info )

C:\python3\python.exe D:/python/untitled/two_day.py

3000

4

True

6.4 【重点】删除

info={'name':'agen','age':18,'sex':'male',(0,'mac'):3000}
print(info[(0,'mac')])
print(info.__len__())
print('name' in info )
info.pop('name')
print(info)

C:\python3\python.exe D:/python/untitled/two_day.py

True

{'age': 18, 'sex': 'male', (0, 'mac'): 3000}

6.5 【掌握】键keys()/值valuse()/键值对items()

 

 

 

 

6.6 注意:设计数据结构的根本目的是方便自己的存和取

列表取值如果没有直接报错

info={'name':'agen','age':18,'sex':'male',(0,'mac'):3000}
info.fromkeys()
print(info['name1'])

C:\python3\python.exe D:/python/untitled/two_day.py

Traceback (most recent call last):

  File "D:/python/untitled/two_day.py", line 186, in <module>

    info.fromkeys()

TypeError: fromkeys expected at least 1 arguments, got 0

l  get 取值不会报错可以赋值

info={'name':'agen','age':18,'sex':'male',(0,'mac'):3000}
print(info.get('name1',1))

C:\python3\python.exe D:/python/untitled/two_day.py

1

print(info.get('name1'))

C:\python3\python.exe D:/python/untitled/two_day.py

None

 

6.7 两种赋值方式

6.7.1 链接式赋值

x=10

y=20

z=30

s=y=z

print(x,y,z)

m=10
n=20
m,n=n,m
print(m,n)

 

6.7.2 *—匹配赋值

从一个数据类型中解压出想要的值

t=(10.3,11.2,12.1,14.3,3.1)
x,y,z,a,b=t
print(x,y,z,a,b)

C:\python3\python.exe D:/python/untitled/two_day.py

10.3 11.2 12.1 14.3 3.1

t=(10.3,11.2,12.1,14.3,3.1)
x,*_,b=t
print(x,b)

C:\python3\python.exe D:/python/untitled/two_day.py

10.3 3.1

t=(10,20,30)
# x,y,z=t
# print(x,z)
x,*_=t
print(x)

 

6.8 for循环取值

直接取出字典的key和key值

info={'name':'agen','age':18,'sex':'male',(0,'mac'):3000}
for k,v in  info.items():
   
print(k,v)

C:\python3\python.exe D:/python/untitled/two_day.py

name agen

age 18

sex male

(0, 'mac') 3000

6.9 setdefault

有则不改,返回已经有的值,没有则新增,返回新增的值

6.9.1 传统添加多值

info={'name':'agen','age':18,'sex':'male',(0,'mac'):3000}
# for k,v in  info.items():
#     print(k,v)

if 'hobbis' not in info:
   
info['hobbis']=[]
   
info['hobbis'].append('music')
else:
   
info['hobbis'].append('read')
if 'hobbis' not in info:
   
info['hobbis']=[]
   
info['hobbis'].append('music')
else:
   
info['hobbis'].append('read')

print(info)

第一个if后的结果

C:\python3\python.exe D:/python/untitled/two_day.py

{'name': 'agen', 'age': 18, 'sex': 'male', (0, 'mac'): 3000, 'hobbis': ['music']}

第二个if后的结果

C:\python3\python.exe D:/python/untitled/two_day.py

{'name': 'agen', 'age': 18, 'sex': 'male', (0, 'mac'): 3000, 'hobbis': ['music', 'read']}

Process finished with exit code 0

6.10 setdefault加值

如果存在key则不修改,如果不存在就添加

info.setdefault('hobbies',[]).append('music')
info.setdefault('hobbies',[]).append('read')
print(inf

 

C:\python3\python.exe D:/python/untitled/two_day.py

{'name': 'agen', 'age': 18, 'sex': 'male', (0, 'mac'): 3000, 'hobbies': ['music', 'read']}

 

Process finished with exit code 0

第7章 集合

7.1 特点:

l  每个元素必须是不可变类型(可hash,可作为字典的key)

l  没有重复的元素

l  无序

7.2 【重点】作用:去重

符号一览表

符号

定义

|

合集

&

交集

-

差集

^

对称差集

==

相同集合

>,>= ,<,<=

父集,子集

 

练习:

pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
#求出即报名python又报名linux课程的学员名字集合
print(pythons & linuxs)
#求出所有报名的学生名字集合
print((pythons | linuxs))
print(len(pythons | linuxs))
#求出只报名python课程的学员名字
print(pythons - linuxs)
#求出没有同时这两门课程的学员名字集合
print(pythons ^linuxs)

C:\python3\python.exe D:/python/untitled/two_day.py

{'wupeiqi', 'gangdan'}

{'biubiu', 'gangdan', 'alex', 'oldboy', 'wupeiqi', 'yuanhao', 'egon'}

7

{'egon', 'biubiu', 'yuanhao', 'alex'}

{'biubiu', 'oldboy', 'alex', 'egon', 'yuanhao'}

7.3 常用操作

7.3.1 删除

sl={1,2,3,'a',4}
print(sl.pop())
sl.remove('a')
sl.remove('as')
print(sl)

1

Traceback (most recent call last):

  File "D:/python/untitled/two_day.py", line 233, in <module>

    sl.remove('as')

KeyError: 'as'

注意:

l  pop随机删除,并返回删除的结果

l  remove 单纯的删除,不会返回结果,如果删除的元素不在则报错

7.3.2 交集判断isdisjoint

sl={1,2,3,'a',4}
s2={4,5}
print(sl.isdisjoint(s2))

如果sl和s2没有交集则返回True

7.4 【掌握】关系运算

 

7.5 去重并定序

l=['a','b',1,'a','a']
print(list(set(l)))

C:\python3\python.exe D:/python/untitled/two_day.py

['b', 'a', 1]

7.6 循环

l=['a','b',1,'a','a']
#print(list(set(l)))
l_new=list()
s=set()
for item in  l:
   
if item not in s:
       
s.add(item)
       
l_new.append(item)
       
print(item)

C:\python3\python.exe D:/python/untitled/two_day.py

a

b

1

第8章 作业一: 三级菜单

要求:

l  打印省、市、县三级菜单

l  可返回上一级

l  可随时退出程序

8.1 方法一


#作业 三级菜单

'''
menu = {
    'beijing':{
        'haidian':{
            'wudaokou':{
                'soho':{},
                'wangyi':{},
                'google':{},
            },
            'zhongguancun':{
                'aiqiyi':{},
                'qichezhijia':{},
                'youku':{},
            },
            'shangdi':{
                'baidu':{},
            },
        },
        'changping':{
            'shahe':{
                'laonanhai':{},
                'beihang':{},
            },
            'tiantongyuan':{},
            'huilongguan':{},
        },
        'chaoyang':{},
        'dongcheng':{},
    },
    'shanghai':{
        'minhang':{
            'renminguangchang':{
                'zhajidian':{}
            }
        },
        'zhabei'{
            'huochezhan':{
                'xiiecheng':{}
            },
        },
        'pudong':{},
    },
    'shandong':{},
}

exit_flag = False
current_layer = menu
layers  = [menu]
while not exit_flag:
    for k in current_layer:
        print(k)
    choice = input (">>:").strip()
    if choice == "b":
        current_layer =layers[-1]
        layers.pop()
    elif choice not in current_layer:continue
    else:
        layers.append(current_layer)
        current_layer = current_layer[choice]
'''

方法二:

################################################
# Task Name:
三级菜单                           #
# Description
:打印省、市、县三级菜单             #
#             
可返回上一级                      #
#              
可随时退出程序                   #
#----------------------------------------------#
# Author
Wang_sir                          #
################################################

zone = {
    '
山东' : {
        '
青岛' : ['四方','黄岛','崂山','李沧','城阳'],
        '
济南' : ['历城','槐荫','高新','长青','章丘'],
        '
烟台' : ['龙口','莱山','牟平','蓬莱','招远']
    },
    '
江苏' : {
        '
苏州' : ['沧浪','相城','平江','吴中','昆山'],
        '
南京' : ['白下','秦淮','浦口','栖霞','江宁'],
        '
无锡' : ['崇安','南长','北塘','锡山','江阴']
    },
    '
浙江' : {
        '
杭州' : ['西湖','江干','下城','上城','滨江'],
        '
宁波' : ['海曙','江东','江北','镇海','余姚'],
        '
温州' : ['鹿城','龙湾','乐清','瑞安','永嘉']
    },
    '
安徽' : {
        '
合肥' : ['蜀山','庐阳','包河','经开','新站'],
        '
芜湖' : ['镜湖','鸠江','无为','三山','南陵'],
        '
蚌埠' : ['蚌山','龙子湖','淮上','怀远','固镇']
    },
    '
广东' : {
        '
深圳' : ['罗湖','福田','南山','宝安','布吉'],
        '
广州' : ['天河','珠海','越秀','白云','黄埔'],
        '
东莞' : ['莞城','长安','虎门','万江','大朗']
    }
}
province_list = list(zone.keys())             #
省列表
# flag = False
# flag1 = False
while True:
    print("
".center(50,'*'))
    for i in province_list:
        print(province_list.index(i)+1,i)       #
打印省列表
    pro_id = input("
请输入省编号,或输入q(quit)退出:")   #ID
    if pro_id.isdigit():
        pro_id = int(pro_id)
        if pro_id > 0 and pro_id <= len(province_list):
            pro_name = province_list[pro_id-1]     #
根据省ID获取省名称
            city_list = list(zone[pro_name].keys())    #
根据省名称获取对应的值,从新字典中获取key,即市列表
            while True:
                print("
".center(50,'*'))
                for v in city_list:
                    print(city_list.index(v)+1,v)       #
打印市列表
                city_id = input("
请输入市编号,或输入b(back)返回上级菜单,或输入q(quit)退出:")
                if city_id.isdigit():
                    city_id = int(city_id)
                    if city_id > 0 and city_id <= len(city_list):
                        city_name = city_list[city_id-1]    #
根据市ID获取市名称
                        town_list = zone[pro_name][city_name]   #
根据省名称获取对应的值,从新字典中获取值,即县列表
                        while True:
                            print("
".center(50,'*'))
                            for j in town_list:
                                print(town_list.index(j)+1,j)
                            back_or_quit = input("
输入b(back)返回上级菜单,或输入q(quit)退出:")
                            if back_or_quit == 'b':
                                break                #
终止此层while循环,跳转到上一层While
                            elif back_or_quit == 'q':
                               # flag1 = True
                               # break               #
根据标志位结束程序。
                                exit()
                            else:
                                print("
输入非法!")
                    else:
                        print("
编号%d不存在。"%city_id)
                elif city_id == 'b':
                    break
                elif city_id == 'q':
                    # flag = True
                    # break
                    exit()
                else:
                    print("
输入非法!")
                # if flag1:
                #     break
        else:
            print("
编号%d不存在。"%pro_id)
    elif pro_id == 'q':
        break
    else:
        print("
输入非法!")
    # if flag or flag1:
    #     break

 

第9章 作业二:请闭眼写出购物车程序

需求:

l  用户名和密码存放于文件中,格式为:egon|egon123

l  启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表,失败则重新登录,超过三次则退出程序

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

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

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


#写出购物车
# -*- coding: utf-8 -*-

product_list = [
        [
"Iphone",5800],
        ["MAC PRO",16800],
        ["Bike",800],
        ["Coffee",30],
]

shopping_list = []

salary = input("请输入你的工资:")
#判断是否为数字
if salary.isdigit():
   
salary = int(salary)
   
while True:
       
for index,item in enumerate(product_list):
           
#打出菜单
            print(index,item[0],item[1])

       
choice = input("请选择要购买的商品编号[quit]>>")
       
if choice.isdigit():
           
choice = int(choice)
           
if choice >=0 and choice < len(product_list):
               
#判断钱是否够用
                p = product_list[choice]

               
if p[1] <= salary:
                   
shopping_list.append(p)
                   
salary -= p[1]
                   
print("Added \033[32;1m[%s]\033[0m into your shopping cart,and your current balance is \033[1;31;40m%s\033[0m"%(p,salary))
               
else:
                   
print("钱不够,你只有 \033[5;31;42m[%s] \033[0m "% salary)
           
else:
               
print("没有此商品...")

       
elif choice == "quit":
           
print("已购买的商品".center(50,"-"))
           
for i in shopping_list:
               
print(i)
           
print("Your left balance is ",salary)
           
exit()
       
else:
           
print("未识别,请输入正确的指令!!")

 

posted @ 2017-09-16 11:42  王晓冬  阅读(439)  评论(0编辑  收藏  举报