做一个练习题,不希望答案只是指导你去想它

2024-06-07 08:27:29 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,在《自动化无聊的东西》第4章中,第一个项目问题是假设您有一个列表,其中spam = ['apples', 'bananas', 'tofu', 'cats]

编写一个函数,将列表值作为参数,并返回一个字符串,其中所有项之间用逗号和空格分隔,最后一项前面有单词“and”。此函数应适用于传递给它的任何列表

为了我写的代码

def list():
    for i in range(len(list)-1):
        print(' ,' + ' , and' + list[-1])     

spam = ['apples','bananas','tofu','cats']
list = spam
print(spam)

我可以让逗号和空格出现,但我想不出如何让最后一个值总是在它之前

我也试过了

def list():
    for i in range(len(list)-1):
        print(' ,')
    for i[-1]
        print(, and' + list[-1])    

spam = ['apples','bananas','tofu','cats']
list = spam
print(spam)

两者都不起作用

我不想找人告诉我什么是代码,而是我的想法是错误的,我应该如何框架。你知道吗

谢谢你!你知道吗


Tags: and函数代码列表fordefspamlist
2条回答

请看下面的代码。你知道吗

def f(arg):
    string = ""
    for i in range(len(arg)):
        if i != len(arg) - 1:
            string += f"{arg[i]}, "
        else:
            string += f"and {arg[i]}"
    return string   


spam = ['apples','bananas','tofu','cats']

print(f(spam))

输出:

'apples, bananas, tofu, and cats'

我是python新手,所以我不包括使用本书尚未涉及的方法的可能答案。查看您的代码:

def list():
    for i in range(len(list)-1):
        print(' ,' + ' , and' + list[-1])     

spam = ['apples','bananas','tofu','cats']
list = spam
print(spam)

当您的代码需要打印时,它实际上是在打印列表引用,而不是将列表作为字符串打印。您编写了一个函数:

def list():
    for i in range(len(list)-1):
        print(' ,' + ' , and' + list[-1]) 

但是你从来没有向它传递过任何东西,你甚至从来没有在你的代码中调用过这个函数:

spam = ['apples','bananas','tofu','cats']
list = spam
print(spam)

您在这里所做的就是定义变量spam来存储列表引用,然后将变量spam存储在另一个变量list中,然后打印spam…所以您甚至不使用list变量

我建议您使用位于pythontutor.com的Python可视化工具,它确实帮助了我。话虽如此,既然你不想要实际的答案或代码,我将给你我经历的思考过程:

步骤1:定义一个函数,该函数将以列表值作为参数,并返回一个字符串将所有项用逗号和空格分隔,并在最后一项之前插入'和'。

  1. 您的函数需要一个接受list参数并将其传递给函数的参数

      def functionName(argument):
         [code goes here]
    
  2. 创建一个将列表值作为字符串保存的新变量。因为您还没有解析列表来获取数据,所以这可能是一个空变量。

  3. 找出列表的长度(考虑到它需要接受任何列表长度,而不仅仅是示例)。根据列表的长度,从0开始返回该长度的数字序列,并将其递增1(提示:有一个内置函数可以同时执行这两个操作)

  4. 创建一种方法,当上面的代码在序列中运行时,它检查列表索引是否是最后一个索引。如果它是列表中的最后一个索引,请将“and”连接到该索引,将其存储为一个变量(您在步骤2中创建的变量)并递增,以便它将移动到下一个列表索引。否则,如果它不是列表中的最后一个索引,请将该索引与“,”连接起来,将其存储在变量(您在步骤2中创建的变量)中,然后递增,使其移动到下一个列表索引。

  5. 一旦您的代码遍历了整个列表,让它返回值(同时计算出我使用print()的代码,而不是返回,这样我就可以在屏幕上看到输出)。

一旦你得到这个工作,它将采取在任何列表或列表长度:

    spam = ['apples', 'bananas', 'tofu', 'cats']  
    spam2 = ['apples', 'bananas', 'tofu', 'cats', 'monkeys', 'zebras', 'donkeys']

并以逗号分隔的字符串形式返回列表,在最后一个索引前加上“and”

apples, bananas, tofu, and cats
apples, bananas, tofu, cats, monkeys, zebras, and donkeys

一旦您的代码成功地完成了这项工作,您就可以转到让我困惑了一段时间的部分: “但是您的函数应该能够处理传递给它的任何列表值。”

现在您需要更改函数,以便它遍历列表,如果列表包含字符串,它将正常运行,但是如果列表包含整数,它需要运行相同的进程,但将整数转换为字符串,以便以相同的方式打印列表

numbers  = [1, 2, 3, 4]
numbers2 = [1, 2, 3 ,4, 5, 6, 7, 8, 9, 10]

并以逗号分隔的字符串形式返回列表,在最后一个索引前加上“and”

1, 2, 3, and 4
1, 2, 3, 4, 5, 6 ,7, 8, 9, and 10

相关问题 更多 >

    热门问题