Stdin使用Python问题

时间:2014-09-27 18:56:38

标签: python stdin

我最近第一次参加了黑客马拉松,并且遇到了第一个问题。我解决了算法,但无法弄清楚如何使用Python从stdin获取值。这是个问题:

有两个大学生想在宿舍里一起住。宿舍间设有各种大小的客房。有些房间可以容纳两个额外的学生,而有些则不能。

输入:第一个输入行将是一个数字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

如何从stdin中正确接受数据?

1 个答案:

答案 0 :(得分:3)

在这种特殊情况下,使用raw_input将整行作为字符串输入。

inputln = raw_input().split()

这将输入行作为字符串,split()方法将带有空格的字符串拆分为分隔符,并返回列表 inputln

以下代码以您希望的方式运行。

def main():
    totalrooms = 0
    input_list = []
    #n = int(input("Enter the number of rooms: "))
    n = input()

    while n > 0: # You can use for i in range(n) :
        inputln = raw_input().split() #Converts the string into list

        p = int(inputln[0]) #Access first element of list and convert to int
        q = int(inputln[1]) #Second element

        totalrooms += calcRooms(p, q)
        n -= 1

    return totalrooms

或者,您也可以使用fileinput

如果输入文件未作为命令行参数传递,stdin将成为默认输入流。

import fileinput
for line in fileinput.input() :
      #do whatever with line : split() or convert to int etc

请参阅:docs.python.org/library/fileinput.html

希望这有帮助,如果需要,请删除评论以澄清。