Python 函数变量作用域的练习

Question 1

题目描述:

给定一个列表,您需要编写两个函数,一个是modify_list,另一个是print_list。这两个函数的描述如下:

  1. modify_list(input_list, value): 这个函数接收两个参数,一个是列表input_list,另一个是整数value。该函数应该将value添加到input_list的末尾。

  2. print_list(input_list): 这个函数接收一个参数,也就是input_list,并打印它。

要求:在这两个函数之外,定义一个main函数,在其中初始化一个空列表my_list。然后,调用modify_list(my_list, 10)print_list(my_list)。你应该在控制台看到[10]。然后,再次调用modify_list(my_list, 20)print_list(my_list)。你应该在控制台看到[10, 20]

然而,main函数里的my_list不能被modify_listprint_list函数直接访问,必须通过参数传递。

示例代码:

def modify_list(input_list, value):
    # 在这里添加你的代码

def print_list(input_list):
    # 在这里添加你的代码

def main():
    my_list = []
    modify_list(my_list, 10)
    print_list(my_list)
    modify_list(my_list, 20)
    print_list(my_list)

main()

完成上述代码,以满足以上所有要求。这个问题的关键在于理解Python的作用域规则。请注意,在一个函数中修改了作为参数传递的可变对象(如列表、字典或集合)时,这些改变会反映在原始对象上。

期待你的解答。

答案

下面是完成题目要求的代码:

def modify_list(input_list, value):
    # 在这里添加你的代码
    input_list.append(value)

def print_list(input_list):
    # 在这里添加你的代码
    print(input_list)

def main():
    my_list = []
    modify_list(my_list, 10)
    print_list(my_list)    # 输出应为: [10]
    modify_list(my_list, 20)
    print_list(my_list)    # 输出应为: [10, 20]

main()

这个问题强调了Python中作用域的规则。在这里,my_list变量在main函数的作用域中。但是,当我们将my_list作为参数传递给modify_list函数时,我们实际上是传递了对这个列表的引用,所以modify_list函数中对input_list的修改(即添加元素)实际上修改了my_list。这是因为列表是可变的数据类型,在函数中对它的修改会影响原始对象。

同样,我们也通过参数将my_list传递给print_list函数,所以print_list可以访问main函数作用域中的my_list的当前状态,并将其打印出来。

Question 2

题目描述:

编写一个 Python 程序,该程序包含以下三个函数:

  1. add_value(input_dict, key, value): 这个函数接收三个参数:字典input_dict,键key,值value。该函数应将键值对添加到字典中。

  2. get_value(input_dict, key): 这个函数接收两个参数:字典input_dict和键key。它应该返回对应于键的值。如果键不存在,则返回字符串"Key not found"

  3. remove_value(input_dict, key): 这个函数接收两个参数:字典input_dict和键key。它应该从字典中删除键及其对应的值。如果键不存在,则返回字符串"Key not found"

你还需要定义一个main函数,在其中初始化一个空字典my_dict。然后,按照以下顺序调用函数:

  • 调用add_value(my_dict, 'name', 'Alice')
  • 调用get_value(my_dict, 'name')并打印返回的值,你应该在控制台看到Alice
  • 调用remove_value(my_dict, 'name')
  • 再次调用get_value(my_dict, 'name')并打印返回的值,你应该在控制台看到Key not found

然而,main函数里的my_dict不能被add_value, get_valueremove_value函数直接访问,必须通过参数传递。

示例代码:

def add_value(input_dict, key, value):
    # 在这里添加你的代码

def get_value(input_dict, key):
    # 在这里添加你的代码

def remove_value(input_dict, key):
    # 在这里添加你的代码

def main():
    my_dict = {}
    add_value(my_dict, 'name', 'Alice')
    print(get_value(my_dict, 'name'))  # 输出应为: Alice
    remove_value(my_dict, 'name')
    print(get_value(my_dict, 'name'))  # 输出应为: Key not found

main()

完成上述代码,以满足以上所有要求。这个问题的关键在于理解Python的作用域规则,以及字典的使用。

答案

以下是完成题目要求的代码:

def add_value(input_dict, key, value):
    # 在这里添加你的代码
    input_dict[key] = value

def get_value(input_dict, key):
    # 在这里添加你的代码
    return input_dict.get(key, "Key not found")

def remove_value(input_dict, key):
    # 在这里添加你的代码
    if key in input_dict:
        del input_dict[key]
    else:
        return "Key not found"

def main():
    my_dict = {}
    add_value(my_dict, 'name', 'Alice')
    print(get_value(my_dict, 'name'))  # 输出应为: Alice
    remove_value(my_dict, 'name')
    print(get_value(my_dict, 'name'))  # 输出应为: Key not found

main()

在这个问题中,我们首先在main函数中创建了一个字典my_dict。然后,我们通过参数将my_dict传递给了add_value, get_valueremove_value函数。

add_value函数中,我们将键值对添加到了传递的字典中。在get_value函数中,我们使用了字典的get方法来尝试获取键对应的值。如果键不存在,get方法会返回提供的默认值"Key not found"。在remove_value函数中,我们首先检查了键是否在字典中,如果在,我们就删除这个键值对,否则我们返回"Key not found"

这个问题强调了Python中作用域的规则,以及字典在函数中的行为。因为字典是一个可变的数据类型,所以在函数中对它的修改会影响原始对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI悦创|编程1v1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值