首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GoTo(basic)程序

GoTo(basic)程序
EN

Stack Overflow用户
提问于 2012-08-09 22:31:48
回答 5查看 945关注 0票数 1

我正在做一些在线教程,并且我被一个练习卡住了:编写一个不带参数的函数getBASIC(),并执行以下操作:它应该使用while循环从输入中读取行;当它到达末尾时,它应该以字符串列表的形式返回整个程序。字符串列表示例:

代码语言:javascript
复制
5 GOTO 30
10 GOTO 20
20 GOTO 10
30 GOTO 40
40 END

我写了一个程序,但是它不能工作,不过我也会把它贴出来:

代码语言:javascript
复制
def getBASIC():
    L=[]
    while "END" not in L:
        L.append(str(input()))
        if str(input()).endswith("END"):
            break
    return L

另外,我注意到你不允许我使用IS或递归。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-09 22:39:36

试试这个:

代码语言:javascript
复制
def get_basic():
    L = []
    while True:
        line = str( input() )
        L.append( line )
        if "END" in line:
            break
    return L
票数 1
EN

Stack Overflow用户

发布于 2012-08-09 22:54:23

有几个错误:

在没有附加到列表的情况下调用input()两次后,第二个time

  • 'END' in L确定列表中是否有'END' (完整)行L (没有)

注意:input()已经返回了一个str对象;您不需要对它的返回值调用str()

要读取输入,直到获得空行,您可以:

代码语言:javascript
复制
def getBASIC():
    return list(iter(input, ''))

或者读取,直到在行尾遇到END

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2012-08-09 22:55:24

当我还在学习Pascal的时候,我们使用的是至少需要一次迭代的循环的启发式读取。这在Python中仍然可以很好地工作(我更喜欢它而不是while True / break循环)。

通过简单地测试列表中的最后一行(而不是读取的最后一行),我们不再需要变量来存储输入,并且可以组合读取和追加操作。

代码语言:javascript
复制
def getBASIC():
    lines = [input("]")]    # use Applesoft BASIC prompt  :-)
    while not lines[-1].upper().rstrip().endswith("END"):
        lines.append(input("]"))
    return lines
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11885734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档