前言:
预习资料:
1. python3 菜鸟教程
第一部分
day1 输入 、格式化输出 、 数据类型
#coding = utf-8
#输出
print("****你好") # 字符串
print('****你好') #单引号和双引号没区别
#字符串对象在 python 中有三种形式存在 单引号 双引号 三引号
# 格式化输出
age = 10
print('age=%d',age) #C语言中的输出方式 #age=%d 10
print('%d'%age) # 10
print("%d"%age) # 10
age +=1 # age=age+1
print("age = %d " %age ) #11=110+1*
print("age = %o " %age ) # 13 = 181+3*80*
print("age = %x" %age) # B ABCDEF (10)(11)(12)(13)...
print("age= %f" %age) # 11.000000
#换行
print("age= %f " %age) ; print("age= %f" %age)
print("age= %f \n " %age) ; print("age= %f" %age)
#数据类型 #字符串对象 数字
name="lin "
password=1234
print(type(name)) #<class 'str'>
print(type(password)) #<class 'int'>
#输入 # raw_input()2.0 # input() 3.0++
stuid=input("Enter your ID :")
# print("%d"%stuid) #TypeError: %d format: a number is required, not str
print(type(stuid))
print("%s"%stuid)
#input() 只能输出 string 局限性 后面对函数 进行重写
day2 运算、注释、简单数据类型转化
# coding = utf-8
#*算术运算 + - * / % (整除取余数) // (整除取商) *(指数运算)
#扩号调整运算优先级()
#赋值运算 =
#*复合赋值运算 += *= /= *= -=(c-=a 等价于 c=c-a) %=
#控制台操作 python console
stu1,stu2,stu3,stu4=123,"1234",1.23,'12'
print(stu1,type(stu1))
print(stu2,type(stu2))
print(stu3,type(stu3))
print(stu4,type(stu4))
#多行注释 (结果)
'''
123 <class 'int'>
1234 <class 'str'>
1.23 <class 'float'>
12 <class 'str'>
'''
#数据类型
# 除了数字类型 常见为 整型 浮点型 复数型 暂不介绍其他
#数据类型转换
#只是介绍数字类型三个类型的数据的变化, 其他后面进行介绍
str1='2020'
year = int(str1) # 2020
print(year,type(year)) # 2020 <class 'int'>
number=int(6.18)
print(number) # 6 (出去小数部分)
f2=float(10)
print(f2) # 10.0 (浮点数部分) 保留一位小数
# str与整数 变换 函数实现
# str变为字符串
num1=int(str1,8) #str=“2020” 转化为整数再进行转换 为 8进制的整数 ,以下同理
print(num1,type(num1)) # 1040 <class 'int'> 18^3+48=2020
num2=int(str1,10)
print(num2,type(num2)) # 2020 <class 'int'>
num3=int(str1,16)
print(num3,type(num3)) # 8224 <class 'int'>
#hex(x) 整数转化为十六进制的字符串
#oct(x) 整数转化为八进制的字符串
#bin(x) 整数转化为二进制的字符串
num= 2
print(hex(num),type(hex(num))) # 0x2 <class 'str'>
#(浮点数) 和 str 变换
str2 = '3.14'
f1=float(str2)
print(f1,type(f1)) # 3.14 <class 'float'>
#str()
f2=str(f1)
print(f2,type(f2)) # 3.14 <class 'str'>
# 其他类型之后讲
day3 if语句 、if -else 、elif、 随机生成、列表了解
#coding = utf-8
#if 语句
age =20
if age >=19 :
print("****我已经成年") #我已经成年
print("--over----") # --over----
if age <=0:
print(123)
# 判断条件 : 运算符 关系运算符 == >= != < > <=
#console 结果
'''
**x=2020 **
y=2021
print(x==y)
#False
print(x!=y)
#True
'''
#逻辑运算符
#或与非 and or not # & ! ||
#x=99
#print(x>0 and x<100) # SyntaxError: invalid character in identifier #只用于条件判断语句中
x=90
if x<100 and x>0 or x%3==0 and not 89:
print("yes")
#yes
# 普通 if -else
age =18
if age >=19 :
print("****我已经成年")
else :
print("****我未成年") # 我未成年
#elif == else if
name="huang"
if name=="lin" :
print("-----")
elif name=="tao":
print("++++++")
elif name=="huang":
print("name: %s" % name)
else:
print("=====")
#if嵌套
#作业: 地铁系统 : ticket : 1表示有车票 , 0 表示没有车票 security : 1 表示安全 ,0 表示危险
ticket = 1
security =1
if security==1:
print("****安全")
if ticket==1 :
print("****乘车")
elif ticket==0:
print("****请买票")
else:
print("****特殊处理")
elif security==0:
print("****进监狱")
else:
print("****阿伟必死")
'''
#****猜拳游戏 随机数产生 和随机数相同的话就正确否则错误
import random
num=input("****请输入一个数")
num=int(num)
print(num,type(num))
if num == random.randint(5,7): #****生成 a<=x<=b (a=5,b=6) # randint ()对象
print ("right")
elif num+1==random.randint(5,6):
print(num+1)
else :
print("error")
'''
#猜星座
import random
#列表
list=['****白羊座','****金牛座','****双子座',
'****巨蟹座','****狮子座','****处女座',
'****天秤座','****天蝎座','****射手座',
'****摩羯座','****水瓶座','****双鱼座'
] #类似一个元祖
#随机生成一个列表中的星座
collect= random.choice(list)
print("constellation is %s"%collect)
start = input("Enter the constellation :")
if start==collect :
print("right")
else :
print("error")
day4 while、 for循环 、break and continue
#coding = utf-8
#循环结构 while
i=0
while i<10:
print("error %d" %i)
i+=1
#求和
#1/1-1/3+1/5-1/7+...+1/99
i=1
n=0
sum=0
while i<100:
sum+=((-1)*n)(1/i)
i+=2
n+=1
print("sum=%f"%sum )
#while 循环的嵌套
#打印图形
i = 1
while i <= 5 :
j = 1
while j <= i:
print(" "*, end = '')
j +=1
print("****\n****")
i += 1
# 九九乘法表
i = 1
while i <= 9:
j = 1
while j <=i :
print(" %d * %d = %d " %(j,i,i*j),end = "")
j+=1
print('****\n****')
i+=1
#for循环
#语法结构 for 临时变量 in 列表或者字符串可以迭代的对象等 :
# 循环满足的条件
# simple version
name = "lin "
for x in name: # x 临时变量可以不用定义 自动识别 类型
print(x)
# l i n
for y in name :
if y == 'i':
print("%c" %y )
else :
print("next line")
'''
next line
i
next line
next line
'''
# 由此可见 lin 为四个字符的长度 末尾有一个‘/0’
# range()
for u in range(6):
print(u)
'''
0
1
2
3
4
5
'''
#break and continue
name = "python"
for X in name :
if X == '/0':
print('/0')
elif X == 'o':
continue # 结束本次循环 惊醒下一次循环
print("----------") #不执行
elif X == 'n ':
break #结束循环 "/0" 没有执行
else :
print(X)
'''
p
y
t
h
n
'''
day5 字符串 存储 、相关函数
#coding = utf-8
#再讲字符串
name = 'huang'
position = 'Python'
address = '****梅州'
description = ''' 我是一名程序员
现在在做python的入门学习!
'''
print("****姓名 : %s " % name) # 空格
print("****职位 %s " % position)
print("****公司地址 %s " % address)
print("****描述 %s " % description)
#字符串的输入时用的是input() 函数
#demo
print('''there is a count please login ''')
username =input("Enter the username :")
password = input ("Enter the password :")
print("username : %s \n****password : %s \n****" %(username,password))
''' # 结果
there is a count please login
Enter the username: ddd
Enter the password: ddd
username : ddd
password : ddd
'''
#字符串的存储模式 存放在列表 或者元组之中
# 下标 索引 与C语言中的数组的内容是相似的
name = 'abcdefg'
for i in name:
print(i)
print("-------")
for i in range(6): # 0-5
print(name[i])
'''
a
b
c
d
e
f
g
-------
a
b
c
d
e
f
'''
# 切片 截取一部分 从某部分开始到某部分结束
# 语法结构 : 【Start : end : step】 (start --- end -1)
name = 'python'
print(name[-1]) # n
print(name[0]) # p
print(name[-0]) # p
print(name[+0]) # p
print(name[-2]) # o
print(name[0:2]) # py (name[0] name[1])
print(name[0:4]) # pyth (0,1,2,3)
print(name[2:6]) # thon (2,3,4,5)
print(name[0:-2]) # pyth (逆序 -2 尾部开始 '/0'=0 n = -1 , o= -2 ) (0,1,2,3)
print(name[1:]) # ython (1,2,3,4,5,6) 默认结束是 n 结束位/0 是后面添加的
print(name[:2]) # py (0.1) 默认开始 是 0 索引
print(name[1:5:1]) # ytho(默认的情况都是 1 ) (1,2,3,4)
print(name[1:5:]) # ytho
print(name[1:-1:]) # ytho 尾部开始 第一位 为 -1
print(name[::3]) # ph (0,3,6) (间距是3) (step= 2 默认从头部开始到尾部 结束 p = 0 顺序 依次往后)
print(name[::-1]) # (-1,-2,-3,-4,-5) nohtyp (/0)后面添加
print(name[::-2]) # nhy(-1.-3,-5) (-1=n 逆序 n=0 o=-1 h=-2 逆序 h=0 t =-1 y =-2 逆序 y=0 p=-1 n=-2 over )
print(name[::-3]) # nt (-1 = n 逆序 n=0 o = -1 h = -2 t = -3 逆序 t= 0 y =-1 p =-2 /0= -3 OVER)
print(name[::-4]) # ny (-1=n 逆序 nohty y= -4 逆序 ypno o=-4 等于 n 时over )
print(name[2:-1:2]) # (2,4) to (start = t ,end = n ,step = 2)
print(name[4:1:-2]) #ot (4 =o 1= y 逆序 ot )
# practice
s = 'hello python!'
print(s[4]) #o
print(s) #hello python!
print(s[:]) #hello python!
print(s[1:]) #ello python!
print(s[:5]) #hello
print(s[:-1]) #hello python
print(s[-4:-1]) #hon
print(s[1:5:2]) #el
print(s[::-1]) # !nothyp olleh
#对于字符串的常见操作
#对于一个字符串 mystr
#查 find(str ,start=0 ,end= len(mystr)) 返回值 (存在) 开始的索引值 (不存在) -1
a = 'a wei bi si '
print(len(a)) # 12 # 空格 和 /0 注意
a.find("bi") # 6
a.find('dh') # -1
a.find("a",0,10) # 0 #end =len(mystr) : 10 所以对应的是mystr = 10
# 查 index() index(str ,start = 任意小于mystr 长度的数,end=len(mystr)) 返回值(存在) 开始的索引 (不存在) 异常
a.index('s',0,12) #9
a.index('s') # 9
# a.index('s',0,1)
#error
'''
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: substring not found
'''
#从右边查找
#rfind() rfind(str ,start= 0 ,end = len(mystr))
#rindex() rindex(str ,start= 0 ,end = len(mystr))
a.rfind('a',0,12) # 0
a.rindex('s') # 9
#a.rindex('s',0,8) # errors
# 顺序 是正向的 不是反向的
# 字符串分隔 partition(str) 根据 str 讲 字符串变成 3部分 前、 中、 后
a.partition("bi")
# ('a wei ', 'bi', ' si ')
# 查找并分隔字符 rpartition(str) 从右边开始进行查找
a.rpartition("e") # ('a w', 'e', 'i bi si ')
#计算 str 出现的次数 count() count(str,start,end<= len(mystr))
a.count('i') #3 i出现了三次
#替换 replace(str1 ,str2,mtstr.count(str1)) mystr中的 str1 替换成 str2 替换次数不超过 count()次
mystr = " i like studing math ,and you like math too "
mystr.replace("like","hate")
mystr.replace("like","hate",1)
mystr.replace("like","hate",2)
'''
' i hate studing math ,and you hate math too ' #****默认全部替换
' i hate studing math ,and you like math too ' # 顺序 从前到后
' i hate studing math ,and you hate math too '
'''
# 分隔字符串 split(str=" ",2 ) #maxsplit 有无指定值
#统计时候 经常用得到 比如说
mode = "****日期 星期 天气 心情 "
data1 = "2021-1-21 Thursday rainning happy "
print(mode)
print(data1)
mode = mode.split(" ")
data1 = data1.split(" ")
print(mode)
print(data1)
'''
日期 星期 天气 心情
2021-1-21 Thursday rainning happy
['****日期', '星期', '', '', '天气', '', '心情', '']
['2021-1-21', 'Thursday', 'rainning', 'happy', '']
'''
# 便于数据的处理
#检查是否以 str 开头 startswith("str") 返回值 是 Ture 或者 False
#检查是否以 str 结尾 endswith ("str)
story = "long long age ,there is a boy called John . he died in 1987 .what fuck !"
s1=story.startswith("long")
s2=story.endswith('!')
s3=story.endswith(' ')
print(type(s1),type(s2),type(s3),s1,s2,s3)
# <class 'bool'> <class 'bool'> <class 'bool'> True True False
#bool 的打印 (补充)
print("%d"%s1) # 1 == Ture
print("%s" %s1) # Ture
# 首字母大写 capitalize()
# 每个单词首字母大写 title()
# 每个字符 大写 upper()
#每个 字符 小写 lower()
letter = 'my mother loves my father ,so they have me as the kid '
letter.capitalize()
letter.title()
letter.upper()
letter.lower()
# console results
'''
'My mother loves my father ,so they have me as the kid '
'My Mother Loves My Father ,So They Have Me As The Kid '
'MY MOTHER LOVES MY FATHER ,SO THEY HAVE ME AS THE KID '
'my mother loves my father ,so they have me as the kid '
'''
#对齐格式
# 左对齐 ljust() 不够用空格
# 右对齐 ljust()
# 居中 center()
letter.ljust(80)
letter.rjust(80)
letter.center(90)
'''
'my mother loves my father ,so they have me as the kid '
' my mother loves my father ,so they have me as the kid '
' my mother loves my father ,so they have me as the kid '
'''
#删除 左边空白字符 lstrip()
#删除 字符串末尾 的空白字符 rstrip()
#删除字符串两端的 空白字符 strip()
name=" heis i sss 123 "
name.lstrip()
name.rstrip()
name.strip()
'''
'heis i sss 123 '
' heis i sss 123'
'heis i sss 123'
'''
#简单列表 字符串
# 按照行分隔 返回列表 splitlines()
#
begin = '''hello
world \n hello python '''
begin.splitlines()
# ['hello ', ' world ', ' hello python ']
# 返回为boolean的 函数
# isalpha() 所有字符是字母
# isalnum() 所有字符是字母 或 数字
# isdigit() 是否只有数字
# isspace() 是否只包含空格
#isupper() 是否全大写
#islower() 是否全小写
#istitle() 是否每个单词字母大写
string = " today 123"
string.isalpha() # False # 空格
string.isalnum() # False
string.isdigit() # False
string.isspace() # False
string.isupper() # False # 与空格无关 只关每一个字符
string.islower() # Ture
string.istitle() # False
#还有其他的返回值是boolean 常见已 is开头的函数
day6 列表 增加、删除、修改、查询(之前讲过)、嵌套
#coding = utf-8
#list
# list 格式 name_list=[ 'a','b']
#相比C语言的数组 test_list = [2020,'22',2.333]
name_list = [ 2021 ,'2021-1-21',3.14]
print(name_list[0]) # 2021
print(name_list[1]) # 2021-1-21
print(name_list[2]) # 3.14
#list 的遍历
for name in name_list :
print(name)
'''
2021
2021-1-21
3.14
'''
#while 循环实现遍历
length =len(name_list)
count =0
while count<length :
print(name_list[count])
count+=1
'''
2021
2021-1-21
3.14
'''
#list 的操作
# 增加元素 append() extend() insert()
list1 = ['123',2021,1.34,"euy d fdf gii "]
count = 0
length = len(list1)
while count < length :
print(list1[count])
count +=1
print(len(list1)) # 4
#添加
li = input('Enter the information : ')
list1.append(int(li))
#添加后
for list in list1 :
print(list)
print(type(list1)) # <class 'list'>
print(len(list1)) #5
# append() list 后面添加 d个元素 循环实现多个元素的添加
# append() 添加之后改变 list的长度
list2 = [1,2,3,4,5]
list3 = ['a','b']
list3.append(list2) # list2 的 整个列表加到list3 中 最后返回list3
print(list3[2])
# list3[0] = 'a'
# list3[1] = 'b'
#list3[2] = [1, 2, 3, 4, 5]
# extend( ) 添加 列表中的每一个元素 进行添加
list4 = ['lin','huang','niu']
list3.extend(list4)
print(list3[3])
# lin
print(list3)
# ['a', 'b', [1, 2, 3, 4, 5], 'lin', 'huang', 'niu']
# 插入 将元素插入列表指定位置 insert( index ,object)
print(list4[0]) # hello
list4.insert(0,1232222)
print(list4[0]) # 1232222
# 修改 元素 通过下标来进行修改元素
list5 = ['I ', 'hate' , 'math' ]
print("before check : ")
for word in list5 :
print( word)
print("after check : ")
list5[0] = 'You'
print(list5)
'''
hate
math
after check :
['You', 'hate', 'math']
'''
# 查找 除了根据下标 find() index() count() 以及 他们的派生函数 以及他们的综合应用
# 可以根据 返回值 进行查询
list6 = ['3',1,2,3,4,'5']
find_list6 = '3'
if find_list6 in list6 : # not in the result should be reversed
print(find_list6)
else :
print("not in the list6")
# 3
# review index() 不存在报出异常的 count() 计算某一个字符出现的次数s
list7 = [1,2,3,4,5]
print(list7[0]) # 1
list7.index(1,0,4) # 0 返回下标
list7.index(2,0,4) # 1
list7.index(3,0,4) # 2
# 删除元素
# del
# pop()
# remove()
musics = ['****我怀念的','****告白气球','****夜空中最亮的星','****平凡之路'
,'****奇妙能力歌','****那些花儿']
print('---before delete ------')
i = 0
while i < len(musics) :
print(musics[i])
i += 1
del musics[1]
print ("after delete")
for music in musics :
print(music)
'''
---before delete ------
我怀念的
告白气球
夜空中最亮的星
平凡之路
奇妙能力歌
那些花儿
after delete
我怀念的
夜空中最亮的星
平凡之路
奇妙能力歌
那些花儿
'''
musics.pop() # 删除列表中的最后一个元素
print ("after delete")
for music in musics :
print(music)
'''
after delete
我怀念的
夜空中最亮的星
平凡之路
奇妙能力歌
'''
# remove() 指定去除
musics.remove('****我怀念的 ') # 不存在
for music in musics :
print(music)
'''
夜空中最亮的星
平凡之路
奇妙能力歌
'''
# 注意 如果remove() 执行过一次,数据没有更新的话,会报如下错误
# ValueError: list.remove(x): x not in list
#列表的排序
# 列表中是数字 按照数字从小到大 sort()
# 列表元素倒序 reverse()
list8 = [56,78,90,23,45,65,89]
list8.sort()
print(list8)
# [23, 45, 56, 65, 78, 89, 90]
list8.reverse()
print(list8)
# [90, 89, 78, 65, 56, 45, 23]
list9 = ['b','a','y','d','f',1,100]
list9.reverse()
print(list9)
# [100, 1, 'f', 'd', 'y', 'a', 'b']
# list9.sort()
# print(list9)
# # TypeError: '<' not supported between instances of 'str' and 'int'
# length =len(list9)
# i =0
# while i < length :
# list9[i] = int(list9[i]) # ValueError: invalid literal for int() with base 10: 'f'
# i +=1
# print(list9)
# list9.sort()
# print(list9)
# 由此可知 单个字符在python 中 不对应相应的ASCII的 数值 ,后面进行学习
# 列表嵌套
# 列表添加元素中 实现了列表的嵌套
# 类似于二维数组 ,其甚至可以表示多维
box = [[1,[[[[['hello'],'python']]]]],[1,2,3,4,5]]
print(box) # [[1, [[[[['hello'], 'python']]]]], [1, 2, 3, 4, 5]]
# print(box[0][0][0][0][0][0][0]) # TypeError: 'int' object is not subscriptable
# 暂时不如何取到 列表里面列表的数值 也许可以通过 循环来进行取 此处略
# 综合应用列表 # 分类列表元素
#coding = utf-8
import random
seat = [[],[],[],[]] # 四个类别
elements = ['s1','s2','s3','s4','s5','s6','s7','s8','s9','s10']
count = 0
for ele in elements :
index = random.randint(0,3) # 随机分类
seat[index].append(ele)
for x in range(0,4) :
print(seat[x])
'''
['s4', 's9', 's10']
['s3']
['s2', 's6', 's7', 's8']
['s1', 's5']
'''
day7 元组 不可修改
# 元组
# 元组 的元素 不能修改
# 元组 表示 小括号
tuple1 = ('python',2021,1,25)
print(tuple1) # ('python', 2021, 1, 25)
# 访问元组
tuple2 = ('hello','boy')
print(tuple2[1]) # boy
print(len(tuple2)) # 2
# 不可修改为元组的 基本属性 如果 修改的话会产生错误
# tuple2[1] = 'hello'
# print(tuple2)
# TypeError: 'tuple' object does not support item assignment
# index(str,start,end) count(str,start,end)
tuple3 = (1,2,3,4,5,6,2,1)
tuple3.index(4,0,5) # 3 下标
tuple3.count(2) # 2 个数
tuple3.count(1) # 2 个数
day8 字典 增加、删除、修改 遍历 、常见相关的函数
# 字典 1、存储多个数据 2、 访问元素时 方位定位到需要的元素
# 列表的嵌套 实现数据的列表
singers = [[ 1,'****王力宏',20],[2,'****林俊杰',23],[4,'****周杰伦',34]]
for singer in singers :
print(singer)
'''
[1, '****王力宏', 20]
[2, '****林俊杰', 23]
[4, '****周杰伦', 34]
'''
for singer in singers :
for sing in singer :
print(sing)
'''
1
王力宏
20
2
林俊杰
23
4
周杰伦
34
'''
# 类型不同 设计到转换 如果 不对的话 显示错误
# 字典 : 列表相似下;下标查找 ;键:值对
a_info = {'name': 'lin','age' : 'tao','sex': 1,'tel':182374433}
# 字典元素的访问
print(a_info['name']) # lin
print(a_info['tel']) #182374433
# print(a_info['sss']) # 不存在报错 KeyError: 'sss'
# 不确定 字典中是否存在的 键值对 get()方法
age = a_info.get('age') #
print(age,type(age)) # tao <class 'str'>
sex = a_info.get('sex')
print(sex,type(sex)) # 1 <class 'int'>
address =a_info.get('address')
print(address,type(address)) # None <class 'NoneType'> 不存在的
# 字典的操作
# 查看 a_info['age'] 或 a_info.get('age')
# 一般使用 a_info.get('anything')
# 修改元素
b_info = {'stuid' : 12306,'stuname':'haung' ,'class':12}
newid = input('Enter the new id ')
b_info['stuid'] = int(newid)
print( '%d'%b_info.get('stuid'))
'''
Enter the new id 12034
12034
'''
for b in b_info :
print(b_info.get(b))
'''
12034
haung
12
'''
# 添加元素
newsex = input('Enter sex ')
b_info['sex'] = newsex
for a in b_info :
print(a,b_info.get(a))
'''
stuid 12034
stuname haung
class 12
sex man
'''
# 字典末尾添加 注意添加的有 关键词+数值
# 删除元素 del clear()
del b_info['sex']
print(b_info.get('sex')) # None
# 删除整个词典
c_info = {'stuid' : 12306,'stuname':'haung' ,'class':12}
print(c_info) # {'stuid': 12306, 'stuname': 'haung', 'class': 12}
del c_info
#print(c_info) # NameError: name 'c_info' is not defined
# 清空字典 元素
d_info = {'name':'lin' ,'age' : 18,'sex' : 'man'}
print(d_info) # {'name': 'lin', 'age': 18, 'sex': 'man'}
d_info.clear()
print(d_info) # {}
# 关于字典的常见函数
# len() count the number of the key-value in the info
# keys() result == the list of the key in the info
# values() result == the list of the value in the info
# items() result == the list of the ke-value in the info
e_info = {'number':1,'score':12,}
print(len(e_info)) # 2
print(e_info.keys()) # dict_keys(['number', 'score'])
print(e_info.values()) # dict_values([1, 12])
print(e_info.items()) # dict_items([('number', 1), ('score', 12)])
# 复习加回顾
# 字符串
my_str = 'hello python'
for x in my_str :
print(x,end=' ')
# h e l l o p y t h o n
# 列表
my_list = [1,2,3,4,5,5]
for x in my_list :
print(x,end=' ')
# 1 2 3 4 5 5
# 元组
tuple = (11,22,33,44,55)
for i in tuple:
print(i,end=' ')
# 11 22 33 44 55
# 字典
# keys
info = {'name':'lin','age':23.0}
for key in info.keys():
print(key)
'''
name
age
'''
# values
for value in info.values():
print(value)
'''
lin
23.0
'''
#items
for item in info.items() :
print(item)
'''
('name', 'lin')
('age', 23.0)
'''
#key-value
for i,j in info.items() :
print(i,j)
'''
name lin
age 23.0
'''
# 带下标的遍历
# 列表
li =['1','2','3','4']
for i in range(0,len(li)):
print(i,str(li[i]))
'''
0 1
1 2
2 3
3 4
'''
# enumerate() 将一个可遍历的数据对象 组合成一个 索引序列 ,(数据+数据下标)
info_a = {'stuid' : 12306,'stuname':'haung' ,'class':12}
for i,j in enumerate(info_a.items()):
print('NO %d key-value %s'%(i,j))
'''
NO 0 key-value ('stuid', 12306)
NO 1 key-value ('stuname', 'haung')
NO 2 key-value ('class', 12)
'''# 字典 1、存储多个数据 2、 访问元素时 方位定位到需要的元素
# 列表的嵌套 实现数据的列表
singers = [[ 1,'****王力宏',20],[2,'****林俊杰',23],[4,'****周杰伦',34]]
for singer in singers :
print(singer)
'''
[1, '****王力宏', 20]
[2, '****林俊杰', 23]
[4, '****周杰伦', 34]
'''
for singer in singers :
for sing in singer :
print(sing)
'''
1
王力宏
20
2
林俊杰
23
4
周杰伦
34
'''
# 类型不同 设计到转换 如果 不对的话 显示错误
# 字典 : 列表相似下;下标查找 ;键:值对
a_info = {'name': 'lin','age' : 'tao','sex': 1,'tel':182374433}
# 字典元素的访问
print(a_info['name']) # lin
print(a_info['tel']) #182374433
# print(a_info['sss']) # 不存在报错 KeyError: 'sss'
# 不确定 字典中是否存在的 键值对 get()方法
age = a_info.get('age') #
print(age,type(age)) # tao <class 'str'>
sex = a_info.get('sex')
print(sex,type(sex)) # 1 <class 'int'>
address =a_info.get('address')
print(address,type(address)) # None <class 'NoneType'> 不存在的
# 字典的操作
# 查看 a_info['age'] 或 a_info.get('age')
# 一般使用 a_info.get('anything')
# 修改元素
b_info = {'stuid' : 12306,'stuname':'haung' ,'class':12}
newid = input('Enter the new id ')
b_info['stuid'] = int(newid)
print( '%d'%b_info.get('stuid'))
'''
Enter the new id 12034
12034
'''
for b in b_info :
print(b_info.get(b))
'''
12034
haung
12
'''
# 添加元素
newsex = input('Enter sex ')
b_info['sex'] = newsex
for a in b_info :
print(a,b_info.get(a))
'''
stuid 12034
stuname haung
class 12
sex man
'''
# 字典末尾添加 注意添加的有 关键词+数值
# 删除元素 del clear()
del b_info['sex']
print(b_info.get('sex')) # None
# 删除整个词典
c_info = {'stuid' : 12306,'stuname':'haung' ,'class':12}
print(c_info) # {'stuid': 12306, 'stuname': 'haung', 'class': 12}
del c_info
#print(c_info) # NameError: name 'c_info' is not defined
# 清空字典 元素
d_info = {'name':'lin' ,'age' : 18,'sex' : 'man'}
print(d_info) # {'name': 'lin', 'age': 18, 'sex': 'man'}
d_info.clear()
print(d_info) # {}
# 关于字典的常见函数
# len() count the number of the key-value in the info
# keys() result == the list of the key in the info
# values() result == the list of the value in the info
# items() result == the list of the ke-value in the info
e_info = {'number':1,'score':12,}
print(len(e_info)) # 2
print(e_info.keys()) # dict_keys(['number', 'score'])
print(e_info.values()) # dict_values([1, 12])
print(e_info.items()) # dict_items([('number', 1), ('score', 12)])
# 复习加回顾
# 字符串
my_str = 'hello python'
for x in my_str :
print(x,end=' ')
# h e l l o p y t h o n
# 列表
my_list = [1,2,3,4,5,5]
for x in my_list :
print(x,end=' ')
# 1 2 3 4 5 5
# 元组
tuple = (11,22,33,44,55)
for i in tuple:
print(i,end=' ')
# 11 22 33 44 55
# 字典
# keys
info = {'name':'lin','age':23.0}
for key in info.keys():
print(key)
'''
name
age
'''
# values
for value in info.values():
print(value)
'''
lin
23.0
'''
#items
for item in info.items() :
print(item)
'''
('name', 'lin')
('age', 23.0)
'''
#key-value
for i,j in info.items() :
print(i,j)
'''
name lin
age 23.0
'''
# 带下标的遍历
# 列表
li =['1','2','3','4']
for i in range(0,len(li)):
print(i,str(li[i]))
'''
0 1
1 2
2 3
3 4
'''
# enumerate() 将一个可遍历的数据对象 组合成一个 索引序列 ,(数据+数据下标)
info_a = {'stuid' : 12306,'stuname':'haung' ,'class':12}
for i,j in enumerate(info_a.items()):
print('NO %d key-value %s'%(i,j))
'''
NO 0 key-value ('stuid', 12306)
NO 1 key-value ('stuname', 'haung')
NO 2 key-value ('class', 12)
'''
day9 集合 、集合操作、集合相关函数
# settle
# the normal type of the elements which is immutable includes integer 、float、string、tuple and so on .
# the noraml type of the mutable elements are list 、dict and so on .
# settle
# elements in the settle are unique . if the element with the same value or mean,it would be only showed once.
langs = {'java','c++','c','python','java',1,2.22}
print(langs,type(langs))
# {'python', 1, 2.22, 'c', 'c++', 'java'} <class 'set'>
# set() 建立集合
a = ' i love python'
x = set(a)
print(x,type(x))
# {'i', 'o', 'y', 't', 'h', 'p', 'n', ' ', 'l', 'e', 'v'} <class 'set'>
# 列表转化为 集合
fruits =['apple','orange','banana','pear','peach','other','apple']
y = set(fruits)
print(y,type(y))
# {'peach', 'orange', 'other', 'pear', 'banana', 'apple'} <class 'set'>
# 字典转化为 集合
info = {'name':'lin','age':16,'age':'lll'}
z = set(info)
print(z)
# {'name', 'age'}
# 字典转化为 集合 只会保留相关的关键字
# 集合的操作
# 交集 : & ==
# 并集 :| !=
# 差集 : - in
# 对称差集 :^ not in
A = {1,2,3,4,5,6}
B = {4,5,6,7,8,9}
both =A & B
all = A | B
A_B = A - B
B_A = B - A
a_b = A ^ B
print(both,type(both)) # {4, 5, 6} <class 'set'>
print(all,type(all)) # {1, 2, 3, 4, 5, 6, 7, 8, 9} <class 'set'>
print(A_B,type(A_B)) # {1, 2, 3} <class 'set'>
print(B_A,type(B_A)) # {8, 9, 7} <class 'set'>
print(a_b,type(a_b)) # {1, 2, 3, 7, 8, 9} <class 'set'>
C = {1,2,3,4,5,6}
c = 4
d = 3
print(A==B) # False
print(A==C) # True
print(A!=C) # False
print(c in A ) # True
print(c in B) # True
print(c not in A ) # False
print(d not in B) # True
# 集合 的 方法
D = {1,2,3,4,5,6,7,8,9}
E = {'a','b','c','d','e'}
# 添加
D.add('6')
print(D) # {1, 2, 3, 4, 5, 6, 7, 8, 9, '6'}
# 复制
F = D.copy()
print(F) # {1, 2, 3, 4, 5, 6, 7, 8, 9, '6'}
# 删除
F.remove('6')
print(F) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
# 删除 存在的元素
F.discard(6)
print(F) # {1, 2, 3, 4, 5, 7, 8, 9}
# 删除 不存在的元素
F.discard('7')
print(F) # {1, 2, 3, 4, 5, 7, 8, 9}
# 删除 随机删除
F.pop()
print(F) # {2, 3, 4, 5, 7, 8, 9}
# 清楚 集合中的所有元素
F.clear()
print(F) # set()
G = {1,2,3}
# 集合的交集 有返回 False 无 返回True
a1 = A.isdisjoint(B)
print(a1) # False
a2 = A.isdisjoint(D)
print(a2) # False
# 一个 集合是否是 另一个集合的子集合
a2 = A.issubset(G)
print(a2) # False A不是 G 的子集合
a3 = G.issubset(A)
print(a3) # True G 是 A 的 子集合
# 一个集合 是否是另一个几个的父集合
a4 = A.issuperset(G)
print(a4) # True A 是G 的父集合
# ret_value =A.intersection_update(B)*
*# B 为 一个至多个集合
A.intersection_update(B,C,D,E,F)
print(A) # set() 返回的是 A 与 B C D E F 的 交集
we= {2,3,4}
you = {4,5,6,7}
we.intersection_update(you)
print(we) # {4} 返回的是 b1 的 交集
# update() A .update(B) 将B 集合加到 A 中
A.update(B)
print(A) # {4, 5, 6, 7, 8, 9}
# difference_update() 删除交集的元素 保存在A 中
H ={4,5,6}
A.difference_update(H)
print(A) # {7, 8, 9}
# 对称差集
A.symmetric_difference(H)
print(A) # {7, 8, 9}
A1 = {4, 5, 6, 7, 8, 9}
print(A1 ^ H) # {7, 8, 9}
A1.symmetric_difference_update(H)
print(A1) # 7, 8, 9}
day10 函数、 参数、引用、函数注意
# coding = utf-8
# 函数 格式
def fun1():
print('hello python')
return
print('c++')
fun1() # hello python
# return 终止函数
# 函数计算两个数的积
def fun2(x,y):
print(x*y)
fun2(2,23) # 46
help(fun2)
# 查看函数的信息
'''
Help on function fun2 in module main:
fun2(x, y)
# return 终止函数
# 函数计算两个数的积
'''
# 函数的参数
#函数参数调用的顺序
def f1(x,y):
print(x,y,x+y)
f1(5,6)
f1(x=6,y=7)
f1('a','b')
'''
5 6 11
6 7 13
a b ab
'''
# 函数的返回值
def divided(x,y):
z = x+y
return z
result = divided(2020,2021)
print(result) # 4041
# 4种典型的函数类型
# 无参数 ,无返回值
def menu():
print(''**10,end = ' ') # *打印十个 **
menu()
*# ***********
# 无参数, 有返回值
def getage():
return 23
age =getage()
print('age = %d'%age) # age = 23
# 有参数, 无返回值
# 有参数, 有返回值
def num_sum(x):
result = 0
i = 1
while i <= x :
result += i
i += 1
return result
result = num_sum(100)
print('1~100 的和为 :%d '%result)
# 1~100 的和为 :5050
# 函数的嵌套调用
def f2():
print('a')
def f3():
f2()
print('b')
f3()
'''
a
b
'''
# 定义函数 ,打印条波浪线
# 打印 N条波浪
def waveline():
print('~'*1)
def n_line(n):
for i in range(n):
waveline()
n_line(10)
def p(x,y,z):
return xyz
def average_value(x,y,z):
return (x+y+z)/3
result = average_value(10,20,20)
print(result) # 16.666666666666668
# 局部变量
def fu1():
x = 2020
print(x)
x = 2021
print(x)
def fu2():
x = 1999
print(x)
fu1()
fu2()
'''
2020
2021
1999
'''
# 全局变量
num = 2021
def fuc1():
num = 1 # 局部变量
print(num)
def fuc2():
print(num)
fuc1()
fuc2()
# 1
# 2021
# 修改 全局变量 global 声明
age = 20
def q1():
global age
print(age) # 20
age =12
print(age) # 12
def q2():
print(age) # 12
print(age) *# 20 *全局变量未修改
q1() # 20 12 对全局变量进行了修改
q2() # 12 全局变量的值为上面的值
print(age) #12 全局变量修改为12
# 使用函数的返回值 、 参数 简单的函数嵌套
def d():
return 2021
def d2(x):
print(x)
result = d()
d2(result) # 2021
# 多return 语句 只执行 一条 return 语句
# 多个返回值的情况
def fun_test(x,y):
a = x/y
b = x // y
if ( a < b):
return a,b
else:
c=[a,b]
d={'all':a,'part':b}
e={a,b}
return c,d,e
print(fun_test(1,4))
print(type(fun_test(1,4)))
# ([0.25, 0], {'all': 0.25, 'part': 0}, {0.25, 0})
# <class 'tuple'> 多个返回值 默认返回为元组
# 函数形参具有默认的值 ,规定在参数列表的最后面 否则报错
def test(name,age,sex="man"):
print("name=%s age=%d sex =%s"%(name,age,sex))
test('lin',18) # name=lin age=18 sex =man
test(name='tao',age=20) # name=tao age=20 sex =man
test(' ',1 ) # name= age=1 sex =man
# def test1(gender = 'man', ne):
# print(ne,gender)
# test1('xiaopai')
# SyntaxError: non-default argument follows default argument
#不定长形参
def test3(args1,args2,args5,args6 = 'lin',args ='man',*args3):
#*默认参数在 *args5 之后 args5 表示为命名的参数 默认为元组
*# *args3 存放命名的参数 如下面是字典
print(args1,'****\n****',args2,'****\n****',args5,'****\n****',args6,'****\n****',args,'****\n****',args3)
help(test3)
test3(11,'c','d',11,a=12,b='ww')
'''
Help on function test3 in module main:
**test3(args1, args2, *args5, args6='lin', args='man', args3)
#****不定长形参
** 11**
** c**
** ('d',11)**
** lin**
** man**
** {'a': 12, 'b': 'ww'}**
'''
# 引用 数值的传递方式
x = 2020
y = x
print(y) #2020
# 使用 id() 看是否为同一个引用
print(id(x)) # 1926280302160
print(id(y)) # 1926280302160
# 同一个引用
x =['a','b','c']
y=x
print(y) #
x.append('d')
print(y) # ['a', 'b', 'c', 'd']
print(x) # ['a', 'b', 'c', 'd']
# x 与 y 的相等了
print(id(x)) # 2085017824584
print(id(y)) # 2085017824584
# 变量 x y 都是存储 关于 某个 单元的 地址的引用
# 可变类型 : 列表 、集合、字典
# 不变类型 : 数字、字符串、元组
# 改变引用的指向的地址
print("****\n****")
def function(x):
x+=x # 运算开辟了新的地址
print(id(x))
return x
x = 20
print(id(x)) # 2428873879304
function(x) # 140732108027952
day11 函数、字典、列表 一个简单的订单 软件
# 简单的商品选购
# 商品列表 存储在数据库中比较好 或者文件之中
product_dict= {
'001':{'name':'****乐事薯片','price':3.5,'des':'****黄瓜味'},
'002':{'name':'****百事可乐','price':2.5,'des':'****无糖零添加'},
'003':{'name':'****旺仔牛奶','price':2.5,'des':'****原味 浓厚奶香'},
'004':{'name':'****士力架','price':4,'des':'****柠檬味威化巧克力'},
'005':{'name':'DOVE****巧克力','price':5,'des':'Do you love me ?'},
'006':{'name':'****老鼠药','price':1.0,'des':'****希望你家有老鼠'},
'007':{'name':'****蟑螂药','price':3.5,'des':'****敢死队 小强'},
}
# 购物清单
list_order = []
# 打印 商品信息
def print_product():
for k,v in product_dict.items():
print("p_id :%d , name :%s ,price :%.3f ,description : %s"%(int(k),v['name'],v['price'],v['des']),end='****\n****')
# create order
def create_order():
while True:
p_id =input('Enter the id of the product : ')
if p_id in product_dict:
break
else :
print('the product is not exist')
p_number = int(input('Enter the number : '))
# one product order
order_single = {'p_id': p_id,'p_number':p_number} # 存储 商品的价格
list_order.append(order_single)
# 结算 函数
def count_order():
print_orders_info()
total_price =get_total_price()
paying(total_price)
# 支付 函数
def paying(total_price):
while True:
money = float(input('total price %.3f \n Enter the price : '%total_price))
if money > total_price :
print('back for %f 元'%(money - total_price))
list_order.clear()
break
else:
print('more money')
# 总 价格 函数
def get_total_price():
total_price = 0
for item in list_order:
product = product_dict[item['p_id']]
total_price += product['price'] * item['p_number']
return total_price
# 打印订单信息
def print_orders_info():
for item in list_order:
product =product_dict[item['p_id']]
print('name :%s , price : %f number :%d ,description : %s' %(product['name'],product['price'],item['p_number'],product['des']),end ='****\n****')
# 购买函数
def buying():
print('Information of the order:',end='****\n****')
# create order
print_product()
create_order()
print('add to the trolley \n ')
# main
def shopping():
while 1 :
item = input('1****、购买 2、结算 3、结束购物 \n****')
if item == '1':
buying()
elif item == '2':
count_order()
elif item == '3':
print('over')
break
else :
print('errors')
continue
shopping()
day12 类的定义、对象、初始默认普通函数
# 面向对象的思想解决问题
# 人 类 一听就懂 人是一类物种
# 外星人类 是另一种 物种
# 子类 父类
# 类 : 名称 、属性、方法
# 简单的 王者荣耀 游戏 案例
# 类的定义
class Game(object): # Game : name of the class of which the first letter is uppered.
# 登录游戏
def login(self):
print('login the game ,print the information of the players')
# m魔方函数 初始化函数
def init(self):
self.id = 2021127002
self.name = 'alibaba'
# 初始化玩家信息 init
def init(self):
players={'p_id':self.id,'p_name':self.name}
for player in players.items():
print(player,end='****\t****')
# 游戏开始
def begin(self): # 行为
print(self)
print('****欢迎来到王者荣耀')
# 游戏结束
def out(self):
i = int(input('1****、out 2、stay '))
if i==1 :
print('out')
elif i==2:
print('stay')
j = int(input('1****、out '))
if j==1:
print('out')
else :
print('again')
else :
print('-----')
# 类的实例化 创建对象
game1 = Game() # 第一局游戏
game1.login() # 开始
print(game1) # <main.Game object at 0x000001EA44D37E80>
#欢迎来到王者荣耀
print(type(game1)) # <main.Game object at 0x000001EA44D37E80>
#<class 'main.Game'>
print(id(game1)) # 2105688686208
game1.init() # ('p_id', 2021127002) ('p_name', 'alibaba')
game1.age =18 # 给对象添加新属性
print('****\n****',type(game1.age))
'''
<class 'int'>
'''
print(id(game1.age))
'''
140732108027248
'''
game1.out()
game2 = Game() # 第二局游戏
game3 = Game() # 第三局游戏
# 有参数的 初始化方法
class Batman(object):
def init(self,name,hp,attack,defence):
self.name = name
self.hp = 100
self.attack = attack
self.defence = defence
def attacked_batman(self):
life_losed = self.attack - self.defence
print('life_losed %d'%life_losed)
return life_losed
def print_info(self):
print('batman_name:%s,batname_hp :%.3f'%(self.name,self.hp))
def str(self): # 按照str 输出
return 'batman_name:%s,batname_hp :%.3f'%(self.name,self.hp)
def del(self): # 默认删除对象 ,释放内存空间 ,默认最后调用
print('%s delete '%self.name)
# 不同的对象
tony = Batman('normal',99,20,10) # 参数的个数一定一样
tom = Batman('super',1000,40,20) # 参数的数值
#不同对象的属性存放的位置
print(id(tony.name)) # 2680363888568
print(id(tom.name)) # 2680217701096
# 同一个对象属性存储的位置
print(id(tony.hp)) # 140732267151280
print(id(tom.hp)) # 140732267151280
# 同一个类的 不同对象,实例方法共享
print(id(tony.attacked_batman())) # life_losed 10
# 140732267148400
print(id(tom.attacked_batman())) #life_losed 20
# 140732267148720
tony.print_info() # batman_name:normal,batname_hp :100.000
tom.print_info() # batman_name:super,batname_hp :100.000
# 注意hp的初始值
tom.hp = 200
tom.print_info() # batman_name:super,batname_hp :200.000
# 总结 : 每一类的实例存放在独立的位置上面
# 同时该位置上的属性、行为的位置也是相互独立的
print(tom) # <main.Batman object at 0x000001BBBC439390>
print(tom) # batman_name:super,batname_hp :200.000 # 有str()才打印,这个,否则答应地址
print(tom.str()) # batman_name:super,batname_hp :200.000
# print(tom.doc()) # batman_name:super,batname_hp :200.000
# 删除对象
# 变量引用对象
jerry = Batman('hero',500,30,14)
jerry1 =jerry
jerry2 =jerry
jerry3 =jerry
del(jerry1)
del(jerry2) # 与他无关,默认函数最后直接调用
'''
normal delete
super delete
hero delete
'''
day13 类的简单应用
烧土豆
class Sweetpotato(object):
def init(self):
self.state = 0
self.method = []
self.cookedString = "****生的"
self.condiments = ['****芝麻']
def str(self):
msg = self.cookedString +'potato'
if len(self.method) > 0:
for item in self.method:
msg += item
if len(self.condiments) > 0:
msg = msg + '****:('
for temp in self.condiments:
msg = msg + temp + ' '
msg = msg.strip(' ')
msg = msg + ')'
return msg
def cook(self,time):
self.state = self.state + time
if self.state > 60:
self.cookedString = '9****分熟 '
elif self.state >30:
self.cookedString = '7****分熟 '
else :
self.cookedString = '5****分熟 '
def addCondiments(self,condiments):
self.condiments.append(condiments)
def allmethod(self,method):
self.method.append(method)
# self.method.remove(method)
potato = Sweetpotato()
print(potato.state)
print(potato.condiments)
print(potato.cookedString)
potato.cook(45)
potato.addCondiments('****番茄酱')
potato.allmethod(' 炒 ')
print(potato.condiments)
print(potato.method)
print(potato)
'''
0
['****芝麻']
生的
['****芝麻', '番茄酱']
[' 炒 ']
7****分熟 potato 炒 :(芝麻 番茄酱)
'''
附赠 :PEP 8 代码规范
day14 继承 、类的属性,get ,set
# 继承
class Person(object):
def init(self):
self.race = 'human'
def str(self):
return 'race = %s'%self.race
# def del(self):
# print('delete successfuly')
class Student(Person): # 子类继承了 父类 Person
pass
s = Person()
print(s)
s1 = Student()
print(s1)
# 继承 默认的属性 方法
# 多继承
class Father(object):
def cook(self):
print('like cooking',end =' \n****')
class Mother(object):
def cook(self):
print('hate cooking',end = '****\n****')
def shop(self):
print('shopping gogoogo****\n****')
class Son(Father,Mother):
pass
son =Son() # like cooking
son.cook() # 默认第一个
print(Son.str) # slot wrapper 'str' of 'object' objects>
print(Son.init) # <slot wrapper 'init' of 'object' objects>
print(Son.mro) # 继承先后
'''
(<class 'main.Son'>,
<class 'main.Father'>,
** <class 'main.Mother'>,**
** <class 'object'>)**
'''
son.shop() # shopping gogoogo 其他方法不影响
# 子类 重写属性 、和同同属性的方法
class Fruit(object):
def int(self):
self.species = 'fruit '
def eat(self):
print('method you choose')
def way(self):
print('father class')
class Vegetable(object):
def __init(self):
self.species = 'vegetable '
def eat(self):
print('ripe')
def cook(self):
print('cooked')
class Both(Fruit,Vegetable):
def int(self):
self.species = 'vegtable '+ 'fruit'
def eat(self):
print('eat by both methods')
tomato = Both()
# print(tomato.self.species)
tomato.eat() # eat by both methods
tomato.cook() # cooked
print(Both.mro)
# (<class 'main.Both'>, <class 'main.Fruit'>, <class 'main.Vegetable'>, <class 'object'>)
class Third(Both): # 多层继承
pass
three = Third()
# print(three.species)
three.cook() # cooked
three.eat() # eat by both methods # 子类 有 则调用子类的方法
three.way() # father class # 子类没有 则会 去父类
# 类的属性
class People(object):
name = 'hello python' # 公有的类属性
_gender = 'man' # 私有的类属性
def init(self):
self.tel = 1234456789
self.id = '00001'
p1 = People()
p1.name = 'c++'
print(p1.name) # c++
p1.age = 30 # 实例属性
print(p1.age) # 30
print(p1._gender) # man
print(p1.tel) # 1234456789
print(p1.id) # 00001
print(People.name) # hello python
print(People._gender) # man
# print(People.tel) # AttributeError: type object 'People' has no attribute 'tel'
# print(People.id) # AttributeError: type object 'People' has no attribute 'id'
# 实例修改 只是实例的属性,不改变类的属性
del p1.age # 删除实例属性
# print(p1.age) # AttributeError: 'People' object has no attribute 'age'
del p1.name
print(p1.name) # hello python
print(People.name) # hello python 共有属性无法删除
del p1.tel # 只会删除实例中的属性 不会删除类的属性
# print(p1.tel) # AttributeError: 'People' object has no attribute 'tel'
p2 = People()
print(p2.tel) # 1234456789 # 只会删除实例中的属性 不会删除类的属性
print(People.bases) # (<class 'object'>,)
print(People.mro) # (<class 'main.People'>, <class 'object'>)
print(People.class) # <class 'type'>
print(People.mro) # (<class 'main.People'>, <class 'object'>)
# 对于类的属性进行修改
class Teacher(object):
professional = 'teacher'
@classmethod
# 类方法,用classmethod 进行标识,能够让实例对象和 类的对象进行访问
def get_add(cls):
return cls.professional
def age(self):
return 11
t1 = Teacher()
print(t1.get_add()) # teacher
print(Teacher.get_add()) #teacher
print(t1.age()) # 11
# print(Teacher.self.age())
# AttributeError: type object 'Teacher' has no attribute 'self'
# 对类属性进行修改
class Leader(object):
name = 'leader'
age = 100
sex = 'woman'
@staticmethod
def get_age(cls,age):
return age
@staticmethod
def get_sex(cls):
return 'man'
@classmethod
def get_name(cls):
return cls.name
@classmethod
def set_name(cls,name):
cls.name = name
l1 = Leader()
print(l1.get_name()) # leader
print(Leader.get_name()) # leader
l1.set_name('vice leader')
print(l1.get_name()) # vice leader
print(Leader.get_name()) # vice leader
print(l1.get_age(Leader,99)) # 99 必须要有cls 参数可以为类 、实例、对象
print(l1.get_age(l1,99)) # 99 如果没有cls 系统无法识别是哪一个
print(Leader.get_sex(l1)) # man
print(Leader.get_sex(Leader)) # man
print(Leader.sex) # woman
# new 和 init
class A(object):
def init(self):
self.name = 'in' # 可以进行初始化
print(self.name)
print('init')
print(self)
def new(cls):
print('new')
print(object.new(cls) )
return object.new(cls) # 必须有返回值
A()
'''
new
<main.A object at 0x00000269AD234438>
in
init
<main.A object at 0x00000269AD234438>
'''
# 先执行 new ,之后 init ,self 是 new的实例 ,它是 init 的参数
day15 文件 文件操作
# 文件的操作
# 文件的打开 文件、二进制文件
# 文件的读取的方式
# r , w, a, r++ , w++ ,
# rb , wb , ab , a+ ,a+ , rb+ , wb+ , ab+
import os # 文件处理模块
file = open('day15.txt', 'r')
if file != EOFError:
print('open successfully')
else:
print('defeated')
# file.write('\n I love python ,hello c++') # 写入数据 write()
data = file.read(6) # read() 最多读取 6 个 数据
print(data)
da1 = file.read() # 从上次读取的位置继续读取
print(da1)
da2 = file.readlines()
print(type(da2))
print(da2)
file.close()
# old file copy to the new file
old_file_name = input('The name : ') + '.txt'
old_file = open(old_file_name,'rb')
name_num = old_file_name.rfind('.') # suffix_num
if name_num > 0:
name_suffix = old_file_name[name_num]
new_file_name = old_file_name[:name_num] + '[****副本] '+ name_suffix
# new file
new_file = open(new_file_name,'wb')
for line in old_file.readlines():
new_file.write(line)
old_file.close()
new_file.close()
os.mkdir('****文档day_15') # 创建文件夹
print(os.getcwd()) # D:\pycharm\file\day_01 获取当前目录
print(os.chdir('../')) # None 改变默认目录
print(os.listdir('./'))
# ['basic', 'day_01', 'pca', 'PCA_for_date', 'SVD_for_image']
# 获取目录列表
# os.rmdir('D:/pycharm/file/day_01/day_15.py/文档day_15')
os.os.remove('old.txt') # 删除 remove() new.txt == path
os.os.remove('new.txt') # 删除 remove() new.txt == path
file1 = open('new.txt','wb')
print(file1) # <_io.BufferedWriter name='new.txt'>
file1.close()
file2 = open('old.txt','wb')
print(file2) # <_io.BufferedWriter name='old.txt'>
file2.close()
os.rename('new.txt','file.txt')
print(file1) # <_io.BufferedWriter name='new.txt'>
day16 文件项目
# coding = utf-8
# 简单的图书管理系统
# 定义图书列表 : 书名 、 单价、是否借出
books = [['****追风筝的人',19,0],
['****穆斯林的葬礼',29,1],
['****盗墓笔记',8,1]]
# 菜单
def menu():
while True:
print('****\n****功能模块')
print('1.****查询书籍',end=' ')
print('2.****增加书籍',end=' ')
print('3.****借出书籍',end='****\n****')
print('4.****归还书籍',end=' ')
print('5.****保存文件',end=' ')
print('6.****退出系统',end='****\n****')
choose = int(input('****请选择: '))
if choose == 1:
allbook()
elif choose == 2:
addbook()
elif choose == 3:
brrowbook()
elif choose == 4:
returnbook()
elif choose == 5:
save_file()
elif choose == 6:
print('over****\n****')
break
else:
break
# 查询所有书籍
def allbook():
print('****所有书籍 :书名 、 单价、是否借出')
count = 1
for book in books:
print([count], end=' ')
for b in book:
print(b, end=' ')
print('')
count += 1
# 检验书籍
def checkbook(name):
for book in books:
if book[0] == name:
print(book)
return book
else:
print('None')
return None
# 增加书籍
def addbook():
name = input('Enter the name')
result = checkbook(name)
if result != None:
print('book existed')
else:
price = int(input('Enter the price'))
new_book = [name,price,1]
books.append(new_book)
print('successfully')
print(new_book)
return new_book
# 借出书籍
def brrowbook():
name = input('Enter the name of the book ')
temp = checkbook(name)
if temp != None:
if temp[2] == '0':
print('book brrowed')
else:
days = int(input('Enter brrowed days '))
temp[2] = 0
print('brrowed %d days ,money %d yuan'%(days,0.5*days))
else:
print('---------')
# 归还书籍
def returnbook():
name =input('Enter the name')
result = checkbook(name)
if result == None:
print('book is not existed')
else:
if result[2] == 1:
print('book does not existed')
else:
days = int(input('days '))
y_money = result[2]*days
print('****借出%d 天,金额 %d 元'%(days,y_money))
while True:
money= int(input('price'))
if money < y_money:
print('more ')
else:
break
if money >= y_money:
print('****找零:%d'%(money -y_money))
result[2] == 1
print('successfully')
# 保存文件
def save_file():
f = open('book_info.txt','w')
f.write(str(books))
f.close()
print('finished')
if name == 'main':
menu()
day17 异常、模块 、导入、测试
# coding = utf-8
#异常、模块
# open('ahdu.txt','r')
# FileNotFoundError: [Errno 2] No such file or directory: 'ahdu.txt'
# 以上为异常 在控制台会报错
try: # 获取异常 try
open('adhj.txt','r')
except FileNotFoundError: #异常代码 处理关键字 except
print('errors')
pass
# errors
# except 处理相应的错误 上面的是处理 FileNoFoundError 文件没有发现的错误
# 可以捕获多个错误
try:
open('abc.txt','r')
print(a) # 没有定义 ,nameerror错误
except(FileNotFoundError,NameError):
print('hello python') #hello python
pass
# 不会报错
try:
open('a.txt','r')
print(a)
except(FileNotFoundError,NameError) as e:
print(e)
# [Errno 2] No such file or directory: 'a.txt'
# 只会出现一个问题 本来只为两个问题
try:
open('b.txt','r')
print(b)
except Exception as f:
print(f)
pass
# [Errno 2] No such file or directory: 'b.txt'
# 第一个就会截止
# try...except...else...finally..
# finally 无论最后的结果,最后的都会执行finally...
# 异常的传递
import time
try:
file = open('old.txt','r')
try:
while True:
data = file.readline() # 按照每行读取数据
if(len(data)) == 0:
print('****没有数据')
break
#time.sleep(5) # 停留 5 秒
print(data) # 打印 old.txt 中的数据
except Exception as e:
print(e)
else:
print('No errors') # No errors
finally:
file.close()
print('closed successfully') # closed successfully
except:
print('****没有文件')
pass
# 函数嵌套调用中
def func1():
print(num) # NameError
def func2():
func1()
def func3():
try:
func1()
except Exception as e:
print(e) # name 'num' is not define
print('func3')
func3()
# 抛出自定义的异常
class TestException(Exception):
def init(self,length,least):
self.length = length
self.least = least
def main(self):
try:
n =input('Enter ')
if int(n) < 9:
raise TestException(int(n),9) # raise 引发错误
except TestException as e:
print('TestException : input %d ,at least %d'%(e.length,e.least))
else:
print('****没有异常')
test = TestException(1,8) # 至少 与 至多
test.main()
# 没有异常 Enter 11
# TestException : input 7 ,at least 9
# TestException : input 4 ,at least 9
# 异常处理中抛出异常
class Test(object):
def init(self,on_off):
self.on_off = on_off
def oper(self,x,y):
try:
return x/y
except Exception as e:
if self.on_off:
print('****捕获到异常')
print(e)
else:
# raise # 重新触发异常
print('-----over-----')
t1 = Test(True)
t1.oper(5,0) # division by zero
t1.on_off = False
t1.oper(55,0) # -----over-----
# 模块介绍
# 模块 自定义模块
# 导入模块
import math # *导入 math 模块 == from math import **
from math import * # 导入 math 模块
from math import sqrt # 导入 math模块中的sqrt函数
# 定位模块
# 默认路径 /user/local/lib/Python
# 自定义模块
'''
def add(x,y):
return x+y
# 调试模块
result = add(10,20)
print(result) # 30
# 选择性调试
if name == 'main':
result = add(20, 20)
print(result) # 30
'''
import add # 导入自定义的 add.py 模块 中的所有函数
result = add.add(20,30)
print(result) # 50 # 30 为测试的数据
# 没有选择测试的内容
# if name == 'main': 的部分没有 显示出来 40
day18 if、while 基础 内容
# coding = utf-8
# 简单的囚徒困境
# 两个犯人, 1、 都认罪 ,10年 ;2、一人认罪一人不认 认罪1年,抵赖 20 年;3、都抵赖 ,3 年;
count = 0
while count < 4:
a = int(input('A :****认罪 1 ,抵赖 0 : '))
b = int(input('B :****认罪 1 ,抵赖 0 : '))
if a == 1 and b ==1:
result = 10
print('A:%d y B:%d y'%(result,result))
elif a==1 and b ==0:
result1 = 1
result2 = 20
print('A:%d y B:%d y'%(result1,result2))
elif a==0 and b ==1:
result1 = 20
result2 = 1
print('A:%d y B:%d y'%(result1,result2))
else:
result = 3
print('A:%d y B:%d y'%(result,result))
count += 1
# 一般的内容为四个的情况比较多 犯罪的同伙越多越不稳定
# 猜拳游戏
# 使用 随机数
import random
punches = ['****石头','****剪刀','****布']
computer_choice =random.choice(punches)
user ={1:'****石头',2:'****剪刀',3:'****布'}
user_choice = None # 类型布确定
while user_choice not in user.keys():
user_choice = int(input('1****、石头 2、剪刀 3、布'))
print('computer_choice : %s user_choice :%s'%(computer_choice,user[user_choice]),end='****\n****')
if computer_choice == user[user_choice] :
print('****平局')
elif (computer_choice == '****石头' and user[user_choice] == '****剪刀') or (computer_choice == '****布' and user[user_choice] == '****石头') or (computer_choice == '****剪刀' and user[user_choice] == '****布'):
print('computer wins')
else:
print('user wins')
day19 简单模块生成二维码 手写模块
# 动态 二维码
# install myqr 模块
import MyQR
from MyQR import myqr
myqr.run(
words ='http://www.waysto.work/',# 扫码后显示的内容(链接或者其他内容)
version = 5,# 容错率
level = 'H',# L\M\Q\H 纠正水平 一次从左到右升高
picture = 'buhaore****惹惹.jpg', # 图片所在目录
colorized = True,# 黑白(False)或者 彩色(True)
contrast = 1.0, # 对比度 默认1.0 原始图片
brightness = 1.0,# 用来调节图片的亮度
save_name = 'python1.png', # 图片格式 .jpg .png .bmp .gif
)
print('finished') # finished
day20 类的基础
# 类的创建 调用
# 一个系统 录入信息和 打印信息
# Key Performance Indicator :KPI
#coding = utf-8
class System(object):
name = ''
salary = 0
kpi = 0
# 修改原始的员工 属性
@classmethod
def record(cls,name,salary,kpi):
cls.name = name
cls.salary = salary
cls.kpi = kpi
# 显示员工属性的方法
@classmethod
def print_cls(cls):
print(cls.name+' '+str(cls.salary)+' '+str(cls.kpi))
@staticmethod
def kpi_test(name,kpi):
if kpi >85:
print(name+'good student',end='****\n****')
elif kpi <=85 and kpi >=75:
print(name +'ok student****\n****')
else:
print(name+'hard work \n****')
@classmethod
def kpi_name(cls):
if cls.kpi > 85:
print(cls.name + 'good student', end='****\n****')
elif cls.kpi <= 85 and cls.kpi >= 75:
print(cls.name + 'ok student****\n****')
else:
print(cls.name + 'hard work \n****')
# 员工 check
@classmethod
def check(cls):
try:
file = open('stulist.txt', 'r') # 文件读取会产生乱码的问题
try:
stulist = file.readlines()
print('****文件中的内容')
# i = 0
for stu in stulist:
print(stu,end='')
# stulist[i] = stu.splitlines()
# i += 1
print(stulist) # ['bob\n', 'tom\n', 'jerry\n']
finally:
file.close()
except Exception as e:
print(e,end=' ')
if cls.name not in stulist:
print('student 不存在 学生名单之中')
return 0
else:
print('****录入成功')
return 1
''' 测试用例
System.record('****小明',8080,89)
System.print_cls() # 小明 8080 89
hr = System()
hr.record('****红红',9090,90)
hr.print_cls() # 红红 9090 90
hr.name ='lin'
hr.record(hr.name,9090,90)
hr.print_cls() # lin 9090 90
'''
'''
System.record('****小明',8080,89)
System.print_cls() # 小明 8080 89
System.kpi_test('****小明',89) #静态方法的实例对象 引用静态方法 # 小明good student
System.kpi_name() # 小明good student
'''
'''
System.record('****小明',8080,89)
System.print_cls() # 小明 8080 89
System.check()
'''
def order(System): # object 为参数
System.record(System.name,System.salary,System.kpi)
System.print_cls()
if System.check() == 1:
System.kpi_name()
else:
print('error \n****')
if name == 'main':
hr = System()
hr.record('****红红', 9090, 90)
order(hr)
hrr =System()
hrr.record('tom****\n****',10000,90) # tom\n 没办法
order(hr)
'''
红红 9090 90
文件中的内容
bob
tom
jerry
student 不存在 学生名单之中
error
tom
10000 90
文件中的内容
bob
tom
jerry
录入成功
tom
good student
'''
存在的问题:1、 字符集 2、文件读取数据过程中的细节处理
# new stulist.txt
day21 类的继承
# 类的继承的项目
# 问卷系统
class Survey(object):
count = 1
@classmethod
def init(cls,question):
cls.question = question
cls.response = {}
def show_question(self):
print(self.question,end='****\n****')
@classmethod
def store_response(cls,new_response):
cls.response[cls.count]= new_response
cls.count +=1
print(cls.response.items())
'''
food = Survey('****你最喜欢的食物')
food.show_question()
count =0
while count <2:
answer = input('answer : ')
food.store_response(answer)
count +=1
######
test
你最喜欢的食物
answer : apple
dict_items([(1, 'apple')])
answer : pear
dict_items([(1, 'apple'), (2, 'pear')])
'''
'''
class Plus(Survey):
pass
home =Plus('****你的家乡')
home.show_question()
count =0
while count <2:
answer = input('answer : ')
home.store_response(answer)
count +=1
------------
你的家乡
answer : 安徽
dict_items([(1, '****安徽')])
answer : 河北
dict_items([(1, '****安徽'), (2, '河北')])
'''
class Plus(Survey):
question_list =['1****、你的名字','2****、你的年龄','3****、你的学历']
count =0
def init(self):
self.response = {}
for item in self.question_list:
print(item,end='****\n****')
def store_response(self,new_response):
self.response[self.question_list[self.count]] = new_response
self.count +=1
return self.response
sets = Plus()
count =0
while count <len(sets.question_list):
answer = input('%d : answer : ' %(count+1))
a= sets.store_response(answer)
count +=1
print(a.items())
'''
1****、你的名字
2****、你的年龄
3****、你的学历
1 : answer : 林
2 : answer : 12
3 : answer : 本科
dict_items([('1****、你的名字', '林'), ('2、你的年龄', '12'), ('3、你的学历', '本科')]
'''
第二部分
网友评论