Python入门练习

Python入门

字符串

转义字符

  • \

    • 示例
print('Jerry\'s favorite book is Red river')

Jerry's favorite book is Red river

原始字符串

  • r

    • 在字符串开始的引号外面添加r可以忽略转义字符

      • 示例
>>> print(r'Jerry\'s favorite book is Red river')
Jerry\'s favorite book is Red river
>>> print('Jerry\'s favorite book is Red river')
Jerry's favorite book is Red river
>>> 

多行字符串

  • ‘’’ ‘’’

    • 使用三重引号时,代码块缩进规则不适用,输出格式于引号内格式一致

多行注释

  • “”" “”"

    • 使用三重双引号实现多行注释

下标和切片

  • 访问字符串指定位置字符或指定范围字符

字符串存在检测

  • in
    not in

常用方法

  • isX

    • islower()

      • 字母小写检测
    • isupper()

      • 字母大写检测
    • isalpha()

      • 字符串只包含字母且非空
    • isalnum()

      • 字符串只包含字母和数字且非空
    • isdecimal()

      • 字符串只包含数字且非空
    • isspace()

      • 字符串只包含空格、制表符和换行符且非空
    • istitle()

      • 字符串仅包含以大写字母开头,后面全是小写字母的单词
  • lower()

    • 将字符串中所有字母小写
  • upper()

    • 将字符串中所有字母大写
  • join()

    • 将字符串列表连接成为字符串

      • ‘,’.join(list_name)
        前面的连接符号逗号可以换成其它的

        • 示例
>>> test = ['my','name','is','Han meimei']
>>>> ' '.join(test)
'my name is Han meimei'
  • split()

    • 将字符串分割为列表

      • ’String’.split()
        默认使用空格分隔,如果需要传入实参用来作为分隔符号,例如:‘2020/12/22’.split(’/’)

        • 示例
 >>> '2020/12/22'.split('/')
['2020', '12', '22']
  • 对齐

    • 接收两个参数,第一个指定长度,第二个指定填充字符

      • rjust()

        • 右对齐,默认通过插入空格对其文本,如果需要使用其它的填充符号可以传入符号

          • 示例
>>> 'test'.rjust(10)
'      test'
	- ljust()

		- 左对齐

			- 示例
  >>> 'test'.ljust(10,'-')
  >'test------'
	- center()

		- 居中对齐

			- 示例
 >>> 'test'.center(10,'#')
 '###test###'
  • 删去空白字符

    • 默认删除空白字符(空格、制表符和换行符)
      如果需要有一个可选参数,指定两端要删除的字符合集

      • strip()

        • 删除两边

          • 如果指定了删除的字符合集,其中每个字符的顺序无关

            • 示例
>>> test = 'niceOkwangnicekOniceOOkncie'
>>> test.strip('niceOk')
'wang'
>>> test
'niceOkwangnicekOniceOOkncie'
>>> test.strip('kOicen')
'wang'
	- lstrip()

		- 删除左边

	- rstrip()

		- 删除右边

列表

定义:[]表示,以逗号分隔元素

示例:fruit = [“apple”,“banana”,“pear”]

访问:通过索引访问;

注意:索引值从0~n-1

操作

  • 访问

    • 1.使用索引访问

      • 示例

        示例:

 >>> test = ['a','c','d','e','b']
>>> test[1]
'c'
- 2.使用循环遍历元素

	- 示例

	  示例:
>>> for elem in test:	
print(elem,end=' ')
a c d e b 
  • 创建

    • 1.创建数字列表

      • 使用range(begin,end,step)
        注意:数据域左闭右开

        • 示例

          示例:

 >>> for i in range(1,11):
		print(i,end=' ')
			  
1 2 3 4 5 6 7 8 9 10 
- 2.列表解析

	- 快速生成指定数据集合的列表

列表名 = [value的表达式 for value in range(1,11)]

		- 示例

		  示例:
>>> test = [x**2 for x in range(1,11)]
>>> test
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
  • 修改

    • 通过索引修改:

      例如:
      fruit[1] = “watermelon”
      则此时
      fruit = [“apple”,“watermelon”,“pear”]

  • 添加

    • 1.在末尾添加
      append()

      • fruit.append(‘value’)

        示例:
        fruit.append(‘peach’)

    • 2.在指定位置添加
      insert()

      • 使用insert(pos,‘value’)

        示例:
        fruit.insert(1,‘test’)

  • 查找

    • 使用index()返回查找元素的下标,如果未找到提示错误

      • 示例
