python进阶之路
Day8
hello world!今日是python学习的第八天,我将会在下面文章对基础语法进行一些介绍,主要为格式字符串、字符串常用的方法、函数的作用与定义等。
1. 格式字符串
name = '曹峰'
age = 18
message = 'xxx今年x岁。'
方案一:字符串拼接
message = name + '今年' + str(age) + '岁'
print(message)
xx性别:x,年龄:xx,今年考了xx分
name = '夏明'
sex = '男'
age = 40
score = 60
message = name + '性别:' + sex + ',年龄' + str(age) + ',今年考了:' + str(score)
print(message)
方案二:格式字符串
1.1 格式字符串
语法:
带有格式占位符的字符串 % (数据1,数据2,数据3,。。。)
说明:
1) 格式占位符 - 字符串中不同类型数据的占位符号,固定的。
%s - 字符串的格式占位符(任何类型的数据都可以赋值)
%d - 整数的格式占位符
%.Nf - 浮点数的格式占位符,并且控制小数点后有N位小数(满足四舍五入)
%c - 字符的格式占位符
2) %() - 固定写法
3) 数据 - 最后给字符串中不确定内容赋值的数据;数据的个数和类型要与前面占位符的个数以及类型要保持一致。
message = '%s 性别:%s,年龄:%d,今年考了%d分' % (name,sex,age,score)
print(message)
print('%s 性别:%s,年龄:%d,今年考了%d分' % (name,sex,age,score))
message = '金额:%f' % (12)
print(message)
message = '金额:%.2f' % (12)
print(message)
message4 = '97:%c' % ('a')
print(message4)
message4 = '97:%c' % (97) # 可以直接将数字作为编码值,编码成字符后在加入字符串中。
print(message4)
练习:狗的自我介绍:’大家好,我是xxx,今年xx岁,品种:‘
dog1 = {'name':'大黄','age':2,'breed':'土狗'}
print('大家好,我是%s,今年%d岁,品种:%s' % (dog1['name'],dog1['age'],dog1['breed']))
方案三:format字符串(f - string)
1.2 format
用法1:带{}的字符串.format(数据1,数据2,数据3,。。。)
message = '大家好,我是{},今年{}岁,品种:{}'.format('小白',3,'银狐')
print(message)
用法2:{下标}
message = '大家好,我是{0},我的名字是{0},今年{1}岁'.format('曹峰',18)
print(message)
用法3:{key}
message = '大家好,我是{name},我的名字是{name},今年{age}岁'.format(name = '曹峰',age = 18,sex = '男')
print(message)
1.3 加约束:{:约束}/{下标:约束}/{key:约束}
1) 约束小数位数 - {:.Nf}
message1 = 'a:{:.1f},b:{:.2f}'.format(10,20)
print(message1)
‘我的名字是xxx,月薪:xxx。xx元’
print('我的名字是{name},月薪:{money:.2f}元'.format(name = '曹峰',money = 1000000))
2) 控制显示正负号 {:+}
print('a:{:+} b:{:+}'.format(10,-20))
3) 控制数字的宽度:{:x>N} / {:x<N} - N表示数据最终的位置,x是填充数字,>表示填充在原数字的左边,<表示在右边。
print('a:{:0>5},b:{:1<5}!'.format(10,20))
4) 数字用逗号隔开:{:,}
print('a:{:,},b:{:,}'.format(100,1000000))
5) 显示百分比:{:.N%} - N控制百分制数小数点的位数
print('a:{:.2%},b:{:.1%}'.format(0.12,0.789))
1.4 f - string的用法
f’{数据}’
name = '小花'
age = 18
message = f'姓名:{name},年龄:{age}'
print(message)
print(f'a:{100}')
2. 字符串常用方法
2.1 center/rjust/ljust
print('abc'.center(7,'x'))
print('abc'.ljust(7,'x'))
print('abc'.rjust(7,'x'))
# zfill == rjust填充字符是固定0
print('abc'.zfill(7))
练习:输入学生编号,自动产生对应的学号: python2003001,python2003023
stu_num = '12'
study_id = f'python2003{stu_num.zfill(3)}'
print(study_id)
2.2 count
message = 'how are you? i am fine. and you?'
print(message.count('a'))
print(message.count('you'))
print(message.count('a',0,10))# 在下标0~9的范围内统计a的次数
2.3 index/find - 查找字符串的位置
message = 'how are you? i am fine. and you?'
print(message.index('you'))
print(message.find('you'))
print(message.index('you+')) # 若没有直接报错
print(message.find('you+')) # 若没有返回-1
2.4 join
字符串.join(序列) - 将序列中的元素用指定字符串拼接成一个新的字符串(序列中的元素必须都是字符串)
list1 = ['name','age','sex']
print(''.join(list1))
print('abc'.join(list1))
print('='.join({'a':10,'b':20}))
2.5 lstrip/rstrip/strip - 删除空白
message = '\n\t abc \t 123 '
print('========================')
print(message,'------')
print('========================')
new1 = message.lstrip()
print(new1,'-----')
print('=========================')
new2 = message.rstrip()
print(new2,'------')
print('=========================')
new3 = message.strip()
print(new3,'------')
print('==========================')
2.6 maketrans和translate
table = str.maketrans('ab','12') # 创建映射表:a-1,b-2
new_str1 = 'abc'.translate(table) # 按照指定的映射表将原字符串中的字母及逆行替换。
print(new_str1)
2.7 replace
字符串1.replace(字符串2,字符串3) - 将字符串1中的字符串2全部替换成字符串3
message = 'how are you? i am fine. and you?'
new_str2 = message.replace('you','me')
print(new_str2)
new_str2 = message.replace('you','me',1)
print(new_str2)
2.8 split
字符串1.split(字符串2) - 将字符串2作为切割点对字符串1进行分割。形成一个新的列表。
str1 = 'asdfghjkl'
str2 = 'fg'
new_list = str1.split(str2)
print(new_list)
3 函数的简单了解
3.1 函数的作用
没有函数的问题:1. 同样的功能需要多次的时候需要把实现这个功能的代码写多次
功能一旦发生改变,需要修改多处代码。
解决:使用函数
print('============下载图片=============')
print('确定下载地址')
print('检测网络状态')
print('提示网络状态')
print('连接服务器传输数据')
print('接受数据')
print('保存数据')
def download_image():
print('============下载图片=============')
print('确定下载地址')
print('检测网络状态')
print('提示网络状态')
print('连接服务器传输数据')
print('接受数据')
print('保存数据')
download_image()
3.2 什么是函数
###### 1)函数的概念(函数就是机器)
函数就是能实现某一个特定功能的代码的封装。
###### 2)函数的分类
系统函数:系统已经定义好的函数,程序员根据需求直接使用。如:print、type、input等。(别人造好的机器)
自定义函数:程序员自己定义的函数。(自己造的机器)
###### 3) 定义函数(造机器)
语法:
def 函数名(形参列表):
函数说明文档
函数体
说明:
a. def - 关键字;固定写法
b. 函数名 - 程序员自己命名;
要求:标识符;不能是关键字
规范:所有字母都小写,多个单词之间用下划线隔开 。
见名知义(看见函数名大概知道函数的功能)
不能使用系统自带的函数名、模块名和类名
c. 形参列表 - 以:变量名1,变量名2,变量名3,。。。的形式存在(可以一个变量都没有)
形参的作用:是将函数外面的数据传输到函数的内部。
定义函数的时候需不需要形参,定义几个形参,主要看实现函数的功能需不需要形参,需要几个形参。
d. 函数说明文档 - 就是用“”“”“”表示的说明性的文字。
e. 函数体 - 和def保持一个缩进的一条或者多条语句;就是实现函数功能的一条或者多条语句。
(重要!!!)注意:定义函数的时候不会执行函数体。调用函数的时候才会使用函数体。
4) 初学者定义函数的步骤:
第一步:确定函数的功能
第二步:根据函数的功能确定函数的名字
第三步:确定函数的参数(看实现函数的功能需不需要额外的数据,需要几个搞几个)
第四步:实现函数的功能。
第五步:写函数的说明文档
练习:定义一个函数求两个数的和
def two_sum(m,n):
"""
求两个数的和,并且打印结果。
:param m: 第一个数
:param n: 第二个数
:return: None
"""
sum1 = m + n
print(sum1)
two_sum(2,3)
练习2:定义一个函数求一个属的阶乘
def factorial(n):
"""
# 求一个数的阶乘,结果为正整数。并打印结果。
:param n: 给出的一个数
:return: None
"""
factorial1 = 1
for i in range(1,n+1):
factorial1 *= i
print(factorial1)
factorial(3)
# 执行函数的时候不会执行函数体
def func1():
list1 = [1,2,3]
print(list1[100])
print('========')
5) 调用函数(使用机器)
语法:
函数名(实参列表)
说明:
函数名 - 已经定义好的函数的函数名
实参列表 - 以 数据1,数据2,数据3,。。。的形式存在(也可以没有)
真正传递到函数中使用的数据。