我正在网上做一些教程,我坚持练习:编写一个函数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或RECURSION。
答案 0 :(得分:4)
有几个错误:
input()
两次,而不是第二次将其附加到列表中'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
答案 1 :(得分:2)
当我学习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 lines
答案 2 :(得分:1)
raw_input()
代替input()
。 input()函数从标准输入中获取字符串,并尝试将其作为python源代码执行。 raw_input()将按预期返回一个字符串。input()
2次。这意味着你等待在一个循环迭代中输入两个字符串。你的while循环中不需要最后一个条件(if语句)。当 L 中遇到“END”时,它会结束。下一个代码应该完成这项工作:
def getBASIC():
L=[]
while True:
inp = raw_input()
L.append(inp)
if inp.endswith('END'):
break
return L
答案 3 :(得分:1)
试试这个:
def get_basic():
L = []
while True:
line = str( input() )
L.append( line )
if "END" in line:
break
return L
答案 4 :(得分:1)
您的代码存在以下问题。
while "END" not in L
”将无效
input()
”相当于“eval(raw_input()))
”。因此,Python正在尝试评估“GOTO”语句。if str(input()).endswith("END"):
”不会将输入附加到L 所以,这是你的功能的更新版本:
def getBASIC():
L = []
while True:
# Grab input
L.append(str(raw_input()))
# Check if last input ends with "END"
if L[-1].endswith("END"):
break
return L