前言
好久没有更新博客了,最近一直在忙于工作,空闲之余刷了几道题,简单记录一下,内容是某个大厂的内部练习题,我这里是先从简单难度的开始的,主要是为了培养自己的编程思维和编程能力,每天一道,避免手生。
一、A+B Problem
题目详情:
Calculate A+B,and give me the answer!
解答要求:
时间限制:1000ms ,内存限制:100MB
输入:
Input two intergers A and B , process to the end of file.(watch the Sample Input)
输出:
For each case, output A +B in one line.(Watch the sample output)
样例:
输入样例1:
1 1
输出样例1:
2
输入样例2:
1 1
2 2
4 4
输出样例2:
2
4
8
二、问题分析
这里有一句需要说明,在每个大厂里面,所有的程序提交都必须是函数,所以这里建议平时写程序的时候随手定义函数,在函数内部来写。
本题是某个大厂的内部练习题,本题可以说是非常简单了,但是这里面需要注意一个问题,题目中有一句话我标红了,process to the end of file,这句话很重要,如果没有理解这句话可能这个题难以获得满分。这句话是说:程序执行到文件末尾,所以这是一个while True的死循环,直到把每一行都读取之后,才可以跳出循环,这里面还会有一个try…except语句。结合代码来说明
三、详细代码
def func():
while True:
try:
a,b=map(int,input().strip().split())
print(a+b)
except EOFError:
break
if __name__=='__main__':
func()
输出结果:
1 2
3
4 5
9
四、代码说明
1、map函数
map是python内置函数,会根据提供的函数对指定的序列做映射,其函数格式是:
map(function,iterable,...)
可以看到关于此函数的说明:
""" map(func, *iterables) --> map object Make an iterator that computes the function using arguments from each of the iterables. Stops when the shortest iterable is exhausted. """
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。
将第一个函数,分别作用在可迭代对象上,并输出一个新的list。在本题中,input()输入的是文本格式的数字,所以这里采用map(int,input()),就是将int分别作用在输入的文本数字上,目的是将其转化为数字。那么这里有一个问题:是否可以直接使用int作用在整个input上呢???
def func():
while True:
try:
a,b=int(input().strip().split())
print(a+b)
except EOFError:
break
if __name__=='__main__':
func()
这种方式可行吗???
答案是否定的。
input().split()得到的是一个列表,而int是作用在字符串上的,而不是作用在列表上的
>> input().strip().split() 1 1 Out[3]: ['1', '1']
可以看到input().split()得到的是一个列表,所以,这里建议还是使用map函数
2、map函数的一些示例
del square(x):
return x ** 2
map(square,[1,2,3,4,5])
# 结果如下:
[1,4,9,16,25]
通过使用lambda匿名函数的方法使用map()函数:
map(lambda x, y: x+y,[1,3,5,7,9],[2,4,6,8,10])
# 结果如下:
[3,7,11,15,19]
当不传入function时,map()就等同于zip(),将多个列表相同位置的元素归并到一个元组:
map(None,[2,4,6],[3,2,1])
# 结果如下
[(2,3),(4,2),(6,1)]
3、EOFError函数
try …… except EOFError,就是用来处理题目中标红的要求的,程序要还行到文件末尾,EOFError的作用就是执行到文件末尾然后抛出异常,try……except捕捉到异常然后执行break语句终止循环(详细可参考前面的捕捉异常的文章)。