我正在做一些在线教程,并且我被一个练习卡住了:编写一个不带参数的函数getBASIC(),并执行以下操作:它应该使用while循环从输入中读取行;当它到达末尾时,它应该以字符串列表的形式返回整个程序。字符串列表示例:
5 GOTO 30
10 GOTO 20
20 GOTO 10
30 GOTO 40
40 END我写了一个程序,但是它不能工作,不过我也会把它贴出来:
def getBASIC():
L=[]
while "END" not in L:
L.append(str(input()))
if str(input()).endswith("END"):
break
return L另外,我注意到你不允许我使用IS或递归。
发布于 2012-08-09 22:39:36
试试这个:
def get_basic():
L = []
while True:
line = str( input() )
L.append( line )
if "END" in line:
break
return L发布于 2012-08-09 22:54:23
有几个错误:
在没有附加到列表的情况下调用input()两次后,第二个time
'END' in L确定列表中是否有'END' (完整)行L (没有)注意:input()已经返回了一个str对象;您不需要对它的返回值调用str()。
要读取输入,直到获得空行,您可以:
def getBASIC():
return list(iter(input, ''))或者读取,直到在行尾遇到END:
def getBASIC():
L = []
while True:
line = input()
L.append(line)
if line.endswith("END"):
break #NOTE: it doesn't break even if `line` is empty
return L发布于 2012-08-09 22:55:24
当我还在学习Pascal的时候,我们使用的是至少需要一次迭代的循环的启发式读取。这在Python中仍然可以很好地工作(我更喜欢它而不是while True / break循环)。
通过简单地测试列表中的最后一行(而不是读取的最后一行),我们不再需要变量来存储输入,并且可以组合读取和追加操作。
def getBASIC():
lines = [input("]")] # use Applesoft BASIC prompt :-)
while not lines[-1].upper().rstrip().endswith("END"):
lines.append(input("]"))
return lineshttps://stackoverflow.com/questions/11885734
复制相似问题