本专栏准备进行长期的Python训练,也正好最近为马上的期末考试而复习,而且还可以为明年的蓝桥杯打基础。
从基础开始,循序渐进,一步一个脚印。
Python主要有两种输出值的方式:
表达式语句主要用于交互模式,在交互模式下输入变量或表达式将可以直接输出变量或表达式的值。
例如在交互模式下输入5 + 6 / 2 - 3 * 2并回车,解释器直接输出表达式计算结果。
5 + 6 / 2 - 3 * 2 # 交互模式下可以直接输出表达式结果,不用加print()
2.0
表达式语句直接输出仅用于极少计算或测试时,更普遍的方式是用 print()函数 进行输出。
print()函数的语法为:
print(*objects, sep=' ', end='\n')
print()函数主要用于将单个对象 或多个对象 输出到屏幕上。
print('Hello world!') # 单个对象原样输出,输出后自动换行
Hello world!
若对象为表达式,则先计算表达式结果再输出这个结果:
print(2 * 3.1415926 * 5 ** 2) # 圆的面积 157.07963
157.07963
输出多个对象时,用半角逗号“,”将要输出的对象隔开作为print()函数的参数。
输出时默认用空格对输出值进行分隔:
print(2022, 6, 16) # 输出多个对象时,对象之间用半角逗号分隔
# 输出 2022 6 16,输出的多个对象之间默认用空格分隔
2022 6 16
输出多个对象时,可以用 sep参数 指定分隔符号,sep参数的值必须是 字符串。
print(2022, 6, 16, sep='/') # sep参数值为字符串'/',用于分隔输出的多个对象
# 输出 2022/6/16
2022/6/16
print(2022, 6, 16, sep='-') # sep参数值为字符串'-',用于分隔输出的多个对象
# 输出 2022-6-16
2022-6-16
print(23, 59, 30, sep=':') # sep参数值为字符串':',用于分隔输出的多个对象
# 输出 23:59:30
23:59:30
print()函数中 end 参数 默认值是 换行符(‘\n’) ,此参数值缺省时,执行print() 函数后会自动输出一个 换行 。
for i in range(4): # 重复执行缩进区域的语句4次
print(i) # end默认参数值是'\n',默认输出后换行
0
1
2
3
如果希望多个print() 语句的输出在 换行符(‘\n’) 同一行中,可以给print() 函数里的end 参数一个 字符串类型的值。
例如设置 end=’ ' 或 end=‘,’ ,使每条print() 语句的输出后用 空格 或 逗号 代替默认的 换行符(‘\n’) ,实现多条print() 语句输出在 同一行 内的效果:
for i in range(4): # 重复执行缩进区域的语句4次
print(i, end=' ') # end参数值不是'\n'时,输出后不换行,单引号间有一个空格
# 输出的每个数后有一个空格:0 1 2 3
0 1 2 3
设置end=‘’(空字符串),实现多个对象连续输出的效果:
for i in range(4): # 重复执行缩进区域的语句4次
print(i, end='') # end参数值不是'\n'时,输出后不换行,单引号间有一个空格
# 输出的每个数后没有空格,连续输出:0123
0123
注意, 中英文逗号 是不同的,英文符号是半角,中文符号是全角表示,注意观察下面两组代码的输出:
0,1,2,3, # 英文逗号,称为半角符号
0,1,2,3, # 中文逗号,称为全角符号
for i in range(4): # 重复执行缩进区域的语句4次
print(i, end=',') # end参数值不是'\n'时,输出后不换行
# 输出:0,1,2,3,
0,1,2,3,
print() 函数只能输出用特定分隔符分隔的值,当需要更多的控制输出格式时,可以使用以下方法。
格式化字符串字面值,又称为f-string,这是Python 3.6以后提供的一个新方法,用“f”或“F”做前缀格式化字符串输出。
f’原样输出的字符串{大括号位置用大括号中的变量值替换}'使用时,在字符串开始的引号前加上 “f”或“F”,字符串中可放置 大括号“{}”作为 替换域,输出时,字符串将被原样输出, 替换域中的变量或表达式在程序运行时会被变量和表达式的值代替。
a = 5
b = 3
print(f'{a} - {b} = {a - b}') # 输出: 5 - 3 = 2
5 - 3 = 2
user_name = 'Tom'
gender = 'male'
age = '20'
print(f'姓名:{user_name},性别:{gender},年龄:{age}')
# 输出:姓名:Tom,性别:male,年龄:20
姓名:Tom,性别:male,年龄:20
大括号中的变量值可以为任意类型,当大括号中的值为 字符串时,需使用 双引号。
print(f'姓名:{"Tom"},性别:{"male"},年龄:{40}')
# 姓名:Tom,性别:male,年龄:40
姓名:Tom,性别:male,年龄:40
用 ‘:m’ 在 ':'后传递一个整数m可以让该字段最小字符宽度为m个,可用于设置右对齐。
下面例子中,当输出少于3个字符时至少占3个字符宽度,可用于保证输出右对齐。
print(f'{1} * {9} = {1 * 9:3}') # 1 * 9 = 9
print(f'{9} * {9} = {9 * 9:3}') # 9 * 9 = 81
print(f'{9} * {19} = {9 * 19:3}') # 9 * 19 = 171
1 * 9 = 9
9 * 9 = 81
9 * 19 = 171
当输出 多于m个字符时按全部字符 实际字符宽度输出。
print(f'{1} * {9} = {1 * 9:3}') # 1 * 9 = 9
print(f'{9} * {19} = {9 * 999:3}') # 9 * 19 = 8991
1 * 9 = 9
9 * 19 = 8991
用‘:nf’在冒号 ‘:’ 后传递一个整数 n 和字母 f 可以精确控制浮点数输出时的小数位数为n。
pi = 3.141592653589793
print(f'小学生用圆周率时精确到小数点后2位,结果为{pi:.2f}')
# 小学生用圆周率时精确到小数点后2位,结果为3.14
print(f'大学生用圆周率时精确到小数点后7位,结果为{pi:.2f}')
# 大学生用圆周率时精确到小数点后7位,结果为3.14
str.format() 方法格式如下:
<模版字符串>.format(<逗号分隔的参数>)
与f-string类似,<模版字符串>由一系列的用大括号“{}”表示的替换域组成,用来控制修改字符串中嵌入值出现的位置。调用此方法的“模版字符串”可以包含字符串以及若干个大括号表示的替换域。
format() 括号中的放置与替换域数量相同的参数值,运行时默认按替换域出现的顺序一一对应填入到前面的替换域中。
a = 5
b = 3
print('{} + {} = {}'.format(a, b, a + b)) # 参数值按出现顺序填入替换域
5 + 3 = 8
如果替换域中标有序号,将根据序号到format()括号里查找序号对应的值进行填入。
# 这三条语句输出相同格式信息:
a = 5
b = 3
print('{} * {} = {}'.format(a, b, a * b)) # 参数值按出现顺序填入替换域
print('{2} * {1} = {0}'.format(a * b, b, a)) # 参数序号从0开始编号,依次为:0,1,2
print('{2} * {0} = {1}'.format(b, a * b, a)) # 括号中序号根据参数序号调整
5 * 3 = 15
5 * 3 = 15
5 * 3 = 15
按位置传递参数
print('我叫{},今年{}岁'.format('王伟', 18)) # 我叫王伟,今年18岁
我叫王伟,今年18岁
按序号传递参数,与位置无关,大括号中数字表示传递的对象的位置
print('这是{1},我喜欢喝{0}'.format('咖啡', '茶')) # 这是茶,我喜欢喝咖啡
这是茶,我喜欢喝咖啡
序号可重复使用
print('这是{1},我喜欢喝{1}'.format('咖啡', '茶')) # 这是茶,我喜欢喝茶
这是茶,我喜欢喝茶
参数可多于替代域索引数
print('这是{0},我喜欢喝{0}'.format('茶', '咖啡', '红酒')) # 这是茶,我喜欢喝茶
这是茶,我喜欢喝茶
参数少于替代域索引数时报错。
使用时要保证format()中的参数数量与前面大括号{}的数量相同。
print('这是{1},我喜欢喝{0}'.format('茶')) # 错误用法,测试时去掉行首#号
# IndexError: Replacement index 1 out of range for positional args tuple
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
in
----> 1 print('这是{1},我喜欢喝{0}'.format('茶')) # 错误用法,测试时去掉行首#号
2 # IndexError: Replacement index 1 out of range for positional args tuple
IndexError: tuple index out of range
除此以外,还可以在每个替换域中传入一个变量,在format()方法里给每一个变量赋值,输出时,将值按替换域的顺序进行输出。
print('{a} - {b} = {c}'.format(a=5, b=3, c=5-3)) # 5 - 3 = 2
使用变量名形式的简单字段名传递关键字参数,关键字参数的位置可以随意调换
print('我叫{user},今年{age}岁'.format(user='王伟', age=18))
print('我叫{user},今年{age}岁'.format(age=18, user='王伟'))
# 我叫王伟,今年18
我叫王伟,今年18岁
我叫王伟,今年18岁
正确输出结果:这是一辆2022年生产,型号是L90的红旗牌汽车,售价1000万元。
str.format()中也可以在大括号中加冒号和“格式限定符”,在冒号后面加“.mf”控制输出保留小数点后m位数字的浮点数(f代表float)。
print('{} / {} = {}'.format(a, b, a / b)) # 5 / 3 = 1.6666666666666667
print('{} / {} = {:.4f}'.format(a, b, a / b)) # 5 / 3 = 1.6667,.4f保留4位小数浮点数
用“+”将多个字符串拼接为一个字符串输出。
参与拼接的可以是字符串也可以是字符串变量。
参与拼接的变量为整数等其他数据类型时,需先用str()函数将其转为字符串类型再参与拼接。
user = '王伟'
age = 18 # 18是整数,用str(age)转为字符串 '18'
print('我叫' + user + ',今年' + str(age) + '岁') # 我叫王伟,今年18岁
我叫王伟,今年18岁
input()函数:作用是从标准输入设备(键盘)获得用户输入的一行数据,不管用户输入的是字符型还是数字型的数据,input()函数都会将其作为一个字符串类型处理。
a = input() # 输入 5,默认为字符串'5'
b = input() # 输入 3,默认为字符串'3'
print(f'输入给a的数据的类型是:{type(a)}') # 输出,a的类型是字符串
print(f'a + b 的结果是两个字符串拼接到一起:{a + b}') # 输出 53,'+' 作用是将两个字符串拼接为一个字符串
print(f'a * int(b)是将字符串{a}重复整数{int(b)}次:{a * int(b)}') # 输出 555,'*' 作用是将字符串重复整数b次
当用户输入为“5”和“3”时,输出结果分别为“53”和“555”,而不是直接进行数学运算而得到“8”和“15”,这表明即使我们输入数字型数据,系统也会将其作为字符串进行处理。
为了提高程序的用户友好性,input()可以包含一些提示性的文字,提示性文字以双引号或单引号引起来放于input后的括号内,如:
a = input('请输入一个正整数,表示长方形边长:') # 输入 5,默认为字符串'5'
b = input('请输入一个正整数,表示长方形边长:') # 输入 3,默认为字符串'3'
print(f'边长为{a}和{b}的长方形面积为:{int(a) * int(b)}') # 输出15
请输入一个正整数,表示长方形边长:5
请输入一个正整数,表示长方形边长:3
边长为5和3的长方形面积为:15
user = input('请输入姓名:') # 输出“请输入姓名:”等待输入,输入:张华
print('你真的是', user, '?') # 输出3个对象,空格分隔,你真的是 张华 ?
print('你真的是', user, '?', sep='') # 输出3个对象,空字符串分隔,你真的是张华?
print('你真的是' + user + '?') # 字符串拼接,无分隔,你真的是张华?
print(f'你真的是{user}?') # 格式化字符串输出,你真的是张华?
请输入姓名:张华
你真的是 张华 ?
你真的是张华?
你真的是张华?
你真的是张华?
运行时屏幕上会看到“请输入姓名:”的提示,同时程序做好接收用户输入的准备。
注意到第一个print语句输出时,在变量user的值“张华”的前后各输出一个空格,这是由print()函数的参数sep的默认值为空格导致的,可以在输出时设置参数“sep=‘’”来消除空格,也可以用字符串拼接或“f”前缀格式化字符串的方法消除多余的空格。