这是我在网上找到的一段开源代码。我试图解决它但有一些功能,我在其中的Lambda函数遇到特别的麻烦,以及为什么我无法从中打印值。
下面是代码,并注释掉了我尝试过的所有代码行,但结束了[崩溃代码。我想知道他们为什么会崩溃代码。
有一个print语句可以工作,但只能在for循环中使用。在for循环之外它崩溃了。
fo = open('outp3.txt','w')
with open('C-small-practice.in','r') as fi:
rr = lambda: fi.readline().strip()
rrI = lambda: int(rr())
rrM = lambda: map(int,rr().split())
#print rr() ## This print statement doesn't work
#print rrI() ## This print statement doesn't work
#print rrM() ## This print statement doesn't work
#T1= rr() ## this doesn't work/crashes the program
#T2= rrI() ## this doesn't work/crashes the program
#T3= rrM() ## this doesn't work/crashes the program
#print T1 ## This print statement doesn't work
#print T2 ## This print statement doesn't work
#print T3 ## This print statement doesn't work
for tc in xrange(rrI()):
N = rrI()
#M = rr() ## this doesn't work/crashes the program
#O = rrM() ## this doesn't work/crashes the program
print N #this works!
#print M
#print O
A = [rr().split() for _ in xrange(N)]
zetaans = solve(N,A)
zeta = "Case #%i: "%(tc+1) + str(zetaans)
fo.write(zeta+'\n')
fo.close()
以下是它使用的输入
3
3
HYDROCARBON COMBUSTION
QUAIL COMBUSTION
QUAIL BEHAVIOR
3
CODE JAM
SPACE JAM
PEARL JAM
2
INTERGALACTIC PLANETARY
PLANETARY INTERGALACTIC
答案 0 :(得分:1)
rr()
读取一行。
rrI()
读取一行并将其转换为int
。因此,for
循环将在您输入之后运行3
次。
每次调用N = rrI()
时,都会读取下一个数字。然后,rr().split()
被称为N
次。因此,A
是一个长度为N
的列表,其中每个元素本身都是一个列表,对应于输入中的一行,并按空格分成单词。
您可以注意到输入文件格式必须与代码完全匹配,即在调用rrI()
时,您希望看到int
,而不是字符串。
添加添加print rr()
或print rrI()
会导致代码崩溃,因为您还会读取添加行,因此不再遵循输入格式。