鱼C论坛

 找回密码
 立即注册
查看: 862|回复: 2

[已解决]这是一个找质数的程序 不知道为什么不对

[复制链接]
发表于 2018-12-23 14:03:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 帅的一塌糊涂 于 2018-12-23 14:06 编辑

print('将会从2到您输入的数字的范围内寻找质数')
n = int(input('请输入大于2的数字:'))
x1=1
for x in range(2,n):
    for x1 in range(2,x):   
        if (x % x1)==0:
            break
    print(x)

程序运行以后 比如我输入20,他会输出从2到19  为什么会这样 不应该是只输出质数吗
最佳答案
2018-12-23 14:53:28
本帖最后由 sunrise085 于 2018-12-23 14:56 编辑

这个题目是你对break的用法不熟悉导致的。break只能跳出一层循环,因此你的break语句只能跳出内层的for循环,这就导致每次循环,都会执行print(x)语句。所以会将所有的数都输出。
修改方法就是加一个flag标志,若是质数,则输出。
  1. print('将会从2到您输入的数字的范围内寻找质数')
  2. n = int(input('请输入大于2的数字:'))
  3. x1=1
  4. for x in range(2,n):
  5.     flag=True
  6.     for x1 in range(2,x):   
  7.         if (x % x1)==0:
  8.             flag=False
  9.             break
  10.     if flag:
  11.         print(x)
复制代码

其实还有另一种方法,就是利用for循环的else分支。在循环内遇到break之后,则会执行else模块,这样就不用设置flag标志了。
  1. print('将会从2到您输入的数字的范围内寻找质数')
  2. n = int(input('请输入大于2的数字:'))
  3. x1=1
  4. for x in range(2,n):
  5.     for x1 in range(2,x):   
  6.         if (x % x1)==0:
  7.             break
  8.     else:
  9.         print(x)
复制代码

可以看看这个帖子,我写的程序在78楼。
https://fishc.com.cn/thread-84805-4-1.html
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-23 14:47:24 | 显示全部楼层
本帖最后由 heidern0612 于 2018-12-23 14:57 编辑

你x1赋值为1,任何数求余除1都是零。

并且你最后的print(x)是跟for循环对其的,相当于只是从头到尾执行了第一个range(2到n的范围。)

  1. print('将会从2到您输入的数字的范围内寻找质数')
  2. n = int(input('请输入大于2的数字:'))+1
  3. for x in range(2,n):
  4.     for x1 in range(2,x):   
  5.         if (x % x1)==0:
  6.             break
  7.     else:
  8.         print(x)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 14:53:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2018-12-23 14:56 编辑

这个题目是你对break的用法不熟悉导致的。break只能跳出一层循环,因此你的break语句只能跳出内层的for循环,这就导致每次循环,都会执行print(x)语句。所以会将所有的数都输出。
修改方法就是加一个flag标志,若是质数,则输出。
  1. print('将会从2到您输入的数字的范围内寻找质数')
  2. n = int(input('请输入大于2的数字:'))
  3. x1=1
  4. for x in range(2,n):
  5.     flag=True
  6.     for x1 in range(2,x):   
  7.         if (x % x1)==0:
  8.             flag=False
  9.             break
  10.     if flag:
  11.         print(x)
复制代码

其实还有另一种方法,就是利用for循环的else分支。在循环内遇到break之后,则会执行else模块,这样就不用设置flag标志了。
  1. print('将会从2到您输入的数字的范围内寻找质数')
  2. n = int(input('请输入大于2的数字:'))
  3. x1=1
  4. for x in range(2,n):
  5.     for x1 in range(2,x):   
  6.         if (x % x1)==0:
  7.             break
  8.     else:
  9.         print(x)
复制代码

可以看看这个帖子,我写的程序在78楼。
https://fishc.com.cn/thread-84805-4-1.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-11 03:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表