免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 3164 | 回复: 2

for循环如何避免重复执行某一行代码??(但该行代码又必须在for循环体内) [复制链接]

论坛徽章:
0
发表于 2018-02-03 09:32 |显示全部楼层
本帖最后由 zhsx616 于 2018-02-03 09:54 编辑

程序功能是输入一个数,判断是不是质数
代码如下:import math
class NumberError(Exception):
        pass
#如果输入的数小于2,则抛出自定义异常NumberError
def catcherror(x):
        if x<2:
                raise NumberError
while 1:
        try:        
                n=int(raw_input('please input a number:'))
        except ValueError:
                print 'you must input a integer!'
        try:
                catcherror(n)
        except NumberError:
                print 'the number must be >= 2!'
        #根号n如果不是整数
        if not isinstance(math.sqrt(n),int):
                #把根号n转换为整数m
                m=int(math.sqrt(n))
                #n去除2到m的每一个数,只要有任何一个数能整除,n就不是质数
                for i in range(2,m+1):
                        if n%i==0: #如果能整除,break跳出for循环
                                print '%d is a composite number.'%n
                                break
                        elif n%i!=0:#如果不能整除,i+1
                                i+=1
                                #全部循环后都不能整除,则n是质数
                                print '%d is a prime number.'%n
                                
        #n开平方根有整数解,那么n必然是合数
        else:
                print '%d is a composite number.'%n



我想要的效果是,只要有一个数满足整除,那么输入的数n肯定就是合数,如果全部循环后都无法整除,那么n就是一个质数,这个时候输出“n是一个质数”,这个字符串我只想输出一次就行了,但是实际按照上面代码,每次循环满足“无法整除”的条件,就会输出一次。
这个问题该如何解决??

论坛徽章:
7
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:41程序设计版块每日发帖之星
日期:2016-07-04 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-08-09 06:20:00
发表于 2018-02-05 13:38 |显示全部楼层
把那条语句拿到循环外,在判断是不是合数的时候,如果是合数直接exit()就好了,否则如果是质数就可以正常到循环结束,逻辑就正常了

论坛徽章:
7
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:41程序设计版块每日发帖之星
日期:2016-07-04 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-08-09 06:20:00
发表于 2018-02-05 13:43 |显示全部楼层
#!py2.7

a = 3
b = 4

def judge_num(n):
        if n < 2:
                return False
        for i in range(2,n):
                if n%i == 0:
                        return False
        return True

if judge_num(a):
        print 'ok'

if judge_num(b):
        print 'ok'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

数据风云,十年变迁
DTCC 第十届中国数据库技术大会已启航!

2019年5月8日~5月10日,由IT168旗下ITPUB企业社区平台主办的第十届中国数据库技术大会(DTCC2019),将在北京隆重召开。大会将邀请百余位行业专家,就热点技术话题进行分享,是广大数据领域从业人士的又一次年度盛会和交流平台。与SACC2018类似,本届大会将采用“3+2”模式:3天传统技术演讲+2天深度主题培训。大会不仅提供超100场的主题演讲,还会提供连续2天的深度课程培训,深化数据领域的项目落地实践方案。
DTCC2019,一场值得期待的数据技术盛会,殷切地希望您报名参与!

活动入口>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP