Python笔记_第一篇_面向过程_第一部分_4.格式化输入和输出

  开始Python编程首先要学习两类最常用(经常出现和使用)输入和输出。学习编程最重要的状态就是“人机交互”,所以这两类函数显得尤其重要。

 

第一部分 格式化输入

1.1   函:input

    语:input(*args, **kwargs)

      用:从标准输入读取字符。通过input函数都为字符串形式的输入,不过可以通过数据类型的转换成想要的数据类型。

  例1:

 1 # input
 2 age1 = input("请输入您的年龄: ")
 3 print(type(age1))
 4 print("age = %s" % age1)
 5 # 输出结果:
 6 # 请输入您的年龄: 18
 7 # <class 'str'>   # 输入为字符串形式,打印结果也是字符串
 8 # age = 18
 9 
10 
11 age2 = int(input("请输入您的年龄: "))
12 print(type(age2))
13 print("age = %d" % age2)
14 # 输出结果:
15 # 请输入您的年龄: 18
16 # <class 'int'>   # 输入为字符串形式,通过类型转换,把字符串转换成整型,打印结果是整型
17 # age = 18

 

第二部分 格式化输出

2.1   函:print

    语:print(*object, sep=' ', end=' ',file=sys.stdout,flush=False/True)

      用:*object(打印对象),sep=' '(每个对象按照关键字进行分割,默认为空格), end=' '(并行打印,不换行,默认为空格,可添加以什么结尾)

        file=sys.stdout(指定对象必须要有写writ的方法,如果指定对象没有该方法或者不存在,就会返回默认值,直接在指定文本中打印内容),

        flush=False/True(文本刷新)

  例2:*object

 1 # 打印一个整型
 2 # print
 3 print(18)
 4 print(type(18))
 5 # 输出结果:
 6 # 18
 7 # <class 'int'>
 8 
 9 # 打印一个浮点型
10 print(18.18)
11 print(type(18.18))
12 # 输出结果:
13 # 18.18
14 # <class 'float'>
15 
16 # 打印一个字符串
17 print("Thomas")
18 print(type("Thomas"))
19 # 输出结果:
20 # Thomas
21 # <class 'str'>
22 
23 # 交互式打印,也叫连续打印
24 print(18, 18, 18, 18)
25 # 输出结果:
26 # 18 18 18 18
27 print("Thomas", "Peters")
28 print("Thomas" "Peters")
29 # 输出结果:
30 # Thomas Peters
31 # ThomasPeters  # 如果对象不是变量,而是字符串,可以不用分隔符,此时python会把两个字符串当做一个输出

  例3:sep=' '

1 # sep=' '
2 print("Thomas", "Peters", "Jessie", sep="***")
3 # 输出结果:
4 # Thomas***Peters***Jessie  # 用“***”来进行分割字符串

  例4:end=' '

1 # end=' '
2 print("Thomas", end="...")
3 print("Thomas", end="...")
4 print("Thomas", end="...")
5 print("Thomas", end="\n")  # 如果不设置换行符,将一致顺序打印
6 print("Thomas", end="...")
7 # 输出结果:
8 # Thomas...Thomas...Thomas...Thomas
9 # Thomas...

  例5:file=sys.stdout

1 # file = sys.stdout
2 new = open("new.txt","w") # 新建一个对象new,对应的是new.txt文本文件,属性可写
3 print("aaa", end = "hello\n", file = new)
4 # 输出,file 指向该对象,不能指向txt文本
5 new.close()
6 # 关闭打开文件
7 # 运行结果:
8 # 在new.txt稳步中成功写入字符串aaahello

  例6:flush=True/False

1 # flush = False/True
2 f = open("new1.txt", "w")
3 print("Thomas", file=f)
4 # 此时文本当中的内容仍为空,f.close()才会显示内容
5 print("Thomas", file=f,flush=True)
6 # 如果加上flush=真,直接就会在文本中显示,不用关闭文本

 

2.2   格式化输出

  格式化输出:在print表达语句中占位,用格式化的方法进行填充、显示等格式化操作,常用的方法为:%(百分号)占位法和format函数法。

2.2.1   百分号(%)占位法(也叫占位符)

  语法格式为:print("%?" % (对应顺序格式化内容))

  2.1.1.1   %d  %s  %f 的用法

  (1) 常规用法

1 # %d %s %f的常规用法
2 # 作用:整数型、数值型、浮点型常规占位法
3 print("%d" % 800.52345) # 只保留整数部分(不含四舍五入)
4 print("%s" % "字符串") # 输出一个字符串
5 print("%f" % 800.52345) # 默认浮点型为6位小数,如果多的位数按四舍五入进行递进,如果少于6位补0
6 # 输出结果:
7 # 800
8 # 字符串
9 # 800.523450

  (2) 规定字段长度的用法(默认长度从左端开始,右端对齐)

