我心中的王者:Python-第4章 基本输入与输出

我心中的王者:Python-第4章 基本输入与输出

本章基本上将介绍如何在屏幕上做输入与输出,另外也将讲解使用Python内置的实用功能。

4-1 Python的辅助说明help( )

help( )函数可以列出某一个Python的指令或函数的使用说明。

实例1: 列出输出函数print( )的使用说明。

在这里插入图片描述

当然程序语言是全球化的语言,所有说明是以英文为基础,要有一定的英文能力才可彻底了解,不过,笔者在本书会详尽说明。

4-2 格式化输出数据使用print( )

相信读者经过前三章的学习,已经对使用print( )函数输出数据非常熟悉了,该是时候完整解说这个输出函数的用法了。

4-2-1 函数print( )的基本语法

它的基本语法格式如下:

 print(value,, sep=” ”, end=”\n”,file=sys.stdout, flush=False)

  • value表示想要输出的数据,可以一次输出多个数据,各数据间以逗号隔开。
  • sep当输出多个数据时,可以插入各个数据的分隔字符,默认是一个空格字符。
  • end当数据输出结束时所插入的字符,默认是插入换行字符,所以下一次print( )函数的输出会在下一行输出。
  • file数据输出位置,默认是sys.stdout,也就是屏幕。
  • flush是否清除数据流的缓冲区,预设是不清除。

程序实例ch4_1.py: 重新设计ch3_17.py,其中在第二个print( ),2个输出数据的分隔字符是“$$$ ”。

# ch4_1.py
num1 = 222
num2 = 333
num3 = num1 + num2
print("这是数值相加", num3)
str1 = str(num1) + str(num2)
print("强制转换为字符串相加", str1, sep=" $$$ ")

执行结果

这是数值相加 555
强制转换为字符串相加 $$$ 222333

程序实例ch4_2.py: 重新设计ch4_1.py,将2个数据在同一行输出,彼此之间使用Tab键隔开。

# ch4_2.py
num1 = 222
num2 = 333
num3 = num1 + num2
print("这是数值相加", num3, end="\t")  # 以Tab键值位置分隔2笔数据输出
str1 = str(num1) + str(num2)
print("强制转换为字符串相加", str1, sep=" $$$ ")

执行结果

这是数值相加 555        强制转换为字符串相加 $$$ 222333

4-2-2 格式化print( )输出

在使用格式化输出时,基本使用格式如下:

 print("  …输出格式区…  "  %  ( 变量系列区,  …  ))

在上述输出格式区中,可以放置变量系列区对应的格式化字符,基本意义如下:

  • %d:格式化整数输出。
  • %f:格式化浮点数输出。
  • %x:格式化16进位整数输出。
  • %o:格式化8进位整数输出。
  • %s:格式化字符串输出。

程序实例ch4_3.py: 格式化输出的应用。

# ch4_3.py
score = 90
str1 = "晓波"
count = 1
print("%s你的第 %d 次物理考试成绩是 %d" % (str1, count, score))

执行结果

晓波你的第 1 次物理考试成绩是 90

设计程序时,print( )函数内的输出格式区也可以用一个字符串变量取代。

程序实例ch4_4.py: 重新设计ch4_3.py,在print( )内用字符串变量取代字符表列,读者可以参考第5和6行与原先ch4_3.py的第5列作比较。

# ch4_4.py
score = 90
str1 = "晓波"
count = 1
formatstr = "%s你的第 %d 次物理考试成绩是 %d"
print(formatstr % (str1, count, score))

执行结果 与ch4_3.py相同。

晓波你的第 1 次物理考试成绩是 90

程序实例ch4_5.py: 格式化8进位和16进位输出的应用。

# ch4_5.py
x = 100
print("100的16进位 = %x\n100的 8进位 = %o" % (x, x))

执行结果

10016进位 = 64
1008进位 = 144

程序实例ch4_6.py: 将整数与浮点数分别以%d、%f、%s格式化,同时观察执行结果。特别要注意的是,浮点数以整数%d格式化后,小数数据将被舍去。

# ch4_6.py
x = 10
print("整数%d \n浮点数%f \n字符串%s" % (x, x, x))
y = 9.9
print("整数%d \n浮点数%f \n字符串%s" % (y, y, y))

执行结果

整数10 
浮点数10.000000
字符串10
整数9
浮点数9.900000
字符串9.9

4-2-3 精准控制格式化的输出

在上述程序实例ch4_6.py中,我们发现最大的缺点是无法精确控制浮点数的输出位置,print( )函数在格式化过程中,有提供功能可以让我们设定保留多少格的空间让资料做输出,语法如下:

  • %(+|-)nd:格式化整数输出。
  • %(+|-)m.nf:格式化浮点数输出。
  • %(+|-)nx:格式化16进位整数输出。
  • %(+|-)no:格式化8进位整数输出。
  • %(-)ns:格式化字符串输出。

上述对浮点数而言,m代表保留多少格数供输出(包含小数点),n则是小数数据保留格数。至于其他的数据格式n则是保留多少格数空间,如果保留格数空间不足将完整输出数据,如果保留格数空间太多则数据靠右对齐。

