Python编程
前言
包括内置函数,函数的定义与调用,函数的参数,可变长度参数与关键字参数,函数的缺省值;对象方法概念、字符串的方法;格式化字符串format();while循环,for循环,遍历列表,break,continue,pass。
一、函数
1、内置函数
内置函数指的是不需要定义,可以直接使用的函数,python提供了很多的内置函数,比如print(),len(),type(),str(),int()等等
print ("abc")
2、函数的定义与调用
函数是一段封装的代码,定义之后,调用它则执行,不调用不执行
def fun1(): # 定义函数,函数名全部小写
print('hello')
fun1() # 调用函数
print(fun1()) # 没有返回值(return)则返回None
注:调用函数,得到函数的返回值,如果没有返回值(return)则返回None
def fun2():
return 'hello'
fun2() # hello返回在内存中
print(fun2()) # 打印出fun2()的返回值
a1 = 100 # 全局变量
def fun3():
global a2 # 声明a2是一个全局变量
a2 = 200 # 局部变量,只能由函数调用,声明了global之后是全局变量
return a2
# print(a2) # 执行会报错,如果fun3()没有被调用,则a2声明并没有生效
fun3()
print(a2) # 局部变量不能被外部直接调用
关于global全局变量可参考:https://blog.csdn.net/songhongchuang/article/details/116647254
3、函数的参数
def sumdata(a, b): # a,b形式参数,简称形参,命名方式与变量一致,有多个参数时用逗号隔开
return a + b
print(sumdata(1, 9)) # 实际参数,简称实参
# print(sumdata(1)) # 报错,实参数量小于形参数量
# print(sumdata(1,2,3)) # 报错,实参数量大于形参数量
print(sumdata(a=1,b=9)) # 完整写法
print(sumdata(b=9,a=1)) # 使用完整写法时,参数的位置可以互换
print(sumdata(1,b=9)) # 先简略写法,后完整写法
# print(sumdata(a=1,9)) # 先完整写法,后简略写法,报错
(1)、函数中可以有多个return
# 写一个函数,返回某数的绝对值
def absolute_value(n):
if n >= 0:
return n
return '这是一个不可达语句' # 第一个return之后,程序退出了函数,后面的语句是不可达语句
else:
return -n
print(absolute_value(18))
print(absolute_value(-18))
(2)、函数中可以return多个值,有多个返回值时,以元组形式返回
def sumdata2(a, b):
return a + b, a - b, a * b, a ** b
print(sumdata2(3, 6))
def sumdata2_new(a, b):
return [a + b, a - b, a * b, a ** b]
print(sumdata2_new(3, 6)) # 列表为一个对象,返回是列表的形式,如果列表外还有对象,返回的则是元组
4、可变长度参数与关键字参数
(1)、可变长度参数 *args,允许用户传任意个参数
def fun6(*args):
return args
print(fun6(100,200,300)) # 如果不传任何形参, 返回空元组()
- 解包
def fun6_new1(a,*args):
return a,*args
print(fun6_new1(100,200,300))
def fun6_new2(a,*args):
return a,args # 写args会多一层元组,写*args可以少一层元组
print(fun6_new2(100,200,300))
- 旧版python写法,3.7之前版本
def fun6_new(a, *args):
return (a, *args)
print(fun6_new(100, 200, 300))
(2)、关键字参数 **kwargs,允许用户输入任意个参数,必须以key=value的格式输入;输出以字典格式显示
def fun9(**kwargs):
return kwargs
print(fun9(name='德华', age=18))
5、函数的缺省值
def fun10(a=100,b=98): # 可以给函数的形参设置缺省值,当用户不输入参数时,以缺省值作为实参的值
return a+b
print(fun10()) # 用户不输入实参
print(fun10(10)) # 用户输入一个实参,a的值使用用户输入的值,b的值使用缺省值
print(fun10(10,8)) # 用户输入全部的实参,使用用户输入的值,不使用缺省值
二、对象的方法
1、对象方法概念
(1)、Python中的一切类型的数据都是对象
:数据和方法
(2)、对象数据:
- 对象所对应的存储的东西,是静态的部分。比如:a = ‘abc123’
(3)、对象方法:
-
可以看做对象的行为,是动态的部分
-
对象方法其实就是属于该对象的函数
2、字符串的方法
(1)、isdigit()判断对象是否是纯数字,返回值是布尔型
(2)、isalpha()判断对象是否是纯字母,返回值是布尔型
str1 = 'abcdea'
print(str1.isdigit()) # 判断对象是否是纯数字,返回值是布尔型
print(str1.isalpha()) # 判断对象是否是纯字母,返回值是布尔型
(3)、find(参数) 返回参数在对象中的位置
str1 = 'abcdea'
print(str1.find('a'))
print(str1.find('a',1)) # find(参数1,参数2)从指定位置开始查找
print(str1.find('g')) # 找不到对象的位置返回-1
(4)、index(参数) 返回参数在对象中的位置
str1 = 'abcdea'
print(str1.index('a'))
print(str1.index('a',1)) # find(参数1,参数2)从指定位置开始查找
print(str1.index('g')) # 找不到对象的位置报错
(5)、strip() 去掉字符串前后的空格,返回去掉空格后的字符串
str2 = ' 窗含西岭千秋雪,门泊东吴万里船 '
print(str2.strip())
- 1)也可以去掉指定字符
str2_new = '********窗含西岭千秋雪,门泊东吴万里船********'
print(str2_new.strip('*'))
- 2)strip只能去掉字符串前后的空格或指定符
str3 = ' 两 个 黄 鹂 鸣 翠 柳,一 行 白 鹭 上 青 天 '
print(str3.strip())
(6)、replace(参数1,参数2) 将字符串中的参数1替换为参数2,返回替换后的字符串
str3 = ' 两 个 黄 鹂 鸣 翠 柳,一 行 白 鹭 上 青 天 '
print(str3.replace(' ',''))
str3_new = '''<p>两个黄鹂鸣翠柳</p>
<p>一行白鹭上青天</p>
<p>窗含西岭千秋雪</p>
<p>门泊东吴万里船</p>'''
print(str3_new.replace('<p>', '').replace('</p>', ''))
(7)、startswith 检查字符串是否以指定的子字符串开头,返回值是布尔型
# 根据身份证号判断是否是南京的身份证
id_card='320104199909200961' # 本质是字符串
if id_card.startswith('3201'):
print('南京的身份证')
(8)、endswith 检查字符串是否以指定的子字符串结尾,返回值是布尔型
# 判断身份证的最后一位是否是X
id_card='320104199909200961' # 本质是字符串
if id_card.endswith('X'):
print('最后一位是X')
else:
print('不是')
(9)、split(参数) 以参数为分隔符,切割字符串,返回值是列表
str9 = 'abcdefg'
print(str9.split('d'))
- 如果切割符位于首位或末尾,会产生空值
str9_new = 'dabcdefgd'
print(str9_new.split('d'))
经典案例:写一个号段筛选程序,需求如下
(1)、用户从控制台输入一个手机号,判断出运营商(移动(130-150),联通(151-170),电信(171-190))
(2)、如果用户输入的位数不对,提示用户位数有误,如果用户输入非数字,提示有非法字符
mobile = input('请输入一个手机号: ')
if not mobile.isdigit(): # 判断用户输入的是否不是纯数字
print('您输入的不是数字')
else:
if len(mobile) != 11: # 判断用户输入的长度是否不是11位
print('位数不正确')
else:
number = int(mobile[0:3]) # 取得手机号的前三位,并转为int型
if 130 <= number <= 150:
print('移动')
elif 151 <= number <= 170:
print('联通')
elif 171 <= number <= 190:
print('电信')
else:
print('您输入的手机号不属于任何运营商')
三、格式化字符串 format()
1、格式化字符串
格式化字符串实现的是字符串的拼接,他比普通的拼接更加的简洁高效
a = 100
b = 98
print(str(a)+'+'+str(b)+'='+str(a+b)) # 100+98=198
a = 100
b = 98
print(f'{a}+{b}={a+b}')
2、format()
(1)、顺序填值
str1 = 'my name is {}, I am {} years old'.format('tom',16)
print(str1)
(2)、下标填值,内容可以互换顺序或选择相同的值
str1 = 'I am {1} years old, my name is {0}'.format('tom',16)
print(str1)
(3)、顺序取值与下标取值不可以混用,否则报错
str1 = 'my name is {0}, I am {} years old'.format('tom',16)
print(str1)
(4)、如果前面的{}数量比后面的参数多,顺序取值会报错,下标取值不报错
# 顺序取值
str1 = 'my name is {}{}, I am {} years old'.format('tom',16)
print(str1)
# 下标取值
str1 = 'my name is {0}{1}, I am {1} years old'.format('tom', 16)
print(str1)
(5)、如果前面的{}数量比后面的参数少,不报错
str1 = 'my name is {}'.format('tom',16)
print(str1)
(6)、补齐 {:n} 表示补齐到n位,超过n位不做限制,字符串默认左对齐,数字默认右对齐
str1 = 'my name is {:10}, I am {:10} years old'.format('tom',16)
print(str1)
(7)、修改对齐方式 {:<n}左对齐 {:>n}右对齐 {:^n}居中对齐
str1 = 'my name is {:>10}, I am {:<10} years old'.format('tom',16)
print(str1)
(8)、补0。数字在左侧补零
str1 = 'my name is {:10}, I am {:>010} years old'.format('tom',16)
print(str1)
(9)、python3.6以后可以用f’'格式化字符串
name = '天乐'
age = 21
print(f'Your name is {name:<10},your age is {age:>10}')
四、循环语句
1、while循环
while循环实现从1打印到10
i = 1
while i <= 10: # while后面跟一个布尔表达式,如果结果为True,则执行循环内的语句,如果结果为False,则循环结束
print(i)
i += 1 # i自增长1
2、for循环
for循环实现1打印到10
for i in range(1,11): # range(起始值,终止值,步长) 包含起始值,不包含终止值,步长缺省值为1
print(i)
- 1)如果有明确的循环次数,可以用for循环,遍历的时候也可以用for循环,如果循环次数不确定,可以用while循环
打印20以内的奇数
# 方案1:
for i in range(1,20,2):
print(i)
# 方案2:
for i in range(1,20):
if i % 2 == 1:
print(i)
# 方案三:
i = 1
while i <= 20:
print(i)
i += 2
打印10到1的值
for i in range(10,0,-1):
print(i)
计算1到100的累加和
sum = 0
for i in range(1,101)
sum += i
print(sunm)
- 2)for循环可以不写起始值,不写时,起始值为0
for i in range(10):
print(i)
3、遍历列表
list1 = ['关羽','张飞','赵云','马超','黄忠']
# 直接变量
for one in list1:
print(one)
# 下标变量
for i in range(len(list1)):
print(list1[i])
4、break;continue;pass
(1)、break:终止循环
for i in range(1, 4):
print(f'第{i}次外层循环')
for j in range(1, 4):
if j == 3:
break # 终止内层循环
print(f'第{i}次外层循环中的第{j}才内层循环')
(2)、continue:跳出当次循环
for i in range(1, 4):
print(f'第{i}次外层循环')
for j in range(1, 5):
if j == 3:
continue # 当j等于3时,跳出当次循环,执行下一次循环
print(f'第{i}次外层循环中的第{j}次内层循环')
(3)、pass:占位符,防止语法错误
pass语句的出现是为了保持程序结构的完整性
for i in range(1, 5):
if i == 2:
pass # 占位符,防止语法错误
print(i)
(4)、循环语句也可以有else语句,当循环中没有出现break,则循环运行完成之后执行else中的语句
for i in range(1, 5):
if i == 2:
break
# continue
# pass # 占位符,防止语法错误
print(i)
else:
print('循环运行完毕!')
for i in range(1, 5):
if i == 2:
# break
continue
# pass # 占位符,防止语法错误
print(i)
else:
print('循环运行完毕!')
for i in range(1, 5):
if i == 2:
# break
# continue
pass # 占位符,防止语法错误
print(i)
else:
print('循环运行完毕!')
- 1)\r:光标回到行首
import time # 加载时间模块
for i in range(10,0,-1):
print(f'\r倒计时{i}秒',end='') # \r 光标回到行首
time.sleep(1) # 程序等待1秒
else:
print('\r倒计时结束')
- 2)print()函数的sep参数,每个参数之间间隔的字符
print(1,2,3,4,5,sep='//')
- 3)print()函数的end参数,打印结束时默认加一个换行符,缺省值end=‘\n’
print(1, end='')
print(2, end='')
经典案例:打印九九乘法表
for i in range(1, 10): # 控制第二个数值每行加1
for j in range(1, i + 1): # 控制第一个数值在一行一直自增长,直到和第二个数值一样大
print(f'{j}*{i}={i * j}\t', end='') # \t 每次打印间隔一个制表符距离
print()