>>> cat = ['Tom','black','fat']
>>> cat.index('black')
1
>>> cat.index('not_in_test')
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
cat.index('not_in_test')
ValueError: 'not_in_test' is not in list
>>> 
  • 多重赋值

    • 用列表中多个元素同时给不同变量赋值

      • 示例
>>> cat = ['Tom','black','fat']
>>> name,color,size = cat
>>> name
'Tom'
>>> color
'black'
>>> size
'fat'
>>> 
  • 删除

    • 1.使用del

      • 使用条件,知道要删除的元素的位置

        示例:
        del fruit[1]

    • 2.使用pop()

      • 如果希望在删除元素同时能够使用该删除元素,可使用pop()

      • 默认弹出列表末尾的值

        例如:
        test = [‘a’,‘b’,‘c’,‘d’]
        test.pop()
        则此时 test = [‘a’,‘b’,‘c’]

      • 要弹出指定位置的值,需要添加元素的索引

        例如:
        test = [‘a’,‘b’,‘c’,‘d’]
        test.pop(1)
        则此时 test = [‘a’,‘c’,‘d’]

    • 3.使用remove()

      • 根据元素值删除

        例如:
        test = [‘a’,‘b’,‘c’]
        test.remove(‘b’)
        则此时 test = [‘a’,‘c’]

  • 切片

    • 用于访问列表中的一部分元素

      • 使用说明:
        test = [1,3,5,7,9]
        test[0:3]可以切去前三个元素
        test[1:3]可以切取第2、3两个元素
        test[:3] 等价于test[0:3]
        test[-3:]可以切取后三个元素

        • 示例

          示例:

>>> test = [1,3,5,7,9]
>>> test[0:3]
[1, 3, 5]
>>> test[1:3]
[3, 5]
>>> test[:3]
[1, 3, 5]
>>> test[-3:]
[5, 7, 9]

  • 复制列表

    • 使用包含整个列表的切片[:]

      • 示例

        示例:

>>> test = [1,3,5,7,9]
>>> copylist = test[:]
>>> test
[1, 3, 5, 7, 9]
>>> copylist
[1, 3, 5, 7, 9]
>>> copylist.append(11)
>>> test
[1, 3, 5, 7, 9]
>>> copylist
[1, 3, 5, 7, 9, 11]
- copy()

	- copy.copy(list_name)

		- 示例
>>> import copy
>>> test = [x for x in range(5)]
>>> test
[0, 1, 2, 3, 4]
>>> copy_test = copy.copy(test)
>>> copy_test
[0, 1, 2, 3, 4]
>>> copy_test[1] = 6
>>> copy_test
[0, 6, 2, 3, 4]
>>> test
[0, 1, 2, 3, 4]
- deepcopy()

	- 如果复制的列表中还有其它的列表,那么使用copy.deepcopy(list_name)来代替

		- 示例
>>> users = [['wang','zhang','li'],[24,26,33],['M','F','M']]
>>> deepcopy_users = copy.deepcopy(users)
>>> deepcopy_users
[['wang', 'zhang', 'li'], [24, 26, 33], ['M', 'F', 'M']]
>>> name,age,sex = deepcopy_users
>>> name
['wang', 'zhang', 'li']
>>> age
[24, 26, 33]
>>> sex
['M', 'F', 'M']
  • 排序

    • 使用sort()永久性排序

      • 1.按字母顺序

        • 示例

          示例:

>>> test = ['a','c','d','e','b']
>>> test.sort()
>>> test
['a', 'b', 'c', 'd', 'e']

	- 2.按字母逆序

		- 示例

		  示例:
>>> test = ['a','c','d','e','b']
>>> test.sort(reverse = True)
>>> test
['e', 'd', 'c', 'b', 'a']
- 使用sorted()临时排序

	- 该方法不影响原来的列表顺序

		- 示例

		  示例:
>>> test = ['a','c','d','e','b']
>>> sorted(test)
['a', 'b', 'c', 'd', 'e']
>>> test
['a', 'c', 'd', 'e', 'b']
  • 同时该方法也支持逆序排序
>>> sorted(test,reverse=True)
['e', 'd', 'c', 'b', 'a']
>>> test
['a', 'c', 'd', 'e', 'b']
  • 反转

    • 使用reverse()

      • 示例:
>>> test = ['a','c','d','e','b']
>>> test.reverse()
>>> test
['b', 'e', 'd', 'c', 'a']
  • 常用简单函数

    • 长度

      • 使用len()

        • 示例:
>>> test = ['a','c','d','e','b']
>>> len(test)
5
- 最大值

	- 使用max()

		- 示例:
>>> test
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> max(test)
100
- 最小值

	- 使用min()

		- 示例:
>>> test
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> min(test)
1
- 求和

	- 使用sum()

		- 示例:
>>> test
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> sum(test)
385

元组

定义

  • ( )
    注意:元组元素不允许修改

如果只有一个元素,则需要在第一个元素后面使用一个逗号(,)指明这是一个元组类型

  • 示例
>>> test = ('tuple_test')
>>> type(test)
<class 'str'>
>>> test2 = ('tuple_test',)
>>> type(test2)
<class 'tuple'>
>>> 

字典

定义

  • { }
    注意:内容由键-值对组成(key:value)

创建字典

  • test = {}

添加键值对

  • 示例
>>> test['color'] = 'green'
>>> test['size'] = 25
>>> test
{'color': 'green', 'size': 25}

修改字典元素值

  • 示例
>>> test['color'] = 'black'
>>> test
{'color': 'black', 'size': 25}

删除字典元素

  • 使用 del
    需要指明字典名和要删除的键

    • 示例
>>> del test['color']
>>> test
{'size': 25}

遍历字典

  • 同时使用键值

    • for key,value in dict_name.items():
      print(“key:”+key)
      pirnt(“value:”+value)
      注意:
      其中key、value分表用于存储键和值
      items()方法返回键值对列表

      • 示例

        示例:

>>> age = {'wang':24,'zhang':23,'li':25,'sun':27}
>>> for k,v in age.items():
		print(k+':'+str(v))

	
wang:24
zhang:23
li:25
sun:27

  • 只使用键

    • for key in dict_name.keys():

      • 示例:
>>> age = {'wang':24,'zhang':23,'li':25,'sun':27}
>>> for name in age.keys():
		print(name)

	
wang
zhang
li
sun
  • 只使用值

    • for value in dict_name.values():

      • 示例:
>>> age = {'wang':24,'zhang':23,'li':25,'sun':27}
>>> for age in age.values():
		print(age)

	
24
23
25
27
  • 按字母顺序遍历结果

    • for key in sorted(dict_name.keys()):

      • 示例

        示例:

>>> age = {'wang':24,'zhang':23,'li':25,'sun':27}
>>> for name in sorted(age.keys()):
		print(name)


li
sun
wang
zhang

检查字典中是否存在键或值

  • get(),检查键存在,同时不修改原来的字典

    • 接受两个参数,第一个是键,第二个是如果键不存在返回的备用值

      • 示例
>>> test = {'name':'Jerry','age':19}
>>> print(test['name']+' is '+str(test['age'])+' years old and is '+test.get('married','not_married'))
Jerry is 19 years old and is not_married
>>> test
{'name': 'Jerry', 'age': 19}
  • setdeault(),检查键存在,同时如果键不存在将默认的键值添加到字典中

    • 接收两个参数,第一个是要检查的键,第二个是如果键不存在时使用的默认键值

      • 示例
>>> test = {'name':'Jerry','age':19}
>>> test.setdefault('married','not_married')
'not_married'
>>> test
{'name': 'Jerry', 'age': 19, 'married': 'not_married'}
>>> 

嵌套

  • 字典中存储列表

    • 示例:
>>> test={}
>>> test['favorate_foods'] = ['apple','banana','cake']
>>> test
{'favorate_foods': ['apple', 'banana', 'cake']}

  • 列表中存储字典

    • 示例

      示例:

>>> zhang = {'age':18,'sex':'female'}
>>> wang = {'age':20,'sex':'female'}
>>> li = {'age':24,'sex':'male'}
>>> info = [zhang,wang,li]
>>> info
[{'age': 18, 'sex': 'female'}, {'age': 20, 'sex': 'female'}, {'age': 24, 'sex': 'male'}]
>>> for i in info:
		print(i)


{'age': 18, 'sex': 'female'}
{'age': 20, 'sex': 'female'}
{'age': 24, 'sex': 'male'}
>>> 
  • 字典中存储字典

    • 示例

      示例:

