鱼C论坛

 找回密码
 立即注册
查看: 1442|回复: 10

[已解决]循环语句下i的break会跳出该循环吗

[复制链接]
发表于 2019-3-30 13:35:40 | 显示全部楼层 |阅读模式

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

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

x
如题

num = input("请输入一个整数(输入Q结束程序):")  
while num != 'Q':      
        if num.isdigit():  
            num = int(num)  
            print('十进制 -> 十六进制:%d -> %#x'%(num,num))  
            print('十进制 -> 十六进制:%d -> %#o'%(num,num))  
            print('十进制 -> 十六进制:%d -> '%num,bin(num))  
            num = input("请输入一个整数(输入Q结束程序):")  
        else:  
            if num == 'Q':
                    break
            else:  
                num = input("输入不合法,请输入一个整数(输入Q结束程序):")
        print('break不会直接跳出循环结构')
else:
        print("程序结束")


如果循环语句由break结束就不会执行else后的语句
为什么输出结果是这样的呢
请输入一个整数(输入Q结束程序):108
十进制 -> 十六进制:108 -> 0x6c
十进制 -> 十六进制:108 -> 0o154
十进制 -> 十六进制:108 ->  0b1101100
请输入一个整数(输入Q结束程序):Q
break不会直接跳出循环结构
程序结束
>>>

求大神解答
最佳答案
2019-3-30 14:36:29
明白了,你的进入循环体的条件是while num != 'Q':       如果num==Q 不进入循环体,所以else 后面的才能够被执行

也即是说你这里的
  if num == 'Q':
                     break
             else:  
                 num = input("输入不合法,请输入一个整数(输入Q结束程序):")
头半句代码   if num == 'Q':
                     break
            永远都不会被执行的  属于废码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-30 13:39:33 | 显示全部楼层
while else和for else是一个结构,如果是通过break跳出就不会执行else语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-30 14:06:07 | 显示全部楼层
塔利班 发表于 2019-3-30 13:39
while else和for else是一个结构,如果是通过break跳出就不会执行else语句

这个我知道
可为什么break了后
还会执行else的语句呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-30 14:27:34 | 显示全部楼层
本帖最后由 wp231957 于 2019-3-30 14:29 编辑

E:\>python ex11.py
请输入一个整数(输入Q结束程序):Q
程序结束

但是这个输出程序结束 就很不合理了

看下面的测试:

  1. a=1
  2. while a==1:
  3.   a+=1
  4.   if a>1 :
  5.     break
  6. else:
  7.   print("hello,i am")       
复制代码


E:\>python ex11.py

E:\>
很明显  else 后面的语句没有被执行  这是和资料上介绍的 break 直接终止到while else 之后是一样的

ps: 今天才知道 while for 居然还能和else 配对  奇葩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-30 14:36:29 | 显示全部楼层    本楼为最佳答案   
明白了,你的进入循环体的条件是while num != 'Q':       如果num==Q 不进入循环体,所以else 后面的才能够被执行

也即是说你这里的
  if num == 'Q':
                     break
             else:  
                 num = input("输入不合法,请输入一个整数(输入Q结束程序):")
头半句代码   if num == 'Q':
                     break
            永远都不会被执行的  属于废码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-30 15:13:17 | 显示全部楼层
wp231957 发表于 2019-3-30 14:36
明白了,你的进入循环体的条件是while num != 'Q':       如果num==Q 不进入循环体,所以else 后面的才能够 ...

感谢大佬的回答
确实是这的问题
但我将循环条件改成True

num = input("请输入一个整数(输入Q结束程序):")  
while True:      
        if num.isdigit():  
            num = int(num)  
            print('十进制 -> 十六进制:%d -> %#x'%(num,num))  
            print('十进制 -> 十六进制:%d -> %#o'%(num,num))  
            print('十进制 -> 十六进制:%d -> '%num,bin(num))  
            num = input("请输入一个整数(输入Q结束程序):")  
        else:  
            if num == 'Q':
                    break
            else:  
                num = input("输入不合法,请输入一个整数(输入Q结束程序):")
        print('break不会直接跳出循环结构')
else:
        print("程序结束")


