繁体   English   中英

检查一个数是否为质数

[英]checking whether a number is prime

我正在尝试创建一个 for 循环,遍历范围内的数字并检查它们是否可整除。 这是我的代码:

user_input = input("pick a number")

for i in range(1, int(user_input)):
    if int(user_input) % i == 0 and i != 1 and i != int(user_input):
        print("Your number is prime")
    else:
        print("your number is not prime")

即使对于素数,第二个条件也会继续执行。 我究竟做错了什么?

当您使用 for 循环时,您正在迭代range(1, int(user_input))的次数,因此您的if/else会一遍又一遍地执行,并且在每次迭代中都会打印一些内容。 相反,您只想在完成后打印。

要实现这一点,您需要使用 boolean True/False 变量来跟踪数字是否为质数,并在for循环中相应地设置它。

user_input = input("pick a number")

is_prime = True
for i in range(2, int(user_input)):
    if int(user_input) % i == 0 :
        is_prime = False
        break #break out of the for loop since the number isn't prime

if is_prime:
   print("Your number is prime")
else:
   print("your number is not prime")

其他一些小的变化:

  1. 删除条件and i != 1因为超过1的任何迭代都将无法通过此测试并且您想检查迭代中的每个数字
  2. 删除条件and i != int(user_input)因为在你的迭代中你永远不会达到这个数字range()不包括最高数字。
  3. 一旦我们确定数字不是素数,就添加一个break ,这样我们就不会浪费迭代来检查它是否更不是素数。

您的代码范围存在一些问题,应该是 2 而不是 1。一旦条件满足,就添加一个 break 语句。

user_input = input("pick a number")
user_input  = int(user_input)

for i in range(2, user_input)::  #for i in range(2, int(user_input /2)+1) also works
    if (user_input  % i) == 0:    
        print("Your number is prime")
        break
else:
    print("Your number is not a prime")

更简单的方法

user_input = int(input("pick a number"))
result = all(user_input % i for i in range(2, user_input))

if result:
     print("Your number is prime")
else:
     print("Your number not a is prime")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM