如何修改Python求和函数使其支持接收输入列表计算合法数值和
方案1:交互式输入列表(运行时手动传入)
这种方式适合每次运行脚本时手动输入要计算的列表内容,修改后代码如下:
def number_sum(lst): total = 0 for e in lst: # 这里优化了类型判断,同时排除布尔值(避免True/False被误算为1/0) # 如果不需要排除布尔值,或者要保留原类型判断逻辑,可以换回你原来的type判断写法 if isinstance(e, (int, float, complex)) and not isinstance(e, bool): total += e return total if __name__ == "__main__": import ast input_content = input("请输入要计算的列表(多个列表用英文分号分隔):").strip() lst_str_list = input_content.split(';') for idx, lst_str in enumerate(lst_str_list): if not lst_str: continue try: target_lst = ast.literal_eval(lst_str.strip()) if not isinstance(target_lst, list): print(f"第{idx+1}个输入不是合法列表,已跳过") continue print(f"第{idx+1}个列表计算结果:{number_sum(target_lst)}") except (SyntaxError, ValueError): print(f"第{idx+1}个列表格式错误,已跳过")
运行时直接输入比如[1, 3, 5, 7, 9];["abc", [3, 5], 3.5, 2+3j, 4.5, 10];[],就会输出对应三个列表的计算结果。
方案2:命令行传参调用(脚本运行时直接传入参数)
适合在终端调用脚本时直接把列表作为参数传入,不需要后续手动输入,代码如下:
def number_sum(lst): total = 0 for e in lst: if isinstance(e, (int, float, complex)) and not isinstance(e, bool): total += e return total if __name__ == "__main__": import sys, ast # 命令行传入的参数从索引1开始取,每个参数对应一个列表 for idx, lst_str in enumerate(sys.argv[1:]): try: target_lst = ast.literal_eval(lst_str.strip()) if not isinstance(target_lst, list): print(f"第{idx+1}个参数不是合法列表,已跳过") continue print(f"第{idx+1}个列表计算结果:{number_sum(target_lst)}") except (SyntaxError, ValueError): print(f"第{idx+1}个列表格式错误,已跳过")
终端调用示例(把your_script_name.py替换成你自己的脚本文件名):
python your_script_name.py "[1, 3, 5, 7, 9]" '["abc", [3, 5], 3.5, 2+3j, 4.5, 10]' "[]"
内容的提问来源于stack exchange,提问作者user17143278
相关产品推荐
相关产品推荐

