前言
在最近接触 Python 的这段时间内,遇到许多关于输出格式要求的题目(如十进制转二进制一类的)。在循规蹈矩的按照要求完成题目后,博主不免想起学习 C++ 的那些日子,尤其是接触标准库后,对于这类问题一般就是一行的事儿,根本不需要从原理上去一步一步实现。故博主十分贪心,想进一步了解在 Python 中是否也有类似于标准库这一类十分好用的 “工具”。
目录
1.1 input() 函数赋值后数据在 Python 内部的类型。
1.4.1 利用split()函数进行输入的分割,一般默认为空格分割符,也可以自己设置。
1 input() 函数
1.1 input() 函数赋值后数据在 Python 内部的类型。
if __name__=="__main__":
a=input()
print(type(a))
b=input()
print(type(b))
c=a+b
print(c)
print(type(c))
输入及输出:
从结果可以看出,我们通过input输入的数据在python中被默认为string型即字符串类型。执行a+b得到的并不是两个数据的和,而是字符串的连接。
1.2 input()函数读取数据的转换
为了让input()函数读取的数据转换为我们想要的类型,我们可以使用类型强制转换,将数据转换为我们想要的int、float、list等类型。
实验代码:
if __name__=="__main__":
a=int(input())
print(type(a))
b=float(input())
print(type(b))
c=a+b
print(c)
print(type(c))
实验结果:
1.3 input()函数的交互性
可以在()内放入需要显示的提示性语言,具体如下代码所示:
if __name__=="__main__":
a=int(input())
print(type(a))
b=float(input())
print(type(b))
c=a+b
print(c)
print(type(c))
name=input("请输入您的名字")
print(name)
number=input("请输入"+str(name)+"同学的学号")
结果如下:
从结果可以看出,如果想在提示语中增加变量,需要使用str(变量名),连接方式为“+”。前面已经提到,input()函数读取的变量在python中默认为string类型,因此这里不需要添加str()强制转换也可以正常输出。
1.4 input()函数一次读取多个变量
1.4.1 利用split()函数进行输入的分割,一般默认为空格分割符,也可以自己设置。
if __name__=="__main__":
list1=input("请输入一个列表:\n").split(" ")
print(type(list1))
list2= input("请输入一个列表:\n").split(",")
print(type(list2))
print(type(list1[1]))
实验结果:
从实验结果我们可以看出,split()函数可以对输入字符串进行分割,且必须设定分割符,空格不可以省略,上面报错是因为没有指定分割符,分隔符是空格也不可以省略。同时,split()函数分割后返回值是列表类型,列表中每个元素是string类型。
1.4.2 input()函数一次性输入多个变量值
代码:
if __name__=="__main__":
a,b,c=input("请输入多个变量值:\n").split()
print(a)
print(b)
print(c)
print(type(c))
结果:
结果分析:当我们输入的数据大于变量个数时,会报错。split()如果没有指定分割符,默认为空格,但是()内不能输入“”。分割后的变量仍然是string类型。
1.4.3 将多个变量同时进行类型强制转换
map()函数用来实现多个输入的强制类型转换,map()函数接收两个参数,一个是强制转换的类型函数,一个是序列。map()函数将将强制转换类型的函数依次作用到序列的每个元素,并将结果作为list进行返回。
代码:
if __name__=="__main__":
a,b,c=map(int,input("请输入多个变量值:\n").split())
d,e,f=[1,2,3]
print(a)
print(type(a))
print(d)
print(e)
实验结果:
(1)列表可以直接赋值给多个变量。
(2)split()函数的返回值是列表。
(3)map()函数的返回值是对象。
2 print() 函数
2.1 print() 函数的语法
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
将 "objects" 打印输出至 "file参数" 指定的文本流,以 "sep 参数"分隔开并在末尾加上 "end参数"。 "sep" 、 "end "、 "file" 和"flush" 必须以关键字参数的形式给出。 flush 关键字参数是在 phthon3.3 版后增加的。
所有非关键字参数都会被转换为字符串,就像是执行了 str() 一样,并会被写入到流,以 “sep参数“ 且在末尾加上 “end参数“。 “sep参数“ 和 “end参数“都必须为字符串;它们也可以为 “None“,这意味着使用默认值。 如果没有给出 “objects参数“,则 print() 将只写入 “end参数“。
"file 参数"必须是一个具有 write(string) 方法的对象;如果参数不存在或为 None,则将使用 sys.stdout。 由于要打印的参数会被转换为文本字符串,因此 print() 不能用于二进制模式的文件对象。 对于这些对象,应改用 file.write(...)。输出是否缓存通常取决于 file,但如果 flush 关键字参数为 True,输出流会被强制刷新。
参数的使用可参考:Python基础(九)——print函数详解,配合参数示例详解_python print 参数_Mood Crows的博客-CSDN博客
2.2 print() 打印输出文本
打印的文本内容不仅仅是指中文文本,还可以是英文文本或者包含特殊符号的文本,打印文本时需要使用引号将文本内容引起来,引号可以是单引号(' '),双引号(" "),三引号(""" """)
使用方法 | 代 码 | 运行结果 | |
单引号 | 一对单引号,单引号里可以用双引号,并可以将单引号打印出来 | print('有生命便有希望') | 有生命便有希望 |
print('"有生命便有希望"') | "有生命便有希望" | ||
双引号 | 一对双引号,双引号里可以用单引号,并可以将单引号打印出来 | print("永不气馁!") | 永不气馁! |
print("永不气馁!") | '永不气馁! ' | ||
三引号 | 一对三引号,引用多行文本 | Multilinetext=""" They who cannot do as they would, must do as they can. 不能如愿而行, 也须尽力而为。 """ print(Multilinetext) | hey who cannot do as they would, must do as they can. 不能如愿而行, 也须尽力而为。 |
2.3 print() 中空格的使用方法
方 法 | 代 码 | 运行结果 | |
1 | 直接在引号中打空格,空格数不限 | print("谋事在人 成事在天 有生命便有希望") | 谋事在人 成事在天 有生命便有希望 |
2 | 相邻的两项用逗号间隔 | print("谋事在人","成事在天","有生命便有希望") | 谋事在人 成事在天 有生命便有希望 |
3 | 多行打印时用逗号结尾 | print ("谋事在人",) print ("成事在天") 此版本适合python3.4 最新版的方法是: | 谋事在人 成事在天 (2个字符串之间有个空格) |
4 | 相邻的两项或多行打印时没有用逗号间隔 | print("谋事在人""成事在天") print ("谋事在人") print ("成事在天") | 谋事在人成事在天 谋事在人成事在天 |
5 | 字符串间不要空格 | print ("谋事在人" + "成事在天") | 谋事在人成事在天 (2个字符串之间没有空格了) |
2.4 print() 换行
print()函数的“end”参数指定了print()函数在打印完内容之后,用什么符号来表示结尾,默认值是“\n”,表示换行,即print()函数在打印完指定内容之后,就会自动换行。
我们可以通过“end”参数的定义,用其他符号来表示print()输出打印完成。例如:print()函数的“end”参数指定为“|”,即print()函数每次输出完成之后,都输出“|”。
强行换行 | |
代码 | print("有生命\n便有希望") |
运行结果 | 有生命 便有希望 |
打印后不换行,用 end 参数来设置你想要的结束符号 | |
代码 | print("谋事在人",end =" ") print("成事在天", end =" ") print("有生命便有希望", end =" ") |
运行结果 | 谋事在人 成事在天 有生命便有希望 |
代码 | print("谋事在人",end ="|") print("成事在天", end ="|") print("有生命便有希望", end ="|") |
运行结果 | 谋事在人|成事在天|有生命便有希望| |
代码 | for x in range(0, 6): print(x, end=' ') for x in range(0, 6): print(x, end=',') |
运行结果 | 0 1 2 3 4 5 0,1,2,3,4,5, |
代码 | for x in range(1, 6): print(x, end=' ') print() for x in range(1, 6): print(x, end=',') print() |
运行结果 | 1 2 3 4 5 1,2,3,4,5, |
2.5 区隔符 sep
用sep参数来约束print括号里多项内容之间的区隔符 | |
代码 | print("谋事在人", "成事在天", "有生命便有希望", sep ="&") |
运行结果 | 谋事在人&成事在天&有生命便有希望 |
代码 | print("www", "csdn", "net", sep=".") |
运行结果 | www.csdn.net |
2.6 制表符 \t
制表符\t控制水平间隔,作用如tab键,在打印输出时控制间隔距离 \t表示空8个字符, 或者使用格式化输出,具体请看实例 | |
代码 | print("不能如愿而行\t也须尽力而为") |
运行结果 | 不能如愿而行 也须尽力而为 |
代码 | for i in range (1, 11): print(i,'\t',i*2,'\t',i*3,'\t',i*4) |
运行结果 | 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16 5 10 15 20 6 12 18 24 7 14 21 28 8 16 24 32 9 18 27 36 10 20 30 40 |
代码 | name = 'Adversity awake' saying="Man proposes, god disposes 谋事在人,成事在天" print(name.title()+" once said"+": "+'\n\t"'+saying+'"') |
运行结果 | Adversity Awake once said: "Man proposes, god disposes 谋事在人,成事在天" |
代码 | #错误print()效果距离: print("学生号\t姓名\t科目\t分数") |
运行结果 | # 对齐出现偏差 |
代码 | print("学生号\t\t姓名\t\t\t\t\t科目\t\t分数") print("100000101\t阿凡达\t\t\t\t语文\t\t80") print("100000102\t卡梅隆卡梅隆\t\t\t语文\t\t85") print("100000103\t莫妮卡·贝鲁卡梅隆\t\t语文\t\t85") |
运行结果 | # 用多个制表符,对齐完好 |
代码 | print("%-10s\t %-28s\t %-10s\t %-10s"%("学生号","姓名","科目","分数")) |
运行结果 | ![]() |
编外话:有时需要对齐输出,还可以使用format()来实现:
代码 | products=[["iphone",6888],["MacPro",14800],["coffee",32],["abc",2499], |
运行结果 | ![]() |
2.7 输出数学表达式
print后的括号中如果是数学表达式,则打印结果为表达式最终运算的结果
Print 打印表达式的值 | |
代码 | Print(1+2+3+4+5) |
运行结果 | 15 |
代码 | print(8/1) |
运行结果 | 8.0 |
代码 | print(2*4) |
运行结果 | 8 |
代码 | print(18-10) |
运行结果 | 8 |
代码 | print(2+6) |
运行结果 | 8 |
2.8 打印输出反斜杠
打印反斜杠,把2个反斜杠放一起 | |
代码 | Print("不能如愿而行\\也须尽力而为") |
运行结果 | 不能如愿而行\也须尽力而为 |
2.9 print() 变量的输出
无论什么类型的数据,包括但不局限于:数值型,布尔型,列表变量,字典变量…...都可以通过print()直接输出。
print()变量的输出 | |
代码 | #输出数值型变量 num = 91682 print(num) |
运行结果 | 91682 |
代码 | #输出字符串变量 name = '逆境清醒' print(name) |
运行结果 | 逆境清醒 |
代码 | #输出列表变量 list = [1,2,3,4,5,'a','b','c'] print(list) |
运行结果 | [1, 2, 3, 4, 5, 'a', 'b', 'c'] |
代码 | #输出元组变量 tuple = (1,2,3,4,5,'a','b','c') print(tuple) |
运行结果 | (1, 2, 3, 4, 5, 'a', 'b', 'c') |
代码 | #输出字典变量 dict ={'a':1, 'b':2,'c':3} print(dict) |
运行结果 | {'a': 1, 'b': 2, 'c': 3} |
2.10 print() 数据的格式化输出
在字符串中插入 | 代 码 | 运 行 结 果 | |
1 | 字符串变量 | name = "Akira" print("我的名字是 %s " % name) | 我的名字是 Akira |
2 | 整数变量 | age = 18 print("我的年龄是 %d"%(age)+"岁了") | 我的年龄是 18岁了 |
3 | 小数变量 | i = 2670.5 print("数字是 %f" %i) | 数字是 2670.500000 |
%号点(.)前跟字段宽度; %号点(.)后跟精度值;字段宽度中,小数点也占一位 | i = 2.67145573 print("8位保留字段宽度%8f"%(i)) | 8位保留字段宽度2.671456 | |
i = 2.67145573 print("保留两位小数输出的是%.2f"%(i)) | 保留两位小数输出的是2.67 | ||
i= 2.6714563467 print("a"+'%10.3f'%i) print("a"+'%f'%i) | a 2.671 a2.671456 | ||
4 | s='Akira' x=len(s) print('%s名字的长度是 %d' %(s,x)) | Akira名字的长度是 4 |
格式输出 | 代 码 | 运行结果 | |
%s | 输出一个字符串,字符串采用str()的显示 | i= 2.6714563467 print('%s'%i) | 2.6714563467 |
%r | 字符串(repr())的显示 | print('%r'%repr(set([1,1,2,3]))) | '{1, 2, 3}' |
%c | 输出一个单一的字符 | print('%c'%90) | Z |
%e、%E | 指数(基底写e) | k= 2671.4563467284 print('%e'%k) print('%E'%k) | 2.671456e+03 2.671456E+03 |
%b | 二进制整数 | print(bin(50)) | 0b110010 |
%hd、%d、%ld | 以十进制、有符号的形式输出 short、int、long 类型的整数 | print('%d'%50) | 50 |
%hu、%u、%lu | 以十进制、无符号的形式输出 short、int、long 类型的整数 | print('%u'%50) | 50 |
%ho、%o、%lo | 以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数 | print('%o'%50) | 62 |
%#ho、%#o、%#lo | 以八进制、带前缀、无符号的形式输出 short、int、long 类型的整数 | print('%#o'%50) | 0o62 |
%hx、%x、%lx、 %hX、%X、%lX | 以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。 | print('%x'%50) | 32 |
%#hx、%#x、%#lx、 %#hX、%#X、%#lX | 以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。 | print('%#x'%50) print('%#X'%50) | 0x32 0X32 |
%f、%lf 、%F | 以十进制的形式输出 float、double 类型的浮点数 | i= 2.6714563467 print('%f'%i) | 2.67146 |
%g、%lg、 %G、%lG | 以十进制和指数中较短的形式输出 float、double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。 | i= 2.6714563467 print('%g'%i) | 2.67146 |
其他一些格式输出方法 | |
代码 | k= 2671.4563467284 print('二进制形式''{0:b}'.format(int(k))) |
运行结果 | 二进制形式101001101111 |
代码 | k= 2671.4563467284 print('十进制形式''{:d}'.format(int(k))) |
运行结果 | 十进制形式2671 |
代码 | k= 2671.4563467284 print('八进制形式''{:o}'.format(int(k))) |
运行结果 | 八进制形式5157 |
代码 | k= 2671.4563467284 print('十六进制形式''{:x}'.format(int(k))) |
运行结果 | 十六进制形式a6f |
代码 | k= 2671.4563467284 print('数字形式''{:n}'.format(k)) |
运行结果 | 数字形式2671.46 |
代码 | k= 2671.4563467284 print('百分数形式''{:%}'.format(k)) |
运行结果 | 百分数形式267145.634673% |
代码 | k= 2671.4563467284 print('幂指数形式''{:e}'.format(k)) |
运行结果 | 幂指数形式2.671456e+03 |
代码 | k= 2671.4563467284 print('十进制较短的形式输出''{:g}'.format(k)) |
运行结果 | 十进制和指数中较短的形式输出2671.46 |
代码 | k= 2671.4563467284 print('十进制浮点数''{:f}'.format(k)) |
运行结果 | 十进制浮点数2671.456347 |
代码 | 输出二进制数 k= 2671.4563467284 print(bin(int(k))) |
运行结果 | 0b101001101111 |
代码 | 输出八进制数 k= 2671.4563467284 print(oct(int(k))) |
运行结果 | 0o5157 |
代码 | 输出十六进制数 k= 2671.4563467284 print(hex(int(k))) |
运行结果 | 0xa6f |
英文大小写转换(title()首字母大写,upper()全大写,lower()全小写) | |
代码 | name = 'Adversity awake' print(name.title()) |
运行结果 | Adversity Awake |
代码 | name = 'Adversity awake' print(name.upper()) |
运行结果 | ADVERSITY AWAKE |
代码 | name = 'Adversity awake' print(name.lower()) |
运行结果 | adversity awake |
2.11 print() 中文输入显示乱码问题
如果代码中有汉字中文,运行的时候python报错,出现python中无法正常输入中文,乱码等情况:
编译提示:SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0x*** in position 0: ...
主要是由于编码的问题引起的。
受开发系统和环境不同影响,解决办法会有所不同,但一般按以下办法处理就能解决,有需要者请自行尝试适合自己系统的解决办法:(记住,下面的方法不需要全部添加到python文件中,选择其中一项或两项尝试,能解决问题即可)
在你的python文件(.py)文件第一行
中文显示乱码问题
1、开头加入
# coding=utf-8
2、或者开头加入
#-*- coding: UTF-8 -*-
3、或者开头加入
#!usr/bin/env python3
# -*- coding:utf-8 -*-
4、或者开头加上
# -*-coding:GBK -*-
5、或者开头加上
#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
6、改变标准输出print()的默认编码
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
平时开发python时注意:
1、如果你用pycharm编译书写python代码,pycharm默认是会自动保存为UTF-8格式的,如果你无意中修改过,请在pycharm工作界面右键—File-Encoding–选择UTF-8编码----reload-----reload anyway。如果还是不行,试一下路径改为全英文。
pycharm设置参考链接:https://blog.csdn.net/qq_35091353/article/details/108236018
2、如果你用其他编译书写代码工具,请点击
文档>>设置文件编码>>Unicode>>Unicode(UTF-8)
3、如果你用visual studio 编译书写python代码,
visual studio 2022下python编程,报错:SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byte
解决办法:
把Visual studio的文件保存编码改为UTF-8:
---->Unicode(UTF-8带签名)-代码页65001
设置工程字符集为utf-8,选择工程----右键----属性----加上字符集编码
Visual Studio Community 2022 - UTF-8 编解码器问题 #6784,可参考阅读:
https://github.com/microsoft/PTVS/issues/6784
题外话:
在用matplotlib(pyplot)图表制作时,标题和坐标轴中文显示会出现异常,出现小方框,无法正常显示,这时,只需在文件头部加入以下代码即可:
#-*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
2.12 print() 写入文件
将print的内容写入文件。
有时候,我们会遇到希望print的内容不止打印屏幕上,还能保存在文件中。那么,我们可以试着将print的内容写入文件,方法如下:
建立test.py文件,输入:
写入文件 | |
代码 | # coding=utf-8 print("Hello, World!", file=open('file.txt', 'w')) |
运行结果 | 运行后,在test.py文件所在的目录中,出现了一个file.txt文件,打开file.txt文件,会发现里面的内容是: Hello, World! 说明我们的print()写入文件成功。 |
写入文件 | |
代码 | for i in range (1, 11): print(i,'\t',i*2,'\t',i*3,'\t',i*4,end='\n',file=open('file.txt',mode ='a',encoding='utf-8'), flush=False) |
运行结果 | 运行后,打开file.txt文件,会发现里面的内容是: 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16 5 10 15 20 6 12 18 24 7 14 21 28 8 16 24 32 9 18 27 36 10 20 30 40 说明我们的print()写入文件成功。 |
2.13 print() 配合函数输出
2.14 print() 配合 format 格式化输出
可参考:
python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印_python format函数_逆境清醒的博客-CSDN博客
2.15 print() 在终端输出彩色字体
可参考:
print()在终端输出彩色字体_终端输出彩色字符_逆境清醒的博客-CSDN博客
2.16 一些好玩的 print() 输出实例
可参考:
用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心)_浪漫的一串代码_逆境清醒的博客-CSDN博客