我最近第一次参加了黑客马拉松,并且遇到了第一个问题。我解决了算法,但无法弄清楚如何使用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中正确接受数据?
答案 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
希望这有帮助,如果需要,请删除评论以澄清。