为什么他会输出break后的语句呢?


请输入一个整数(输入Q结束程序):123
十进制 -> 十六进制:123 -> 0x7b
十进制 -> 十六进制:123 -> 0o173
十进制 -> 十六进制:123 ->  0b1111011
请输入一个整数(输入Q结束程序):Q
break不会直接跳出循环结构

麻烦您了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-30 15:23:34 | 显示全部楼层
本帖最后由 wp231957 于 2019-3-30 15:25 编辑

没啥毛病啊:

E:\>python ex11.py
请输入一个整数(输入Q结束程序):Q

E:\>python ex11.py
请输入一个整数(输入Q结束程序):56
十进制 -> 十六进制:56 -> 0x38
十进制 -> 十六进制:56 -> 0o70
十进制 -> 十六进制:56 ->  0b111000
请输入一个整数(输入Q结束程序):Q
break不会直接跳出循环结构

E:\>

至于  print('break不会直接跳出循环结构') 这个为什么会出现  不用解释吧
(这里是先输入Q 然后输出  print('break不会直接跳出循环结构') 然后再判断 是否==Q)

焦点是 看是否会 print("程序结束")  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-30 15:45:17 | 显示全部楼层
wp231957 发表于 2019-3-30 15:23
没啥毛病啊:

E:\>python ex11.py

噢,明白了
谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-30 15:50:05 | 显示全部楼层
1.首先你这个
  1. print('break不会直接跳出循环结构')
复制代码
是有逻辑漏洞的,。当你输入一个整数,程序没有运行到break,也可以输出‘break不会直接跳出循环结构’。
注释如下:
  1. while num != 'Q':      
  2.         if num.isdigit():  #输入一个整数,试试看
  3.             num = int(num)  
  4.             print('十进制 -> 十六进制:%d -> %#x'%(num,num))  
  5.             print('十进制 -> 十六进制:%d -> %#o'%(num,num))  
  6.             print('十进制 -> 十六进制:%d -> '%num,bin(num))  
  7.             num = input("请输入一个整数(输入Q结束程序):")#现在输入下一个,输入Q            
  8.             #num = 'Q'
  9.             #print'break不会直接跳出循环结构',回到while条件判定,直接输出'程序结束'
  10.         else:  
  11.             if num == 'Q': #这里永远不执行,因为while大条件是不等于Q,在这种情况下是不会出现num == ‘Q’
  12.                     break
  13.             else:  
  14.                 num = input("输入不合法,请输入一个整数(输入Q结束程序):")
  15.         print('break不会直接跳出循环结构')
  16. else:
  17.         print("程序结束")
复制代码


2.如果要改的,我是这样的
  1. num = input("请输入一个整数(输入Q结束程序):")  
  2. while num != 'Q':      
  3.         if num.isdigit():  
  4.             num = int(num)  
  5.             print('十进制 -> 十六进制:%d -> %#x'%(num,num))  
  6.             print('十进制 -> 十六进制:%d -> %#o'%(num,num))  
  7.             print('十进制 -> 十六进制:%d -> '%num,bin(num))  
  8.             num = input("请输入一个整数(输入Q结束程序):")
  9.             if num == 'Q':
  10.                 print('程序结束')
  11.                 break
  12.         else:  
  13.             num = input("输入不合法,请输入一个整数(输入Q结束程序):")
  14.         print('break不会直接跳出循环结构')
  15. else:
  16.         print("程序结束")
复制代码

如果第二次输入‘Q’的话,因为break跳出了循环的关系(while else 中的else只有在while全部正常执行完毕才会执行),所以最后的else语句不会执行,所以break之前加入‘程序结束’会好一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-30 16:19:37 | 显示全部楼层
oNlYLeeee 发表于 2019-3-30 15:50
1.首先你这个是有逻辑漏洞的,。当你输入一个整数,程序没有运行到break,也可以输出‘break不会直接跳出循 ...

谢谢大佬
已经解决了
麻烦您了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-30 16:44:02 | 显示全部楼层
弋兮灬夜丶 发表于 2019-3-30 16:19
谢谢大佬
已经解决了
麻烦您了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 15:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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