>>> info = {
		'wang':{
		'age':18,
		'sex':'male'
		},
		'zhang':{
		'age':20,
		'sex':'female'
		}
		}
>>> info
{'wang': {'age': 18, 'sex': 'male'}, 'zhang': {'age': 20, 'sex': 'female'}}
- 遍历

	- 示例

	  示例:
>>> for name,user_info in info.items():
		print(name)
	   print('age:'+str(user_info['age']))
	   print('sex:'+user_info['sex'])
	   print('')
	  
	   
wang
age:18
sex:male

zhang
age:20
sex:female

漂亮打印字典键值对

  • pprint

    • 先导入 import pprint
      使用: pprint.pprint(dict_name)

      • 示例
import pprint
# 统计各个字符出现次数

test = 'This is a test message for counting times of every character!'
count = {}
for ch in test:
    count.setdefault(ch,0)
    count[ch] = count[ch]+1

print('Print with pprint()')
pprint.pprint(count)
print('-------------------------\nPrint with print()')
print(count)
Print with pprint()
{' ': 10,
 '!': 1,
 'T': 1,
 'a': 4,
 'c': 3,
 'e': 7,
 'f': 2,
 'g': 2,
 'h': 2,
 'i': 4,
 'm': 2,
 'n': 2,
 'o': 3,
 'r': 4,
 's': 6,
 't': 5,
 'u': 1,
 'v': 1,
 'y': 1}
-------------------------
Print with print()
{'T': 1, 'h': 2, 'i': 4, 's': 6, ' ': 10, 'a': 4, 't': 5, 'e': 7, 'm': 2, 'g': 2, 'f': 2, 'o': 3, 'r': 4, 'c': 3, 'u': 1, 'n': 2, 'v': 1, 'y': 1, '!': 1}

模式匹配&正则表达式

常见字符分类

正则表达式查找文本模式

  • 创建正则表达式对象

    • 1.导入re模块
    • 2.向re.compile()传入一个字符串值,表示正则表达式,它将返回一个Regex对象
  • 匹配Regex对象

    • 1.向Regex对象的 search() 方法传入想要查找的字符串。它返回一个Match对象
    • 2.调用Match对象的 group() 方法,返回实际匹配的字符串
  • 示例

>>> import re
>>> testReg = re.compile(r'\d{3}-\d{3}-\d{4}')
>>> testSearch = testReg.search('There is a test phone number 234-778-9840')
>>> testMatch = testSearch.group()
>>> testMatch
'234-778-9840'

正则表达式匹配更多模式

  • 1.利用括号分组

    • 通过使用括号()将匹配项分离,可以匹配指定部分的内容
      注意:group()传入参数为0或者不传入参数将匹配整个文本
    • 例如想要获取电话号码224-768-9980中的各部分号码:224、768、9980
>>> import re
>>> testReg = re.compile(r'(\d{3})-(\d{3})-(\d{4})')
>>> testSearch = testReg.search('A test phone number is 224-768-9980')
>>> for i in range(4):
print(testSearch.group(i))


224-768-9980
224
768
9980
>>> 
  • 2.使用管道匹配多个分组

    • 通过使用管道符 | 来匹配多个表达式中的一个
      同时可以使用findall()来找到所有匹配项
>>> import re
>>> testReg = re.compile(r'Tom|Jerry')
>>> testSearch = testReg.search('Tom & Jerry is a famous cartoon')
>>> testMatch = testSearch.group()
>>> testMatch
'Tom'
>>> testFindall = testReg.findall('Tom & Jerry is a famous cartoon')
>>> testFindall
['Tom', 'Jerry']
- 如果多个匹配项有相同的前缀或其他相同部分,可以将不同之处放在括号内,这样相同部分只需指定一次
>>> import re
>>> testReg = re.compile(r'test(1|2|3|4)')
>>> testSearch = testReg.search('test1 test2 test3 and test4 are necessary')
>>> testMatch = testSearch.group()
>>> testMatch
'test1'
>>> testSearch.group(1)
'1'
>>> testReg.findall('test1 test2 test3 and test4 are necessary')
['1', '2', '3', '4']

数据可视化