如果格式化数值数据有加上负号(-),表示保留格数空间有多时,数据将靠左输出。如果格式化数值数据有加上正号(+),表示输出数据是正值时,将在左边加上正值符号。

程序实例ch4_7.py: 格式化输出的应用。

# ch4_7.py
x = 100
print("x=/%6d/" % x)
y = 10.5
print("y=/%6.2f/" % y)
s = "Deep"
print("s=/%6s/" % s)
print("以下是保留格数空间不足的实例")
print("x=/%3d/" % x)
print("y=/%3.2f/" % y)
print("s=/%3s/" % s)

执行结果

x=/   100/
y=/ 10.50/
s=/  Deep/
以下是保留格数空间不足的实例
x=/100/
y=/10.50/
s=/Deep/

程序实例ch4_8.py: 格式化输出,靠左对齐的实例。

# ch4_8.py
x = 100
print("x=/%-6d/" % x)
y = 10.5
print("y=/%-6.2f/" % y)
s = "Deep"
print("s=/%-6s/" % s)

执行结果

x=/100   /
y=/10.50 /
s=/Deep  /

程序实例ch4_9.py: 格式化输出,正值数据将出现正号(+)。

# ch4_9.py
x = 10
print("x=/%+6d/" % x)
y = 10.5
print("y=/%+6.2f/" % y)

执行结果

x=/   +10/
y=/+10.50/

程序实例ch4_10.py: 格式化输出的应用。

# ch4_10.py
print(" 姓名    国文    英文    总分")
print("%3s  %4d    %4d    %4d" % ("冰儒", 98, 90, 188))
print("%3s  %4d    %4d    %4d" % ("雨星", 96, 95, 191))
print("%3s  %4d    %4d    %4d" % ("冰雨", 92, 88, 180))
print("%3s  %4d    %4d    %4d" % ("星宇", 93, 97, 190))

执行结果

 姓名    国文    英文    总分
 冰儒    98      90     188
 雨星    96      95     191
 冰雨    92      88     180
 星宇    93      97     190

4-2-4 format( )函数

这是Python增强版的格式化输出功能,字符串使用format方法做格式化的动作,它的基本使用格式如下:

 print("  …输出格式区…  " .format( 变量系列区,  …  ))

在输出格式区内的字符串变量使用“{ }”表示。

程序实例ch4_11.py: 使用format( )函数重新设计ch4_3.py。

# ch4_11.py
score = 90
str1 = "晓波"
count = 1
print("{}你的第 {} 次物理考试成绩是 {}".format(str1, count, score))

执行结果 与ch4_3.py相同。

程序实例ch4_12.py: 以字符串代表输出格式区,重新设计ch4_11.py。

# ch4_12.py
score = 90
str1 = "晓波"
count = 1
str2 = "{}你的第 {} 次物理考试成绩是 {}"
print(str2.format(str1, count, score))

执行结果 与ch4_3.py相同。

4-2-5 字符串输出与基本排版的应用

其实适度利用输出格式,也可以产生一封排版的信件,以下程序的前3行会先利用sp字符串变量建立一个含40格的空白格数,然后产生对齐效果。

程序实例ch4_13.py: 有趣排版信件的应用。

# ch4_13.py
sp = " " * 40
print("%s   1231 Delta Rd" % sp)
print("%s   Oxford, Mississippi" % sp)
print("%s   USA\n\n\n" % sp)
print("Dear Ivan")
print("I am pleased to inform you that your application for fall 2020 has")
print("been favorably reviewed by the Electrical and Computer Engineering")
print("Office.\n\n")
print("Best Regards")
print("Peter Malong")

执行结果

                                     1231 Delta Rd
                                           Oxford, Mississippi
                                           USA



Dear Ivan
I am pleased to inform you that your application for fall 2020 has
been favorably reviewed by the Electrical and Computer Engineering
Office.


Best Regards
Peter Malong

4-2-6 一个无聊的操作

程序实例ch4_13.py第2行,利用空格乘以40产生40个空格,功能是用于排版。如果将某个字符串乘以500,然后用print( )输出,可以在屏幕上建立一个无聊的画面。

实例1: 在屏幕上建立一个无聊的画面。

在这里插入图片描述

上述实例是教导读者,活用Python,可以产生许多意外的结果。

4-3 输出数据到文件

在4-2-1节笔者有讲解在print( )函数中,默认输出是屏幕sys.stdout,其实我们可以利用这个特性将输出导向一个文件。

4-3-1 打开一个文件open( )

open( )函数可以打开一个文件供读取或写入,如果这个函数执行成功,会传回文件对象,这个函数的基本使用格式如下:

file_Obj = open(file, mode=“r”) # 左边只列出最常用的2个参数

  • file用字符串列出欲打开的文件。
  • mode打开文件的模式,如果省略代表是mode=“r”,使用时如果mode=“w”或其他,也可以省略mode=,直接写“w”。也可以同时具有多项模式,例如,“wb”代表以二进制文件打开供写入,可以是下列基本模式。

