为了账号安全,请及时绑定邮箱和手机立即绑定

使用多个 def 函数修改列表

使用多个 def 函数修改列表

慕容森 2022-11-18 16:37:48
您好,希望有人能引导我朝着正确的方向前进。我想弄清楚如何使用 def 函数根据用户输入修改列表中的文本行。例如,如果用户输入“a”,它会在列表中添加一行,“d”= 删除行等等......我已经定义了函数并知道它们必须做什么,下面是其中的一些:lineList = []lines = ""##Add Linedef addLine ():    while lines != "#":        lines = input ("Add a line: ")        lineList.append(lines)    for (i, item) in enumerate(lineList, start=1):        print(str(i)+":", item)            ##Delete Linedef deleteLine ():    lineNum = int(input("Enter line: ")    )    del lineList[(lineNum)]    for (i, item) in enumerate(lineList, start=1):        print(str(i)+":", item)##Find and replace stringdef 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() 来附加列表吗?另外,其他功能如何访问列表以进行更改?
查看完整描述

3 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

您可以使函数接受当前lineList作为参数并在更改后返回。例如:


##Add Line

def 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 Line

def 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 string

def 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 lineList



lineList = []

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)


查看完整回答
反对 回复 2022-11-18
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

最好让函数将列表作为函数参数。使用全局变量通常是不好的做法,您应该尽可能避免使用它们。这样,您的功能就可以是自包含和独立的,这是一个很好的设计特征。所以,只是把它变成一个论点。


此外,以下代码块在您的每个功能中都是多余的。如果你也把它封装在一个函数中会更好。


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 将让您深入了解应如何设置代码样式。


希望答案有所帮助:)


查看完整回答
反对 回复 2022-11-18
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

据我了解你正在尝试做什么你需要在函数之外有 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


查看完整回答
反对 回复 2022-11-18
  • 3 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信