matplotlib

  • 一个制作图表的工具包

    • 设置标题

      • plt.title(“title_name”,fontsize=15)
    • 修改标签

      • 横向标签

        • plt.xlabel(“label_name”,fontsize=15)
      • 纵向标签

        • plt.ylabel(“label_name”,fontsize=15)
    • 设置刻度标记大小

      • plt.tick_params(axis=‘both’,labelsize=14)
    • 校正图形

      • 向plot()提供一系列数字时,默认第一个数据点对应的x坐标为0,为了正确表示图形关系,可以给plot()同时提供输入值和输出值

        • 示例
import matplotlib.pyplot as plt
 
 # 输入值(x)
 values = [x for x in range(1,6)]
 # 输出值(y)
 squares = [1,4,9,16,25]
 # 将列表值传递给绘图函数plot(),其中values指示x,squares指示y,linewidth指定线条粗细
 plt.plot(values,squares,linewidth=3)
 # 指示图形标题及字体大小
 plt.title('Square Numbers',fontsize=15)
 # 指定x坐标名称及字体大小
 plt.xlabel('value',fontsize=14)
 # 指定y坐标及字体大小
 plt.ylabel('square of value',fontsize=14)
 # 指定刻度标记大小
 plt.tick_params(axis='both',labelsize=14)
 # 打开matplotlib查看器,显示绘制的图形
 plt.show()
 
  • 绘制简单折线图

    • 示例

      使用列表中的平方数序列绘制折线图

import matplotlib.pyplot as plt

squares = [1,4,9,16,25]
plt.plot(squares)
plt.show()
  • 绘制散点图

    • scatter()

      • 接收一对x、y坐标,在指定位置绘制一个点

        • plt.scatter(2,4)

        • 设置绘制时点的尺寸

          • plt.scatter(2,4,s=200)
        • 设置标题

          • plt.title(“title_name”,fontsize=15)
        • 修改标签

          • 横向标签

            • plt.xlabel(“label_name”,fontsize=15)
          • 纵向标签

            • plt.ylabel(“label_name”,fontsize=15)
        • 设置刻度标记大小

          • plt.tick_params(axis=‘both’,which=‘major’,labelsize=14)
      • 绘制一系列点,分别传递包含x、y值的列表

        • 示例
# 输入值(x)
values = [x for x in range(1,6)]
# 输出值(y)
squares = [1,4,9,16,25]
plt.scatter(values,squares,s=30)

	- 设置坐标轴取值范围

		- plt.axis([0,100,0,10000])

前两个为x轴的范围
后两个为y轴的范围

	- 删除数据点的轮廓

		- 在调用scatter()时传递实参 edgecolor='none'

			- plt.scatter(x_values,y_values,edgecolor='none',s=3)

	- 自定义数据点的颜色

		- 向scatter()传递实参c = 'color_name'

			- plt.scatter(x_values,y_values,c='green',edgecolor='none',s=3)

	- 使用颜色映射

		- 使用一系列颜色,从起始色渐变的结束色,用于突出数据规律

将参数c设置为y值列表,并使用参数cmap告诉pyplot使用那个颜色进行映射

			- plt.scatter(x_values,y_values,edgecolors='none',c=squares,cmap=plt.cm.Reds,s=3)

	- 自动保存图表

		- 使用savefig()

第一个参数指定图片名称,存储到当前代码所在的文件夹下
第二个参数裁去多余的空白部分,如果要保留多余的空白,可省略此参数

			- plt.savefig('squares_plot.png',bbox_inches = 'tight')

异常

每当发生错误,python会创建一个异常对象,如果没有编写处理该异常的代码,程序将停止执行,并返回一个异常报告

  • 例如:
    简单的除数为0的异常
>>> print(5/0)
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
print(5/0)
ZeroDivisionError: division by zero

解决 try-except

  • 使用try-except写一个处理特定异常的模块,让程序继续执行

    • 示例:
>>> try:
  		print(5/0)
  	except ZeroDivisionError:
  		print('除数不能为0')
  
  	
除数不能为0

else 代码块

  • 用于处理try语句中成功执行的代码后续操作

    • 例如:
>>> try:
   		res = 5/2
  except ZeroDivisionError:
   		print('除数不能为0')
  else:
   		print(res)
  
   
  2.5

FileNotFoundError异常

  • 示例
filename = 'file.txt'
try:
    with open(filename) as test:
        contents = test.read()
except FileNotFoundError:
    print('Sorry,the file you want to open is not found!')

pass

  • 有时候希望程序异常时不提示,则在except模块中使用pass

    • 示例
