【问题标题】:checking whether a number is prime检查一个数是否为质数
【发布时间】:2022-12-12 23:28:58
【问题描述】:

我正在尝试创建一个 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")

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

【问题讨论】:

  • 你测试i != 1。第一个循环总是有i == 1,因此,它会告诉你它不是质数。你绝对不应该举报任何事物虽然在循环中是素数;在排除所有可能的因素之前,您不知道它是质数。将您的 range 更改为从 2 开始,而不是 1,然后删除那部分测试,并让它报告不是当它被均匀分割时是素数(现在你报告素数时均匀分割,这是坚果)。
  • 无论条件是否满足,你都会一次又一次地循环。逻辑错了——想想循环里应该有什么,循环后应该做什么。每个输入都应该产生一个打印语句。

标签: python for-loop primes


【解决方案1】:

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

要做到这一点,您需要使用布尔 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,这样我们就不会浪费迭代检查它是否更不是素数。

【讨论】:

  • 注意:Python 有一个用于 for 循环的 else: 案例,因此您可以完全删除 is_prime 标志。如果你break(因为它不是质数),你可以在那里打印,当它是质数时,你不会有break-ed,所以你可以在for的报告中报告它是质数elseTry it online!
  • 此外,转换为int绝对应该在循环之外完成(user_input = int(input("pick a number")),删除所有其他对int的调用);反复从字符串转换为 int 增加了一堆毫无意义的工作(这不是你的错,OP 具有同样的低效率)。
【解决方案2】:

您的代码范围存在一些问题,应该是 2,而不是 1。

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")

更简单的方法

n = int(input("Enter a number: "))
result = all(n % i for i in range(2, n))

if result:
    print(n, 'prime num')
else:
    print(n, 'not a prime num')

【讨论】:

    猜你喜欢
    • 2022-11-25
    • 1970-01-01
    • 2011-11-19
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 2015-09-15
    相关资源
    最近更新 更多