能否以整数作为字典类型参数?Python素数检测代码无输出排查
问题解答
1. 整数能否作为字典类型的参数使用?
完全可以。Python字典的键只要是不可变类型即可,整数属于不可变类型,所以既可以作为字典的键,也可以作为字典的值。示例:
# 整数作为键 int_key_dict = {1: "质数", 2: "偶数"} # 整数作为值 int_value_dict = {"first_num": 12, "second_num": 23}
你代码中用的**a是关键字参数,会被打包成键为字符串的字典,但这不影响你在字典中使用整数作为键或值。
2. 素数检测代码无输出的问题排查
你的代码没有输出的核心问题是素数判断条件错误:
- 当检测的数是素数时,
for i in range(2, n)会遍历到i = n-1后结束循环,此时i的值是n-1,而不是n,所以if(i == n)的条件永远不会成立。 - 对于非素数(比如12),循环会中途
break,i是第一个能整除它的数,同样不等于n,自然也不会触发打印。
修复后的代码
利用for循环的else子句(仅在循环正常结束、未被break打断时执行)来判断素数:
def primenumber(**a): # 检测第一个数 n1 = a["first"] for i in range(2, n1): if n1 % i == 0: break else: print("First Number is prime number in Multiple Asterisk") # 检测第二个数 n2 = a["second"] for i in range(2, n2): if n2 % i == 0: break else: print("Second Number is prime number in Mutliple Asterisk") primenumber(first=12, second=23)
执行后会输出:Second Number is prime number in Mutliple Asterisk,符合预期(23是素数,12不是)。
额外优化建议
- 可以加入对小于2的数的判断(比如输入1或0时,直接提示不是素数)
- 素数检测的循环可以只遍历到
sqrt(n),提升效率,因为如果n有大于sqrt(n)的因数,必然有一个对应的小于sqrt(n)的因数。
内容的提问来源于stack exchange,提问作者Kushant Negi
相关产品推荐
相关产品推荐

