Python在线笔试琐碎

Python在线笔试琐碎

从开学来一直狂投简历,等了一个月不过收到两份在线笔试,连一次正式面试都没有,感觉快撑不下去了。这篇博客记录一下在线笔试用Python写算法题时需要注意的一些事项。

处理输入

一些大公司的在线笔试似乎都承包给了第三方,那个平台下的在线写代码功能真是不能再渣。它并不像LeetCode以及其他OJ一样给定函数声明和函数头部,而是需要你自己去处理输入。

首先,Python下的输入基本都为字符串,在单行输入模式下,对于有混杂数字,字符的情况下,我们可以用raw_input()函数来接受处理。

# 输入:{1, 2, 3},23
s = raw_input()

此时s保存就是整个输入,之后就需要手动的去获得里面的数据了。一般常用的处理字符串的操作(如splitintfloat)加上数组切片就可以了。

对于单行输入是纯数字的话,可以使用input()函数来处理。input和raw_input的关系后面提到。

# 输入:23.45
s = input()
type(s)  # float

如果是多行输入呢?比如题目要求多组同时输入,此时我们总不能写个循环使用raw_input函数吧。这时可以使用处理输入的sys.stdin。比如:

# 输入:12\n43\n...
import sys
for line in sys.stdin:  # 使用for处理多个输入
    print(line)

这个时候,line是以字符串的形式保存的一行输入。对于混杂的情况依然需要字符串处理以及切片等操作。不过对于很多的情况,我们可以使用eval函数来处理。eval(str)的含义是将字符串str当成有效的表达式来求值并返回计算结果。比如:

# 例1,输入:{1, 2, 3, 4}
s = raw_input()  # s = '{1, 2, 3, 4}'
d = eval(s)  # d = {1, 2, 3, 4}
type(d) # set类型
# 例2,输入:0xA
s = raw_input()  # s = '0xA'
n = eval(s)  # n = 10
hn = hex(n)  # hn = '0xA'

利用eval,可以很方便的将输入的字符串,并转换为对应的Python类型。另外,由于input函数其实就是调用了raw_input后又用eval函数处理了一下,所以,对于上面两个例子,也可以写成:

# 例1,输入:{1, 2, 3, 4}
d = input()  # s = {1, 2, 3, 4}
type(d) # set类型
# 例2,输入:0xA
n = input()  # n = 10

input & raw_input

它两的关系如下:

def input(prompt):
    return eval(raw_input(prompt))

即raw_input接受返回的只是字符串,而input接受返回的是经过eval进行类型转换后的字符串值,当然,如果输入不能用eval函数处理的话,也会报错。

sys.stdin & input & raw_input

sys.stdin和后面两个都是获取输入的,不过后面两个一般只在处理单行输入时才使用。下面两个是等价的:

import sys
line = sys.stdin.readline()[:-1]  # sys.stdin会接受最后的`\n`,而raw_input不会

等价于:

line = raw_input()

使用sys.stdin.readlines()时能够获取多行输入,在Windows下需要Ctrl+z来停止输入。

补充样例

题目来自hihoCoder上的A+B题。
描述
求两个整数A+B的和

输入
输入包含多组数据。
每组数据包含两个整数A(1 ≤ A ≤ 100)和B(1 ≤ B ≤ 100)。

输出
对于每组数据输出A+B的和。

代码:

while True:
    try:
        (n, m) = (int(x) for x in raw_input().split())
        print(m + n)
    except EOFError:
        break

你可能感兴趣的:(Python-笔试)