1 # %d %s %f的规定字段长度的用法(默认长度从左端开始)
2 print("%10d" % 800.52345)  # 规定总长度为10个的整型输出
3 print("%10s" % "字符串") # 规定总长度为10个的字符串型输出
4 print("%20f" % 800.52345) # 规定总长度为20个浮点型输出
5 # # 输出结果:
6 #        800
7 #        字符串
8 #           800.523450

  (3) %f 的特殊方法:四舍五入

1 # %f的特殊方法,四舍五入
2 print("%.4f" % 800.52345) # 保留小数的四舍五入方法
3 # 输出结果:
4 # 800.5235

  (4) 左对齐,并填充的方式(默认右对齐"+"可以不写,左对齐为"-")

1 # %d %s %f运行左对齐的方法(默认长度从字符结束端开始)
2 print("%-10d" % 800.52345) # 规定总长度为10个的整型输出
3 print("%-10s" % "字符串") # 规定总长度为10个的字符串型输出
4 print("%-20f" % 800.52345) # 规定总长度为20个浮点型输出
5 # 输出结果
6 # 800       |10个字符
7 # 字符串       |10个字符 
8 # 800.523450     |20个字符

  (5) 左对齐且填充0的方式(默认长度从左端开始)

1 # %d %f对齐填充0的方式(默认长度从左端开始)
2 print("%010d" % 800.52345) # 规定总长度为10个的整型输出,非字段位填充0
3 print("%010s" % "字符串") # 只对数字型变量有效,字符串型无效。
4 print("%020f" % 800.52345) # 规定总长度为20个浮点输出,非字段位填充0
5 # 输出结果:
6 # 0000000800
7 #        字符串  # 只对数字型变量有效,字符串型无效。
8 # 0000000000800.523450

  2.1.1.2   %c 的用法

  对应一个字符的输出(char)类型的,用途不大

1 # %c
2 # 作用:对应一个字符的输出(char)类型
3 print("%c" % "A")
4 # 输出结果:
5 # A

  2.1.1.3   %i  %u 的用法

  转成有符号10进制整数(用法同%d)、转成无符号的10进制整数

1 # %i %u
2 # 作用:转成有符号10进制整数(同%d)、转成无符号的10进制整数
3 print("%i" % -800.52345)
4 print("%u" % -800.52345)
5 # 输出结果:
6 # -800
7 # -800

  2.1.1.4   %o  %x  %X 的用法

  这几个符号的用法就是八进制、十六进制、十六进制的转换(这个大写的X是吧表示十六进制的x显示成大写)

1 # %o %x %X
2 # 作用:转换为八进制数、转换为十六进制数、转换为十六进制数(X位置大写)
3 print("%o" % 123456)
4 print("%x" % 123456)
5 print("%X" % 123456)
6 # 输出结果:
7 # 361100
8 # 1e240
9 # 1E240

  2.1.1.5   %e  %E 的用法

  用科学计数法来表示数字、第二个大写的E也是显示位置可以换成大写的E

1 # %e %E
2 # 作用:用科学计数法来表示数字、用科学计数法来表示数字(E大小)
3 print("%20e" % 800.123456) # 另外前面加字段长度也是可以的同上
4 print("%20E" % 800.123456)
5 # 输出结果
6 #         8.001235e+02
7 #         8.001235E+02

  2.1.1.6   %g  %G 的用法

  根据值的大小长度自动转换成%e还是%f的显示方式,如果小数点后四位都为0的话,选择科学计数法;如果小数点后四位不全为0的话选择用%f的显示方式(6位且四舍五入)

1 # %g %G
2 # 作用:根据值的大小采用%e或者%f的方式显示,如果小数点后四位都为0的话,选择科学计数法,
3 # 如果小数点后四位不全为0的话选择%f的四舍五入方式(6位)
4 print("%g" % 0.00003333)
5 print("%g" % 0.33333353)
6 # 输出结果
7 # 3.333e-05
8 # 0.333334

 

2.2.2   format函数法

  format函数讲究{ }(花括号)来替代和前面占位符中的‘%’的占位方式,格式为:str.format();从这里看出format也是一种类的调用方式

  2.2.2.1  基本用法

  通过下标或者默认顺序位的方式进行占位格式化操作