try--snip--
except FileNotFoundError:
    pass
else:
    --snip--

文件

读取文件

  • 示例
with open('file_name') as variable_name:
     # variable_name存储open返回的表示文件的对象
     contents = variable_name.read() 
# contents 存储文件中读取到的的字符串
print(contents)
 
  • 逐行读取

    • 示例
filename = 'read_test.txt'
with open(filename) as test:
    for line in test:
        # 使用rstrip()去掉末尾的空白
        print(line.rstrip())
  • 将读取到的内容存储到列表中,这样做可以在后面使用列表

    • 示例
filename = 'read_test.txt'
with open(filename) as test:
    lines = test.readlines()

文件路径

  • 示例

    …\test\filename.txt
    注意windows中使用的是’'而不是‘/’

写入文件

  • 写入空文件

    • 在调用open时提供两个实参,一个是文件名称,另一个是打开方式,如果写入的文件不存在,则系统将创建一个文件

      • ‘w’ 写入模式

        • 如果文件不为空,则会清空原来的内容后写入
      • ‘r’ 读取模式

        • 只能读取文件
      • ‘a’ 附加模式

        • 在原有的内容后面附加新的内容
  • 示例

filename = 'write_test.txt'
with open(filename,'w') as test:
    test.write('This is a test message!\n')
    test.write('This is another test message!')
  • 写入多行

    • 写入多行文件时,不会自动换行,
      即需要再写入时添加换行符’\n’

      • 示例:
        一个实现保存输入的用户姓名的示例
filename = 'write_test.txt'
with open(filename,'w') as test:
    i = 0
    while True:
        i += 1
        name = input('Enter your name\n')
        if name == 'q':
            break
        else:
            test.write(str(i)+'.'+name.title()+'\n')

分析文本

  • split()用于拆分字符串

    • 默认以空格为分隔符拆分

    • 可以指定拆分参数,以指定的符号进行拆分

      • 示例
>>> test = 'hello,this,is,a,file,test'
>>> test.split(',')
['hello', 'this', 'is', 'a', 'file', 'test']
>>> ts = test.split(',')
>>> for t in ts:
		print(t,end=' ')

	
hello this is a file test 

存储数据

  • JSON

    • 一种数据存储格式
      使用时需要import json
  • json.dump()

    • 用于存储数据,接收两个实参,要存储的数据以及用于存储数据的文件对象

      • 示例
import json
filename = 'json_test.json'
name = ['jerry','alice','bob']
with open(filename,'w') as test:
   json.dump(name,test)
  • json.load()

    • 用于读取数据,接收参数为文件对象

      • 示例
import json
filename = 'json_test.json'
with open(filename) as test:
    rs = json.load(test)

print(rs)

创建和使用类

  • 创建

    • class 类名:
      def init(self,参数名…):
      self.参数名 = 参数名

      注意:
      类名首字母大写
      方法__init__() 是必须的,其中init左右各两个下划线

      • 示例:
class Dog():
     def __init__(self,name,age):
         self.name = name
         self.age = age
 
 
     def sit(self):
         print(self.name.title()+' is now sitting down.')
 
 
     def roll_over(self):
         print(self.name.title()+' is rolling over.')
 
 
 my_dog = Dog('tom',12)
 my_dog.sit()
 my_dog.roll_over()
 
  • 实例

    • 1.访问属性

      • my_dog.name
    • 2.调用方法

      • my_dog.sit()

使用类和实例

  • 属性

    • 默认值

      • 示例
class Car():
    def __init__(self,make,model,year):
        self.make = make
        self.model = model
        self.year = year
        self.miles = 0 # 指定属性默认值

    def des(self):
        dname = str(self.year)+' '+self.make+' ' +self.model
        return dname.title()

    def get_miles(self):
        print('This car has '+str(self.miles)+' miles on it.')


car = Car('audi','a9',2016)
print(car.des())
car.get_miles()
- 修改

	- 1.直接修改

		- car.miles = 23

car.get_miles()

	- 2.通过方法修改

		- 在Car类中添加方法:
def update_miles(self,new_miles):
    self.miles = new_miles

car.update_miles(34)
car.get_miles()
	- 3.通过方法递增

		- 注意:

增加了条件检查,只有新的值大于原来的值才允许更新

