Python双数有效密钥校验代码运行结果不稳定问题求助
问题原因
- 质数判断逻辑错误:你将有效密钥的输出逻辑放在了
for循环的else分支内,循环第一轮只要较大值不能被2整除,就会直接输出是有效密钥并跳出循环,没有完成所有可能的因数校验。比如较大值为15时,15%2=1,你就会误判为质数,但15可以被3、5整除,根本不是质数,这就是结果不稳定的核心原因。 - 循环变量冲突:外层
while循环的控制变量是i,内层质数判断的for循环也用i作为迭代变量,内层循环跑完后i的值会被修改,直接导致外层while循环可能意外终止,无法支持无限次执行。 - 未做异常处理和浮点数转换:直接用
int()转换用户输入,如果用户输入浮点数或者非数字内容,程序会直接崩溃,不符合需求要求。 - 存在语法错误和边界遗漏:代码缩进混乱,
break print (" enter another keys")属于语法错误,同时没有处理较大值≤1的情况,这类数本身就不是质数,没有对应输出逻辑。
修正后代码
# 无限循环支持重复校验 while True: try: # 兼容float输入转int,捕获非数字输入异常 num1 = int(float(input("dear user please enter the 1st number "))) num2 = int(float(input("dear user please enter the 2nd number "))) except ValueError: print("输入不合法,请输入有效数字") continue largest = max(num1, num2) is_prime = True # 修正后的质数判断逻辑 if largest <= 1: is_prime = False else: # 取平方根做右边界比取半效率更高,结果一致 for i in range(2, int(largest ** 0.5) + 1): if largest % i == 0: is_prime = False break if is_prime: print(f"the key is {largest}") else: print(f"it cannot be a key {largest}") print("enter another keys")
内容的提问来源于stack exchange,提问作者Houda Nakri
相关产品推荐
相关产品推荐

