Python特殊数字统计:修改输出格式以显示数量及列表
问题描述
我写了一段查找特殊数字(1-10之间的质数)的Python代码,代码能正常运行,但想修改输出格式。
当前输出:
Enter smaller number (m): 4 Enter the larger number (n): 7 Special numbers: [5, 7] Special numbers Brute force: [5, 7]
期望输出格式为 special numbers = 2: [5,7],也就是同时显示特殊数字的数量和列表。我尝试添加了amount_of_special_numbers函数,但它没有按预期执行,附上现有代码:
def main(): m = int(input("Enter smaller number (m): ")) n = int(input("Enter the larger number (n): ")) if m >= n: print("Error: First number should be smaller than second") special_nums = locate_special_numbers(m, n) if len(special_nums) <= 5: print("Special numbers are:", special_nums) else: first_three = special_nums[:3] last_three = special_nums[-3:] print("First three smallest special numbers:", first_three) print("Last three biggest special numbers:", last_three) # Brute force approach special_numbers_brute_force = locate_special_numbers(m, n) print("Special numbers Brute force:", special_numbers_brute_force) # lines 33-39 are not executing as expected def amount_of_special_numbers(m, n): amount_of_special_numbersList = [] for num in range(m, n + 1): if prime(num) and mirrored(num): amount_of_special_numbersList.append(num) print( "The total number of special number is:", len(amount_of_special_numbersList), ) # Return the list after the first special number is found return amount_of_special_numbersList if __name__ == "__main__": main()
解决方案
原代码问题分析
amount_of_special_numbers函数从未被调用,因此完全未执行;- 函数内部找到第一个符合条件的数字后就执行
return,导致仅返回包含第一个特殊数字的列表,无法统计全部数量; - 原输出逻辑未实现“同时显示数量和列表”的格式要求。
修改后的代码
def prime(num): # 补充质数判断逻辑 if num <= 1: return False for i in range(2, int(num**0.5) + 1): if num % i == 0: return False return True def mirrored(num): # 补充镜像数(回文数)判断逻辑 return str(num) == str(num)[::-1] def locate_special_numbers(m, n): # 实现特殊数字查找逻辑 special_list = [] for num in range(m, n + 1): if prime(num) and mirrored(num): special_list.append(num) return special_list def main(): m = int(input("Enter smaller number (m): ")) n = int(input("Enter the larger number (n): ")) if m >= n: print("Error: First number should be smaller than second") return # 错误触发后直接退出,避免无效执行 special_nums = locate_special_numbers(m, n) # 按期望格式输出 print(f"special numbers = {len(special_nums)}: {special_nums}") # 暴力法部分同步修改输出格式 special_numbers_brute_force = locate_special_numbers(m, n) print(f"Special numbers Brute force = {len(special_numbers_brute_force)}: {special_numbers_brute_force}") if __name__ == "__main__": main()
修改说明
- 补充了原代码缺失的
prime、mirrored、locate_special_numbers函数(原代码调用了这些函数但未提供实现); - 移除无用的
amount_of_special_numbers函数,直接通过len()获取特殊数字数量,用f-string实现期望的输出格式; - 在输入错误判断后添加
return,避免后续代码无意义执行; - 同步修改暴力法的输出格式,保持统一。
内容的提问来源于stack exchange,提问作者Ozzy
相关产品推荐
相关产品推荐

