前言

最近参加各个公司的笔试,终于出现了编程题。一直以来我觉得自己Python编程能力还行,不过真正看到了笔试题(科大讯飞2019), 我没被题目难住,反而是被输入难住了……因为我以前,除了只会使用input() 函数读入数据,啥都不会……

最近主要在牛客网上刷题,看了别人的答案,真的很开眼界,很多教科书不会讲的讲法,因此也有机会接触。

我现在的经验是,只要熟练掌握题目的输入输出,那么离解答出题目就不远了。

各种不同的输入方式

  1. input():以回车键标志为一行,需要配合 while 语句
  2. sys.stdin.readline(): 读入一行
  3. 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

特点:

  1. 不需要导入库
  2. 程序会反复运行到输入停止
  3. 目前看来,不需要文本读入的情况,input() + map() 函数可以胜任各种任务
  4. 该方式结束输入的方式是无字符

示例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,才能结束输入,换行符无法结束输入,这种方式适合读入文件。
不过编程测试题,一般不需要读入文件其实。

上述代码的运行效果:

Python在读出的每一行前面加上引号 python在一行中输入_python

上面如果使用 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)
输出效果

Python在读出的每一行前面加上引号 python在一行中输入_数据输入_02


分析:

  1. readlines() 可以读入换行符
  2. readline() 以换行符 “\n” 作为结束输入的符号

总结

经过这篇的总结,其实面对各家公司的笔试题,input() + map()应该是最高效的组合。