猿问

使用多个 def 函数修改列表

您好,希望有人能引导我朝着正确的方向前进。


我想弄清楚如何使用 def 函数根据用户输入修改列表中的文本行。例如,如果用户输入“a”,它会在列表中添加一行,“d”= 删除行等等......


我已经定义了函数并知道它们必须做什么,下面是其中的一些:


lineList = []

lines = ""


##Add Line

def addLine ():

    while lines != "#":

        lines = input ("Add a line: ")

        lineList.append(lines)

    for (i, item) in enumerate(lineList, start=1):

        print(str(i)+":", item)            



##Delete Line

def deleteLine ():

    lineNum = int(input("Enter line: ")    )

    del lineList[(lineNum)]

    for (i, item) in enumerate(lineList, start=1):

        print(str(i)+":", item)


##Find and replace string

def findReplace ():

    findString = input("Find string: ")

    replaceString = input ("Replace with: ")

    for n, i in enumerate(lineList):

        if i == findString:

            lineList[n] = replaceString

    for (i, item) in enumerate(lineList, start=1):

        print(str(i)+":", item)


所以我想弄清楚:初始列表应该在 addLine () 内部还是外部?我应该使用 addLine() 来附加列表吗?另外,其他功能如何访问列表以进行更改?


慕容森
浏览 191回答 3
3回答

天涯尽头无女友

您可以使函数接受当前lineList作为参数并在更改后返回。例如:##Add Linedef addLine(lineList):    lines = ""    while lines != "#":        lines = input ("Add a line: ")        lineList.append(lines)    for (i, item) in enumerate(lineList, start=1):        print(str(i)+":", item)      return lineList##Delete Linedef deleteLine(lineList):    lineNum = int(input("Enter line: "))    del lineList[(lineNum)]    for (i, item) in enumerate(lineList, start=1):        print(str(i)+":", item)    return lineList##Find and replace stringdef findReplace(lineList):    findString = input("Find string: ")    replaceString = input ("Replace with: ")    for n, i in enumerate(lineList):        if i == findString:            lineList[n] = replaceString    for (i, item) in enumerate(lineList, start=1):        print(str(i)+":", item)    return lineListlineList = []while True:    command = input("Enter command (a, d, f): ")    if command == "a":        lineList = addLine(lineList)    elif command == "d":        lineList = deleteLine(lineList)    elif command == "f":        lineList = findReplace(lineList)

红颜莎娜

最好让函数将列表作为函数参数。使用全局变量通常是不好的做法,您应该尽可能避免使用它们。这样,您的功能就可以是自包含和独立的,这是一个很好的设计特征。所以,只是把它变成一个论点。此外,以下代码块在您的每个功能中都是多余的。如果你也把它封装在一个函数中会更好。for (i, item) in enumerate(lineList, start=1):        print(str(i)+":", item)例如:def print_lines(line_list):    for (i, item) in enumerate(lineList, start=1):        print(str(i)+":", item)这样,您不必每次都担心 for 循环,而只需print_lines(line_list)在您的函数中使用即可。提示:查看PEP-8 风格指南。此 PEP 将让您深入了解应如何设置代码样式。希望答案有所帮助:)

慕哥6287543

据我了解你正在尝试做什么你需要在函数之外有 linelist 变量所以它是一个全局变量然后你可以从任何地方甚至在函数内部访问它。如果您在函数 add 中声明该变量,您将需要在 add 函数的开头添加:def addLine ():    global linelist    linelist = []    while lines != "#":        lines = input ("Add a line: ")        lineList.append(lines)    for (i, item) in enumerate(lineList, start=1):         print(str(i)+":", item)          这样变量也是全局的,但在函数外部使用它更容易。希望这有帮助:D
随时随地看视频慕课网APP

相关分类

Python
我要回答