【问题标题】:Python prime calculator - Not updating boolean valuePython素数计算器 - 不更新布尔值
【发布时间】:2018-03-18 03:35:21
【问题描述】:
from sys import argv

def prime():
  for i in range(2,num):
      if num % i == 0:
          print(f"{num} can be divisible by {i}.")
          checker = False

num = int(input("Enter the number you want to check is prime: "))
checker = True

if num < 2:
    print(f"{num} is a prime number.")
elif num == 0:
    print(f"{num} is not a prime number.")
elif num > 0:
    prime()
    print(f"Is this number a prime - {checker}.")
else:
    print(f"Please write number larger than 0.")

大家好,我刚刚开始编写代码,这可能是一个非常简单的问题。我希望我的代码要么找到一个数字的因数,要么打印一个数字是否是素数——但我在“素数”函数中的布尔值永远不会更新为 False。不知道为什么!

谢谢。

【问题讨论】:

  • 您在运行此代码时是否遇到任何错误,或者打印出True
  • 没有错误,它只是打印出 True 即使它不是素数。
  • 在'def prime'函数中写入'global checker'。

标签: python python-3.x boolean primes


【解决方案1】:

您的prime() 函数没有“更新”到False 的原因是函数中没有return 语句。

有了它,函数看起来是这样的:

def prime():
  checker = True
  for i in range(2,num):
      if num % i == 0:
          print(f"{num} can be divisible by {i}.")
          checker = False
  return checker

更新后的代码如下所示:

from sys import argv

def prime():
  checker = True
  for i in range(2,num):
      if num % i == 0:
          print(f"{num} can be divisible by {i}.")
          checker = False
  return checker


num = int(input("Enter the number you want to check is prime: "))

if num < 2:
    print(f"{num} is a prime number.")
elif num == 0:
    print(f"{num} is not a prime number.")
elif num > 0:
    is_prime = prime()
    print(f"Is this number a prime - {is_prime}.")
else:
    print(f"Please write number larger than 0.")

但是,这不是解决您的问题的唯一方法:it's not recommended and frowned upon by many programmers as bad practice - 使用 global 语句(看起来这就是您最初尝试做的)。

有了它,函数看起来是这样的:

def prime():
  global checker
  for i in range(2,num):
      if num % i == 0:
          print(f"{num} can be divisible by {i}.")
          checker = False

更新后的代码如下所示:

from sys import argv

def prime():
  global checker
  for i in range(2,num):
      if num % i == 0:
          print(f"{num} can be divisible by {i}.")
          checker = False


num = int(input("Enter the number you want to check is prime: "))
checker = True

if num < 2:
    print(f"{num} is a prime number.")
elif num == 0:
    print(f"{num} is not a prime number.")
elif num > 0:
    prime()
    print(f"Is this number a prime - {checker}.")
else:
    print(f"Please write number larger than 0.")

【讨论】:

  • 不用担心 - 随时乐意为您提供帮助!
【解决方案2】:
def prime():
       global checker
       """ remaining logic as is"""

我认为这会奏效。 对不起,我在手机上写的格式。

【讨论】:

    猜你喜欢
    • 2013-04-19
    • 2017-07-30
    • 2015-01-05
    • 2020-08-21
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    相关资源
    最近更新 更多