“r”:这是预设,打开文件供读取(read)。
“w”:打开文件供写入,如果原先文件有内容将被覆盖。
“a”:打开文件供写入,如果原先文件有内容,新写入数据将附加在后面。
“x”:打开一个新的文件供写入,如果所打开的文件已经存在会产生错误。
“b”:打开二进制文件模式。
“t”:打开本文(txt)文件模式,这是默认。
“+”:打开文件供更新用。

  • file_Obj这是文件对象,读者可以自行给予名称,未来print(
    )函数可以将输出导向此对象,不使用时要关闭“file_Obj.close( )”,才可以返回操作系统的文件管理器观察执行结果。

4-3-2 使用print( )函数输出数据到文件

程序实例ch4_14.py: 将数据输出到文件的实例,其中输出到out1.txt采用“w”模式,输出到out2.txt采用“a”模式。

# ch4_14.py
fstream1 = open("d:\python\ch4\out1.txt", mode="w") # 取代先前资料
print("Testing for output", file=fstream1)
fstream1.close( )
fstream2 = open("d:\python\ch4\out2.txt", mode="a") # 附加数据后面
print("Testing for output", file=fstream2)
fstream2.close( )

执行结果

如果执行程序一次,可以得到内容相同的out1.txt和out2.txt。但是如果持续执行,out2.txt内容会持续增加,out1.txt内容则保持不变,下列是检查文件夹内容。
在这里插入图片描述

下列是执行2次此程序,out1.txt和out2.txt的内容。

在这里插入图片描述

4-4 数据输入input( )

这个input( )函数功能与print( )函数功能相反,这个函数会从屏幕读取用户从键盘输入的数据,它的使用格式如下:

  • value = input("prompt: ")

value是变量,所输入的数据会存储在此变量内,特别需注意的是所输入的数据不论是字符串或是数值数据返回到value时一律是字符串数据,如果要执行数学运算需要用int( )函数转换为整数。

程序实例ch4_15.py: 认识输入数据类型。

# ch4_15.py
name = input("请输入姓名:")
engh = input("请输入成绩:")
print("name数据类型是", type(name))
print("engh数据类型是", type(engh))

执行结果

请输入姓名:晓波
请输入成绩:100
name数据类型是 <class 'str'>
engh数据类型是 <class 'str'>

程序实例ch4_16.py: 基本数据输入与运算。

# ch4_16.py
print("欢迎使用成绩输入系统")
name = input("请输入姓名:")
engh = input("请输入英文成绩:")
math = input("请输入数学成绩:")
total = int(engh) + int(math)
print("%s 你的总分是 %d" % (name, total))

执行结果

请输入姓名:晓波
请输入英文成绩:100
请输入数学成绩:100
晓波 你的总分是 200

接下来的程序主要是处理中文名字与英文名字的技巧,假设要求使用者分别输入姓氏(lastname)与名字(firstname),在中文要处理成命名,可以使用下列字符串连接方式。

 fullname = lastname +firstname

在英文首先名字在前面,姓氏在后面,同时中间有一个空格,因此处理方式如下:

 fullname =firstname + " " + lastname

程序实例ch4_17.py: 请分别输入中文和英文的姓氏以及名字,本程序将会组合名字并输出问候语。

# ch4_17.py
clastname = input("请输入中文姓氏:")
cfirstname = input("请输入中文名字:")
cfullname = clastname + cfirstname
print("%s 欢迎使用本系统" % cfullname)
lastname = input("请输入英文Last Name:")
firstname = input("请输入英文First Name:")
fullname = firstname + " " + lastname
print("%s Welcome to SSE System" % fullname)

执行结果

请输入中文姓氏:妘
请输入中文名字:晓波
妘晓波 欢迎使用本系统
请输入英文Last Name:yah
请输入英文First Name:andy
andy yah Welcome to SSE System

4-5 列出所有内置函数dir( )

阅读至此,相信读者已经使用了许多Python内置的函数了,如help( )、print( )、input( )等,读者可能想了解到底Python有提供哪些内置函数可供我们在设计程序时使用,可以使用下列方式列出Python所提供的内置函数。

 dir(_ _ builtins _ _)  # 列出Python内置函数

实例1: 列出Python所有内置函数。
在这里插入图片描述

在专栏,笔者会依功能分类将常用的内置函数分别融入各章节主题中,如果读者想先了解某一个内置函数的功能,可参考4-1节使用help( )函数。

习题

  1. 请参考ch4_10.py,使用班上第一次月考成绩,将结果输出至文件。

  2. 请参考ch4_13.py,写一封信给老师,叙述学习Python的心得。

  3. 写一个程序要求用户输入3位数数字,最后舍去个位数字输出,例如输入是103输出是100,输入是776输出是770。

  4. 请输入华氏温度,将结果转成摄氏温度输出。

  5. 请输入摄氏温度,将结果转成华氏温度输出。

在这里插入图片描述

  • 32
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值