前言
最近参加各个公司的笔试,终于出现了编程题。一直以来我觉得自己Python编程能力还行,不过真正看到了笔试题(科大讯飞2019), 我没被题目难住,反而是被输入难住了……因为我以前,除了只会使用input() 函数读入数据,啥都不会……
最近主要在牛客网上刷题,看了别人的答案,真的很开眼界,很多教科书不会讲的讲法,因此也有机会接触。
我现在的经验是,只要熟练掌握题目的输入输出,那么离解答出题目就不远了。
各种不同的输入方式
- input():以回车键标志为一行,需要配合 while 语句
- sys.stdin.readline(): 读入一行
- sys.stdin.readlines(): 按行一次性读入所以行,可用for来迭代
示例1: input
while True:
try:
a = int(input()) # 把一个读入的字符,转换成int型
b = eval(input()) # 可以实现同样的效果
# 不过上述二者,一次只能处理一个输入,如果同时输入两个以上,比如 3 4 ?
# 这时候就要使用map函数了
c, d = map(int, input().split()) # c, d 可以换成一个列表,可以任意多数字
# int 可以更换成任意的函数,该函数会作用于后面可迭代对象的每一个数
except:
break
特点:
- 不需要导入库
- 程序会反复运行到输入停止
- 目前看来,不需要文本读入的情况,input() + map() 函数可以胜任各种任务
- 该方式结束输入的方式是无字符
示例2: sys.stdin
在科大讯飞笔试题的参考代码中,对于读入如下多行的数据:
34
45
56
65
23
或是直接从txt里面读取上述类型的数据,可以考虑下面的代码
import sys
for line in sys.stdin.readlines():
if not line:
break
else:
print(line)
以上代码输入结束符是 EOF == -1, 要从键盘上输入,就是Ctrl+ Z,才能结束输入,换行符无法结束输入,这种方式适合读入文件。
不过编程测试题,一般不需要读入文件其实。
上述代码的运行效果:
上面如果使用 sys.stdin.readline(), 每次只读取一行,所以,结束标志是换行符,同时需要配合while使用。
Readline() 和 Readlines() 的比较
import sys
print("Readline()每次读取一行,回车键结束输入")
line = sys.stdin.readline()
print(line)
print("Readlines()每次读入所有行,结束标号是 Ctrl Z")
line = sys.stdin.readlines()
print(line)
输出效果
分析:
- readlines() 可以读入换行符
- readline() 以换行符 “\n” 作为结束输入的符号
总结
经过这篇的总结,其实面对各家公司的笔试题,input() + map()应该是最高效的组合。