Python 利用可变参数*args实现列表元素平方的函数习题
现有参考代码存在的问题
- 命名冲突:自定义函数命名为
list(),直接覆盖Python内置的list类型构造方法,后续代码如果需要使用内置list做类型转换会触发异常,属于编程规范中的典型错误。 - 输入值类型错误:循环接收列表元素时直接读取
input()的返回值,所有元素都是字符串类型,无法直接参与数值平方运算,未做数值类型转换。 - 平方函数逻辑完全偏离需求:
- 运算逻辑写为
args[i]*=2,实现的是“元素乘2”而非“元素取平方”,和题目要求完全不符 - 可变参数
*args使用逻辑错误:传入listA时,整个列表会被当作args元组的第一个元素,循环遍历的是args的长度(固定值1),根本没有触达列表内部的每个元素,最终执行的操作是把整个列表做重复拼接,而非修改列表内元素的值 - 函数没有配套输出逻辑,调用完平方函数后没有任何可感知的计算结果,不符合习题要求的“通过自定义函数实现平方计算并展示结果”的目标
- 运算逻辑写为
- 函数耦合性过高:录入列表元素的函数直接硬编码操作全局变量
listA,没有把列表作为参数传入函数,完全不具备函数复用能力。
修正后的可运行实现代码
# 初始化空列表存储输入元素 listA = [] # 获取用户输入的列表元素总数 n = int(input("Enter number of elements in the list : ")) # 重命名函数避免覆盖内置类型,把目标列表作为参数传入 def input_elements(n, target_list): print("\nEnter the elements of your list: ") for i in range(n): # 将输入的字符串转换为整数,支撑后续数值运算 element = int(input()) target_list.append(element) # 调用元素录入函数 input_elements(n, listA) print("\nThe entered list is: \n", listA) # 自定义平方计算函数,接收列表作为参数,体现可变对象的传递逻辑 def square_elements(num_list): # 遍历列表的每个下标,对对应元素做平方运算 for i in range(len(num_list)): num_list[i] = num_list[i] ** 2 # 调用平方计算函数 square_elements(listA) print("\nThe squared list is: \n", listA)
代码设计贴合习题考察方向:通过列表作为可变类型的函数传参,直观体现Python的变量传递逻辑——列表属于可变对象,函数内对列表元素的修改会同步作用于外部传入的原列表对象,同时彻底修正了原代码中命名冲突、类型不匹配、逻辑偏离的问题。
内容的提问来源于stack exchange,提问作者Sassie
相关产品推荐
相关产品推荐