def update_miles(self,new_miles):
    if new_miles>self.miles:
        self.miles = new_miles
    else:
        print('Can not roll back!')

- 私有

	- 如果需要设定为私有类型,需要在属性或者方法名称前面添加两个下划线(__test、__method() )

类方法

  • 在方法前面添加类方法标识符
    @classmethod

    • 实例
class Test:
	  country = 'China'
	
	  @classmethod  # 类方法标识
	  def getCountry(cls):
	      return cls.country


c1 = Test.getCountry()  # 通过类名调用类方法
print('通过类名调用类方法 ' + c1)
test = Test()
c2 = test.getCountry()  # 通过对象调用
print('通过对象调用 ' + c2)

静态方法

  • 在方法前面添加修饰符
    @staticmethod

    • 实例
class Test:
    country = 'China'

    @staticmethod
    def show():
        print(Test.country)


Test.show()

继承

  • 子类

    • 如何创建子类?

      • 1.class 子类名(父类名):
        2.初始化父类属性
        def init(self,…):
        super().init(除self的各个属性名)
    • 如何添加父类没有的属性?

      • 在__init__(…):
        的代码块内添加 self.属性名 = 初始化
        例如: self.color = ‘black’
    • 如何添加父类没有的方法?

      • 直接在 子类模块中 def 即可
  • 重写

    • 如果父类方法在子类中不适用,则需要重写父类方法

      • 子类中定义一个父类同名的方法
        具体实现不同于父类方法

实例作为属性

  • 将类的一部分作为独立的类提取出来
    例如有两个测试类:Sex、Student
    现通过Sex类中的相关方法显示学生的性别信息

    • 示例:
class Sex():
    def __init__(self, sex='M'):
        self.sex = sex

    def set_sex(self, new_sex):
        self.sex = new_sex

    def sex_info(self):
        print('sex:' + self.sex)


class Student():
    def __init__(self, name):
        self.name = name
        self.sex = Sex()

    def info(self):
        print('name:' + self.name)
        self.sex.sex_info()

stu = Student('wang')
stu.info()
stu.sex.set_sex('F')
stu.info()
  • 实例作为属性时用列表存储属性值

    • 一个简单例子,传入时存入元组中,
      元组不能修改元素,所以另外使用一个列表存储元素

      • 示例
class User():
    def __init__(self,first_name,last_name):
        self.first_name = first_name
        self.last_name = last_name


    def greet(self):
        print('Hello,'+self.first_name.title()+' '+self.last_name.title())


class Privilages():
    def __init__(self,*privilages):
        self.privilages =[]
        for p in privilages:
            self.privilages.append(p)


    def add_privilages(self,new_pri):
        self.privilages.append(new_pri)
        print('Privilages Updated!')


    def delete_privilages(self,del_pri):
        self.privilages.remove(del_pri)
        print('Privilages Delete!')


    def update_privilages(self,up_pri,new_pri):
        id = self.privilages.index(up_pri)
        self.privilages[id] = new_pri
        print('Privilages Updated!')


    def show_privilages(self):
        i = 0
        print('Privilages as follows:')
        for p in self.privilages:
            i+=1
            print(str(i)+'.'+p)


class Admin(User):
    def __init__(self,first_name,last_name):
        super().__init__(first_name,last_name)
        self.privilages = Privilages('add','delete','update','search')


admin = Admin('jams','lee')
admin.greet()
admin.privilages.show_privilages()
admin.privilages.add_privilages('test')
admin.privilages.show_privilages()
admin.privilages.delete_privilages('test')
admin.privilages.show_privilages()
admin.privilages.update_privilages('search','new_search')
admin.privilages.show_privilages()

while

使用循环

  • 示例

    示例:

>>> name =''
>>> while name!='q':
 name = input('Enter your name\n')
 if name!='q':
 print('Hello,'+name)

 
Enter your name
wang
Hello,wang
Enter your name
zhang
Hello,zhang
Enter your name
q

退出循环

  • break

    • 示例

      示例 :

>>> name =''
>>> while name!='q':
		 name = input('Enter your name\n')
		 if name!='q':
		 	print('Hello,'+name)
		 else:
		 	break;
  • continue

    • 示例

      示例:

>>> num = 0
>>> while num<10:
	num+=1
	if num%2==0:
		continue
	else:
		print(str(num),end=' ')

		
1 3 5 7 9 

循环删除列表元素

  • 示例

    示例:

