GoTo(基础)课程

时间:2012-08-09 14:31:48

标签: python python-3.x goto

我正在网上做一些教程,我坚持练习:编写一个函数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。

5 个答案:

答案 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)

  1. 使用raw_input()代替input()。 input()函数从标准输入中获取字符串,并尝试将其作为python源代码执行。 raw_input()将按预期返回一个字符串。
  2. 你在循环中使用input() 2次。这意味着你等待在一个循环迭代中输入两个字符串。你的while循环中不需要最后一个条件(if语句)。当 L 中遇到“END”时,它会结束。
  3. 下一个代码应该完成这项工作:

    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)

您的代码存在以下问题。

  1. 如果您的输入为“40 END”
  2. ,则“while "END" not in L”将无效
  3. 在Python 2.7中,“input()”相当于“eval(raw_input()))”。因此,Python正在尝试评估“GOTO”语句。
  4. if str(input()).endswith("END"):”不会将输入附加到L
  5. 所以,这是你的功能的更新版本:

    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