Python的输入输出3
输入输出函数的使用
Python input()函数:获取用户输入的字符串
input()是Python的内置函数,用于从控制台读取用户输入的内容。input()函数是以字符串的形式处理用户输入的内容,所以用户输入的内容可以包含任何内容。
str = input(tipmsg)
- str 表示一个字符串类型变量,input会将读到的字符放入str中。
- tipmsg表示提示信息,它会显示在控制台上,告诉用户应该输入怎样的内容;如果不写,就不会有任何提示信息。
a = input("Enter a number: ")
b = input("Enter another number: ")
print("aType: ", type(a))
print("bType: ", type(b))
result = a + b
print("resultValue: ", result)
print("resultType: ", type(result))
运行结果示例:
Enter a number: 100↙
Enter another number: 45↙
aType: <class 'str'>
bType: <class 'str'>
resultValue: 10045
resultType: <class 'str'>
↙表示按下回车键,按下回车键input()读取就结束了。
本例中我们输入了两个整数,希望计算出它们的和,但是事与愿违,Python只是将它们当成了字符串,+
起到了拼接字符串的作用,而不是求和的作用。
当然我们要是想将字符型转换成想要的类型,比如:
- int(string)将字符串转换成int型
- float(string)将字符串转换成浮点型
- bool(string)将字符串转换成布尔型
a = input("Enter a number: ")
b = input("Enter another number: ")
a = float(a)
b = int(b)
print("aType: ", type(a))
print("bType: ", type(b))
result = a + b
print("resultValue: ", result)
print("resultType: ", type(result))
运行结果:
Enter a number: 12.5↙
Enter another number: 64↙
aType: <class 'float'>
bType: <class 'int'>
resultValue: 76.5
resultType: <class 'float'>
上面讲解的是 Python 3.x 中 input() 的用法,但是在较老的 Python 2.x 中情况就不一样了。Python 2.x 共提供了两个输入函数,分别是 input() 和 raw_input():
- Python 2.x raw_input() 和 Python 3.x input() 效果是一样的,都只能以字符串的形式读取用户输入的内容。
- Python 2.x input() 看起来有点奇怪,它要求用户输入的内容必须符合 Python 的语法,稍有疏忽就会出错,通常来说只能是整数、小数、复数、字符串等。
比较强迫的是,Python 2.x input() 要求用户在输入字符串时必须使用引号包围,这有违 Python 简单易用的原则,所以 Python 3.x 取消了这种输入方式。
a = input("Enter a number: ")
b = input("Enter another number: ")
print "aType: ", type(a)
print "bType: ", type(b)
result = a + b
print "resultValue: ", result
print "resultType: ", type(result)
在 Python 2.x 下运行该代码:
Enter a number: 45↙
Enter another number: 100↙
aType: <type 'int'>
bType: <type 'int'>
resultValue: 145
resultType: <type 'int'>
Python print()函数的高级用法
之前我们使用print()函数时,都只是输出一个变量,但实际上print()函数完全可以输出多个变量,而且它具有更多丰富的功能。
print()函数的详细语法格式:
print(value,……,sep = '',end = '\n',file = sys.stdout,flush = False)
user_name = 'Charlie'
user_age = 8
#同时输出多个变量和字符串
print("读者名:",user_name,"年龄:",user_age)
运行上面代码,可以看到如下输出结果:
读者名: Charlie 年龄: 8
指定分隔符sep
从输出结果来看,使用print()函数输出多个变量时,print()函数输出多个变量时,print()函数默认用空格隔开多个变量,如果读者希望改变默认的分隔符,可通过sep参数进行改变
#同时输出多个变量,并且指定分隔符
print("读者名:",user_name "年龄:",user_age,sep='|')
运行结果
读者名:|Charlie|年龄:|8
更改输出结束后是否换行end
在默认的情况下,print()函数会在执行结束后自动换行,因为print()函数中的end参数的值默认为\n
。如果希望print()函数结束后不换行,则更改end参数的默认值即可:
print(40,'\t',end="")
print(50,'\t',end="")
print(60,'\t',end="")
运行结果:
40 50 60
输出目标的更换file
file参数指定了print()函数的输出目标,file参数的默认值式sys.stdout,该默认值表示系统标准输出,也就是表示输出到屏幕,因此print()函数的默认值也是输出到屏幕,实际上我们可以用这个参数,将输出内容输出到指定的文件中
f = open("demo.txt","w")#打开文件以写入
print('飞流直下三千尺',file = f)
print('疑是银河落九天',file = f)
f.close()
控制输出缓存flush
print()函数的flush参数用来控制输出缓存,该参数一般保持false即可,这样可以保持较好的性能。
格式化字符串
转换说明符 | 解释 |
---|---|
%d、%i | 转换为带符号的十进制整数 |
%o | 转换为带符号的八进制整数 |
%x、%X | 转换为带符号的十六进制整数 |
%e、%E | 转换为用科学计数法表示的浮点数 |
%f、%F | 转化为十进制浮点数 |
%g、%G | 智能选择使用%f或%e格式、只能选择使用%F、%E格式 |
%c | 格式化字符及其ASCII码 |
%r | 使用repr()函数将表达式转换成字符串 |
%s | 使用str()函数将表达式转换成字符串 |
转换说明符只是一个占位符,它会被后面表达式(变量、常量、数字、字符串、加减乘除等各种形式)的值代替。
age = 23
print("我今年已经%d岁了"% age)
运行结果:
我今年已经23岁了
在print()函数中,由引号包围的是格式化字符串,它相当于一个字符串模板,可以放置一些转换说明符(占位符)。
在格式化字符串中也可以包含多个转换说明符,这时候我们也要提供多个表达式。
name = "赵天洋"
age = 23
url = "https://www.tianlangz.top/"
print("%s已经%d岁了,他编写博客的网址是%s" % (name,age,url))
运行结果:
赵天洋已经23岁了,他编写的博客地址是https://www.tianlangz.top/
我们写了几个占位符,就要写几个表达式
指定最小输出宽度
当使用转换说明符时,我们还可以规定它的最小输出宽度,也就是最少占用多少个字符宽度。
- %10d 表示这个整形宽度至少为十
- %20s 表示这个字符串长度至少为20
n = 1234567
print("n(10):%10d" % n)
print("n(5):%5d" % n)
url = "tianlangz.top"
print("url(20) : %20s" % url)
print("url(10):%10s" % url)
运行结果:
n(10): 1234567
n(5):1234567
url(20): tianlangz.top
url(10):tianlangz.top
从运行后的结果可以发现,我们所控制的最小输出宽度,当整数或者字符串的长度小于我们规定的长度时,我们会在整数或字符串前加空格补充字符串长度,如果整数或者字符串的长度大于我们规定的最小输出宽度,会按照数据的实际宽度输出。
实际上当实际宽度大于你规定的,最小输出宽度时,你指定的的宽度就失去了意义。
指定对齐方式
默认情况下,print()函数输出的数据总是右对齐,也就是当数据长度不够宽时,数据长度总是靠右边输出。在左边填充空格来保持指定的宽度,我们也可以增加一些标志来改变输出的对齐方式。
标志 | 说明 |
---|---|
- | 指定左对齐 |
+ | 表示输出的数字总要带着符号;正数带+ ,负数带- 。 |
0 | 表示宽度不足时用0补充,而不是补充空格。 |
有几点要说明一下:
- 对于整数,指定左对齐时在右边补0是没有效果的,因为这样会改变整数的值。
- 对于小数,以上三个标志可以同时存在。
- 对于字符串,只能使用
-
标志,因为符号对于字符没有意义,而补0会改变字符串的值。
n=123456
# %09d 表示最小宽度为9,左边补0
print("n(09):%09d" % n)
# %+9d 表示最小宽度为9,带上符号
print("n(+9):%+9d" % n)
f = 140.5
# %-+010f 表示最小宽度为10,左对齐,带上符号
print("f(-+0):%-+010f" % f)
s = "Hello"
# %-10s 表示最小宽度为10,左对齐
print("s(-10):%-10s." % s)
运行结果:
n(09):000123456
n(+9): +123456
f(-+0):+140.500000
s(-10):Hello
指定小数精度
精度要放在最小宽度之后,中间用小数点隔开;也可以不写最小宽度,只写精度:
%m.nf
%.nf
m表示最小宽度,n表示输出精度,.
是必须存在的。
f = 3.141592653
# 最小宽度为8,小数点后保留3位
print("%8.3f" % f)
# 最小宽度为8,小数点后保留3位,左边补0
print("%08.3f" % f)
# 最小宽度为8,小数点后保留3位,左边补0,带符号
print("%+08.3f" % f)
运行结果:
3.142
0003.142
+003.142
转义字符
ASCII编码为每个字符都分配了唯一的编号,称为编码值。在Python中,一个ASCII码除了可以用他的实体(也就是真正的字符)表示,还可以用它的编码值表示。这种使用编码值来间接的表示字符的方式称为转义字符。
转义字符以\0``\x
开头,以\0
开头表示后面跟八进制的编码值,以\x
开头的表示后面跟着十六进制编码值,
ASCII码中总共收录了128个字符,而\0
和\x
后面只能跟两位数字,所以八进制形式并不能将ASCII码中的所有字符都表示出来,而16进制才能将ASCII码中所有的字符表示出来。
str1 = "Oct: \061\062\063"
str2 = "Hex: \x31\x32\x33\x78\x79\x7A"
print(str1)
print(str2)
输出结果:
Oct: 123
Hex: 123xyz
因为\0
和\x
后面只能跟两位数字,因此用八进制表示x、y、z时,八进制数字有三位为170、171、172。所以我们并不能用八进制来表示x、y、z。
Python支持的转义字符
转义字符 | 说明 |
---|---|
\n | 换行符,将光标位置移动到下一行开头。 |
\r | 回车符,将光标位置移动到本行开头。 |
\t | 水平制表符,也即Tab键,一般相当于四个空格 |
\a | 蜂鸣器响铃。注意不是喇叭发声,现在的计算机很多都不带蜂鸣器了,所以响铃一般不一定有效。 |
\b | 退格,将光标位置移动到前一列。 |
\\ | 反斜线 |
' | 单引号 |
" | 双引号 |
\ | 在字符串行尾的续航符,即一行未完,继续到下一行书写。 |
Python数据类型转换
函数 | 作用 |
---|---|
int(x) | 将x转换成整数类型 |
float(x) | 将x转换成浮点类型 |
complex(real,[,imag]) | 创建一个复数 |
str(x) | 将x转换成字符串 |
repr(x) | 将x转换为表达式字符串 |
eval(str) | 计算在字符串中的有效Python表达式,并返回一个对象 |
chr(x) | 将整数x转换为一个字符 |
ord(x) | 将一个字符x转换为它对应的整数值 |
hex(x) | 将一个整数x转换为一个十六进制字符串 |
oct(x) | 将一个整数x转换为一个八进制的字符串 |