1 # 基本用法
2 print("{} {}".format("Hellow","world")) # 默认安装顺序的方式进行格式化输出
3 print("{1} {0}".format("Hello", "World")) # 默认安装format函数中的字段顺序,进行下标方式输出
4 # 输出结果:
5 # Hellow world
6 # World Hello
7 # 这里可以看出format当中的顺序位为(0, 1, 2, 3, ...),对应左侧花括号的位置。

  2.2.2.2   设置参数用法

 1 # 设置参数用法:
 2 # 通过字符串型
 3 print("网站名:{name}, 地址:{url}".format(name = "菜鸟教程", url = "www.runoob.com"))
 4 # 输出结果:
 5 # 网站名:菜鸟教程, 地址:www.runoob.com
 6 
 7 
 8 # 通过字典设置参数
 9 site = {"name": "菜鸟教程", "url": "www.runoob.com"}
10 print("网站名:{name}, 地址:{url}".format(**site)) # **site,是形参的一种表示方式**kwags类似于字典中的:后内容
11 # 输出结果:
12 # 网站名:菜鸟教程, 地址:www.runoob.com
13 
14 
15 # 通过列表索引设置参数
16 my_list = ["菜鸟教程", "www.runoob.com"]
17 print("网站名:{0[0]}, 地址:{0[1]}".format(my_list)) #通过列表占位的方式,必须用0下标的格式输出{0[n]}
18 # 输出结果:
19 # 网站名:菜鸟教程, 地址:www.runoob.com

  2.2.2.3   可用类结构传入对象

1 # 可以用类结构传入对象
2 class AssignValue(object):
3     def __init__(self, value):
4         self.value = value
5 my_value = AssignValue(6)
6 print("value 为:{0.value}".format(my_value)) # 0是可选的
7 # 输出结果:
8 # value 为:6

  2.2.2.4   数字格式化方式

  (1)  ^、<、>  分别为居中对齐、左对齐、右对齐,后面的宽度也是可以执行的

  (2)表示后面填充的字符,只能是一个字符,不指定默认是空格填充

  (3) + 表示在正数前面显示+- 表示在负数前面显示-号,空格表示整数前面加空格

# 数字格式化方式
# ^, <, > 分布为居中,左对齐,右对齐,后面可以指定宽度
# :号后面带填充的字符,只能是一个字符,不指定则默认是空格填充
# + 表示在正数前显示+,负数前显示-,空格表示正数前加空格
print("{:.2f}".format(3.1412926)) #保留小数点后两位
#输出结果:3.14
print("{:+.2f}".format(3.1415926)) # 保留小数点后两位且在数字前面加+号
#输出结果:+3.14
print("{:-.2f}".format(-3.1415926)) # 保留小数点后两位且在负数前面加-号
#输出结果:-3.14
print("{:.0f}".format(3.1415926)) # 不保留小数,如果是浮点数这样用
#输出结果:3
print("{: .0f}".format(3.1415926)) # 不保留小数,前面加一个空格
#输出结果: 3

print("{:*>10d}".format(5)) # 右对齐,其他位置填充*号(这里可填充的东西不限)
#输出结果:*********5
print("{:x<10d}".format(5)) # 左对齐,其他位置填充x号(同上)
#输出结果:5xxxxxxxxx
print("{:.^10d}".format(5)) # 居中对齐,其他位置填充.号(同上)
#输出结果:....5.....
print("{:>10d}".format(5)) # 右对齐,不填充
#输出结果:         5
print("{:<10d}".format(5)) # 左对齐,不填充
#输出结果:5         |空9个
print("{:^10d}".format(5)) # 居中对齐,不填充
#输出结果:    5     |

print("{:,}".format(10000000)) # 按照三位方式填充,一般用于数字表示
#输出结果:10,000,000
print("{:.2%}".format(0.25)) # 保留小数点两位的百分数表示,添加百分号
#输出结果:25.00%
print("{:.1e}".format(1000000000)) # e前面的取0多少个
#输出结果:1.0e+09    

  2.2.2.5   b、d、o、x 分别为二进制、十进制、八进制、十六进制的显示方式,两次分汇编显示方式和C语言(python语言显示方式)显示方式

# b、d、o、x 分别是二进制、十进制、八进制、十六进制
print("{:b}".format(11)) # 汇编表示方式
#输出结果:1011
print("{:d}".format(11)) # 汇编表示方式
#输出结果:11
print("{:o}".format(11)) # 汇编表示方式
#输出结果:13
print("{:x}".format(11)) # 汇编表示方式
#输出结果:b
print("{:X}".format(11)) # 汇编表示方式
#输出结果:B

print("{:#b}".format(11)) # C语言表示方式
#输出结果:0b1011
print("{:#d}".format(11)) # C语言表示方式
#输出结果:11
print("{:#o}".format(11)) # C语言表示方式
#输出结果:0o13
print("{:#x}".format(11)) # C语言表示方式
#输出结果:0xb
print("{:#X}".format(11)) # C语言表示方式
#输出结果:0XB

  2.2.2.6   大括号(花括号)的转义表示