>>> foods = ['apple','cake','rice','banana','apple','cake','apple']
>>> while 'apple' in foods:
		foods.remove('apple')

>>> foods
['cake', 'rice', 'banana', 'cake']

函数

传递实参

  • 示例

    示例:

    def test(name):
    print(‘Hello,’+name.title())

    test(‘zhang’)
    Hello,Zhang

默认值

  • 注意:默认值需要放在没有默认值的形参后面

    • 示例

      示例:

>>> def test(name = 'test'): 
        print('Hello,'+name.title()) 
>>> test()
Hello,Test
>>> test('zhang')
Hello,Zhang

关键字实参

  • 为了避免向函数传递实参时混淆位置

    • 示例

      示例:

>>> def test(name,sex):
		print('Hello,'+name+'.sex is '+sex) 
>>> test(sex='F',name = 'Zhang')
Hello,Zhang.sex is F
>>> test('zhang','F')
Hello,zhang.sex is F

可选实参

  • 有时候某些实参可以不传递给函数,则定义可选实参如下:
    param = ‘’

    • 示例:
>>> def test(first_name,last_name,mid_name=''):
		print('Hello,'+first_name.title()+' '+mid_name.title()+' '+last_name.title()+'.')
>>> test('john','lee','hooker')
Hello,John Hooker Lee.
>>> test('john','lee')
Hello,John  Lee.
	  

返回值

  • 返回简单值

    • 示例

      示例:

>>> def test(name):
        return name.title()

>>> print(test('zhang'))
Zhang
  • 返回字典

    • 示例

      示例:

>>> def test(first_name,last_name):
		name = {'first':first_name,'last':last_name}
		return name

>>> test('John','Lee')
{'first': 'John', 'last': 'Lee'}
  • 返回列表

    • 示例:
>>> def test(*food):
		 foods = []
		 for f in food:
		 foods.append(f)
		 return foods

>>> test('apple','banana','cake','hambarger')
['apple', 'banana', 'cake', 'hambarger']

传递列表

  • 向函数传递列表,有函数对列表进行操作

    • 示例

      示例:

>>> def test(num):
		for i in num:
			print(i,end = ' ')
			print('')


>>> test_list = [x for x in range(1,10)]
>>> test(test_list)
1 2 3 4 5 6 7 8 9 
  • 注意:
    如果不希望函数修改列表可以向函数传递列表副本
    用法:
    function_name(list_name[:])

    • 示例

      示例:

>>> def test(num):
		for i in num:
			if i%2==0:
				num.remove(i)
		print(num)


>>> test_list = [x for x in range(1,10)]
>>> test(test_list[:])
[1, 3, 5, 7, 9]
>>> test_list
[1, 2, 3, 4, 5, 6, 7, 8, 9] #可以看到传递的列表未发生改变

传递任意数量的实参

  • 有时候不确定实参的个数,就需要使用任意数量实参
    注意:
    此时传入的实参放置在一个元组之中
    如果还有其他位置形参,需要将接收任意数量实参的形参放在最后面

    • 示例

      示例:

>>> def test(*food):
	   foods = []
	   for f in food:
	   foods.append(f)
	   return foods
	  
>>> test('apple','banana','cake','hambarger')
['apple', 'banana', 'cake', 'hambarger']
	  
  • 使用任意数量的关键字实参

    • 有时候需要接收任意数量的关键字实参,但不知传递的是什么信息,就可以使用能够接收任意数量的键值对的实参

      • 示例:
  >>> def test(name,**info):
		   save = {}
		   save['name'] = name
		   for k,v in info.items():
		   save[k] = v
		   return save
		  
>>> test('zhang',age = 18,sex = 'Female')
{'name': 'zhang', 'age': 18, 'sex': 'Female'}

模块导入

  • 将函数封装在模块中,使用时只需导入模块名称就可以调用相关函数。同时可以隐藏代码细节

    • 导入整个模块
      使用:
      import 模块名称

    • 如果只需使用模块中的特定函数
      导入方式:
      from 模块名称 import 函数名称

    • 使用 as 重命名

      • 在导入模块中函数的同时可以重命名函数名称(使用 as),这样可以在该模块中使用新定义的名称调用原模块中的函数
        使用方式:
        from module_name import func_name as new_name
        调用时:
        new_name()
    • 导入模块中所有函数
      使用:
      from module_name import *

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值