【问题标题】:Using Python to create a script that gives the user the next prime number in sequence and asks if they want another使用 Python 创建一个脚本,按顺序为用户提供下一个素数并询问他们是否想要另一个
【发布时间】:2021-02-19 14:11:08
【问题描述】:

我正在尝试编写一个简短的 python 脚本,它为用户提供一个以 3 开头的素数,如果用户希望看到它,则继续提供下一个素数。

这是我创建的函数。当我运行它时,我无法超过设计开始的数字 3。我得到打印语句“3 不是素数”,然后弹出 input() 字段,我输入“是”,我希望变量“计数”增加到 4,并且脚本再次检查它是否是素数。

它应该通过这个过程检查每个数字并只返回素数,然后询问用户是否希望看到另一个。任何想法为什么我被困在“3 不是质数”的无限循环中

def prime_number():
    game_on = True
    
    
    while True:
    
        count = 3
    
        for num in range(2,count):
            if count % num == 0:
                print(f'{count} is not a prime number')
                break
                
            elif count % num != 0:
                print(f'{count} is a prime number')
                break
            else:
                pass
        question = input("Would you like to see another prime number?? Please enter Yes or No: ")
        if question == "Yes":
            count += 1
        
        else:
            
            break
        game_on = False

【问题讨论】:

    标签: python


    【解决方案1】:

    您应该将起始计数值放在主循环之外。

    count = 3
    while True:
        for num in range(2,count):
    

    【讨论】:

    • 我还是不明白他怎么得到 3 不是素数。
    • 当前程序逻辑不能正确识别素数。但问题只是关于为什么计数器没有增加。卢卡的答案可以用来纠正素数生成器。
    • 是的。我相信这是错字。我只是想确保我没有遗漏任何东西。
    【解决方案2】:
    def prime_number():
        game_on = True
        count = 3
        while True:
            for num in range(2, count):
                if (count % num) == 0:
                    print(count,"is not a prime number")
                    break
            else:
                print(count,"is a prime number")
            question = input("Would you like to see another prime number?? Please enter Yes or No: ")
            if question == "Yes":
                count = count + 1
                continue
            return
    

    此解决方案效果很好。实际上,您可以使用 int(count/2),因为没有一个数的因数大于自身除以 2。

    【讨论】:

    • 效果很好,谢谢。我在想需要有一个明确的语句将状态设置为 False 才能退出 while 循环。怎么不是这样?当用户输入“否”时,循环如何知道停止?
    • 如果用户输入 no,循环不会停止,如果用户没有输入“Yes”,循环不会停止,因为它处于 while 循环中, continue 语句在那里重新启动循环并且不会到达回报。您可以删除 game_on 变量,我只是假设您将它用于其他用途。很高兴听到它对您有用,您可以通过勾选并投票来接受这个答案。它可以帮助其他用户首先找到有效的答案!
    • 谢谢我已经勾选了答案,但不幸的是没有足够的声誉来投票。感谢您的帮助!
    【解决方案3】:

    创建一个检查数字是否为素数的函数

         1  def is_prime(num):
         2      for i in range(2,num):
         3          if num%i != 0:
         4              return False
         5      return True
    

    【讨论】:

      【解决方案4】:

      您将“count = 3”行放在 for 循环中,因此每次迭代的 count 将等于 3。解决方案是在 While 循环之前声明 count

      game_on = True 
      count = 3
      while True:
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-28
        • 2021-07-30
        • 1970-01-01
        • 1970-01-01
        • 2019-02-12
        • 1970-01-01
        • 2023-03-06
        • 2013-05-05
        相关资源
        最近更新 更多