1 print("{} 对应的位置是 {{0}}".format("runoob")) # 可以使用大括号 {} 来转义大括号,返回一个{0}
2 # 输出结果:{0}
3 print("{} 对应的位置是 {{}}".format("runoob")) # 可以使用大括号 {} 来转义大括号,返回一个{}
4 # 输出结果:{}

  2.2.2.7  format_map函数的用法

  与format 函数差不多,只不过里面加入了一种字典形式

1 # format_map函数法 #
2 # 与format用法差不多,不过里面是一种字典形式的输出
3 print("{name} {Age}".format_map({"name": "Alex", "Age": 18}))

 

2.2.3   转义字符的使用

  (1)   "\"   续行符。作用:如果一行写的太多了写不开可以用这个来进行续行处理

1 # \ 续行符
2 # 作用,如果一行写的太多写不开用这个进行续行处理
3 print("生逢灿烂的日子生逢灿烂的日子生逢灿烂的日子生逢灿烂的日子生逢灿烂的日子生逢灿烂的日子生逢灿烂的日子生逢灿烂的日子生逢灿烂的日子生逢灿烂的日子生逢灿烂你好中国你好大家我们来来吧来吧可能\
4  C语言表示方式")

  (2)   "\\"   添加反斜杠符号

1 # \\
2 # 作用:反斜杠符号
3 print("生逢灿烂的日子\\"+"生逢灿烂的日子\\")
4 # 输出结果:
5 # 生逢灿烂的日子\生逢灿烂的日子\

  (3)   "\'"   "\""   添加单引号或者双引号

1 # \' 和 \"
2 # 作用:添加单引号和双引号
3 print("\'生逢灿烂的日子\'")
4 print("\"生逢灿烂的日子\"")
5 # 输出结果:
6 # '生逢灿烂的日子'
7 # "生逢灿烂的日子"

  (4)   "\a"   响铃

1 # \a
2 # 作用:响铃
3 print("生逢灿烂的日子\a")

  (5)   "\b"   退一格

1 # \b
2 # 作用:退一格
3 print("生逢灿烂的日子\b")
4 # 输出结果:
5 # 生逢灿烂的日

  (6)   "\e"   任意转义

1 # \e
2 # 作用:任意的转义
3 print("生逢灿烂的日子\e")
4 # 输出结果:
5 # 生逢灿烂的日子\e

  (7)   "\000"   空一格

1 # \000
2 # 作用:空
3 print("生逢灿烂的日子\000生逢灿烂的日子")

  (8)   "\n"   换行

1 # \n
2 # 作用:换行
3 print("生逢灿烂的日子\n这是换行后的字符串")
4 # 输出结果:
5 # 生逢灿烂的日子
6 # 这是换行后的字符串

  (9)   "\t"   横向制表符

1 # \t
2 # 作用:横向制表符
3 print("生逢灿烂的日子\t增加一个横向制表符")
4 # 输出结果:
5 # 生逢灿烂的日子    增加一个横向制表符

  (10)    "\v"   纵向制表符

1 # \v
2 # 作用:纵向制表符
3 print("生逢灿烂的日子\v增加一个纵向制表符")

  (11)   "\r"   返回起始位。作用:把前面的内容全部取消掉,重新进行打印

# \r
# 作用:返回起始位
print("生逢灿烂的日子\r这里是起始位,\r前面的字符不显示了")
# 输入结果:
# 这里是起始位,前面的字符不显示了
# 前面的字符不显示了

  (12)   r   转义取消

1 # r  转义取消
2 print("\rwww.cnblogs.com\noah0532\p\t8413534.html")  # 如果有些字符前面由于显示组合形成了转义字符
3 # 输出结果:
4 # www.cnblogs.com
5 # oah0532\p    8413534.html
6 print(r"\rwww.cnblogs.com\noah0532\p\t8413534.html")  # 通过在字符串前面加入一个取消转义
7 # 输出结果:
8 # \rwww.cnblogs.com\noah0532\p\t8413534.html  # 正常显示

 

2.2.4   格式化输出的其他问题

  2.2.4.1   大篇幅打印

  在大篇幅打印的时候可以用大篇幅注释的方式进行打印

1 # 大篇幅的打印
2 print("""生逢灿烂的日子
3 生逢灿烂的日子生逢灿烂的日子
4 生逢灿烂的日子生逢灿烂的日子
5 """)

  2.2.4.2   不换行横向输出方式

1 # 常用技巧
2 # 不换行横向输出
3 for x in range(0, 10):
4     print(x, end="")
输出结果:0123456789
posted @ 2018-02-04 16:43  时海涛|Thomas  阅读(366)  评论(0编辑  收藏  举报