【发布时间】:2014-09-30 11:49:49
【问题描述】:
我最近第一次参加黑客马拉松,却被第一个问题卡住了。我解决了算法,但无法弄清楚如何使用 Python 从标准输入中获取值。这是一个问题:
有两个大学生想一起住在宿舍里。宿舍里有大小不一的房间。有些房间可以容纳两个额外的学生,而有些则不能。
输入:第一行输入一个数字n(1 ≤ n ≤ 100),即宿舍的房间总数。在此之后将有 n 行,其中每行包含两个数字 p 和 q (0 ≤ p ≤ q ≤ 100)。 P 是已经在房间里的学生人数,而 q 是房间里可以住的最大学生人数。
输出:打印两个学生可以住的房间数。
这是我的解决方案。我已经使用 raw_input() 对其进行了测试,它在我的解释器上完美运行,但是当我将其更改为 input() 时,我收到一条错误消息。
def calcRooms(p, q):
availrooms = 0
if q - p >= 2:
availrooms += 1
return availrooms
def main():
totalrooms = 0
input_list = []
n = int(input())
print n
while n > 0:
inputln = input().split() #accepts 2 numbers from each line separated by whitespace.
p = int(inputln[0])
q = int(inputln[1])
totalrooms += calcRooms(p, q)
n -= 1
return totalrooms
print main()
错误信息:
SyntaxError: unexpected EOF while parsing
如何正确接受来自标准输入的数据?
【问题讨论】:
-
我喜欢使用 sys.stdin.readline() 或“for line in sys.stdin:”。然后你可以“line.split()”并转换为 int 或其他。 input() 在 CPython 2.x 中工作,但它有点不安全。在 3.x 中,我相信 input() 很好。在 2.x 中,您必须使用 raw_input() 并记住不要使用 input()。但我还是更喜欢使用 sys.stdin。