鱼C论坛

 找回密码
 立即注册
查看: 1143|回复: 7

[已解决]无法跳出循环

[复制链接]
发表于 2018-3-15 15:21:36 | 显示全部楼层 |阅读模式

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

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

x
def a():
    nf = input('请输入要查询的年份:\n')
    while not nf.isdigit():        
        b = input('输入无效,输入1重新输入查询,输入其它退出 \n')
        if b == '1':
            a()               
        else:      
            print('查询结束')
    nf = int(nf)
    if nf%400 == 0:
        print('%s 是闰年'%nf)
    elif nf%4 == 0 and nf%100 != 0:
        print('%s 是闰年'%nf)
    else:
        print('%s 不是闰年'%nf)
    c = input('查询成功,输入1重新输入查询,输入其它退出 \n')
    if c == '1':
        a()               
    else:
        print('查询结束')
a()
正常输入数字可以跳槽循环,如果先输入非数字:aa 再输入1  1992  2  后又会跳到上面那个输入无效的循环
最佳答案
2018-3-15 16:02:11
你的递归时  在函数名前加上return 语句就行了  这样的递归不是返回来执行省下的代码。如果不加return 深度递归完成后,会返回来继续执行 同级省下的代码
12.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-15 15:26:26 | 显示全部楼层
你无论输入什么都是字符串,不可能是数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 15:34:17 | 显示全部楼层
这代码,你这样写 函数调用自身 已经是递归了。不要说你没有 在合适的地方 return 。就算你 return 了也是返回上一层,你输入的越多,递归的层数也就越多,想要结束,退出的层数也多。

你还是换个思路吧。。。。。

如下代码(加了return,也只是返回上一层,多输几次'输入其它退出'也就退出了):
  1. def a():
  2.     nf = input('请输入要查询的年份:\n')
  3.     while not nf.isdigit():        
  4.         b = input('输入无效,输入1重新输入查询,输入其它退出 \n')
  5.         if b == '1':
  6.             a()               
  7.         else:      
  8.             print('查询结束')
  9.             return 0
  10.     nf = int(nf)
  11.     if nf%400 == 0:
  12.         print('%s 是闰年'%nf)
  13.     elif nf%4 == 0 and nf%100 != 0:
  14.         print('%s 是闰年'%nf)
  15.     else:
  16.         print('%s 不是闰年'%nf)
  17.         
  18.     c = input('查询成功,输入1重新输入查询,输入其它退出 \n')
  19.     if c == '1':
  20.         a()               
  21.     else:
  22.         print('查询结束')
  23.         return 0
  24. a()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 15:34:30 | 显示全部楼层
因为你是在循环里调用的函数,循环里的函数执行完之后跳出循环    然后继续执行第一层函数循环后下面的指令
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 15:34:38 | 显示全部楼层
你的while循环没有一个合理的结束条件
这种递归的写法是很危险的做法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-15 15:45:51 | 显示全部楼层
ba21 发表于 2018-3-15 15:34
这代码,你这样写 函数调用自身 已经是递归了。不要说你没有 在合适的地方 return 。就算你 return 了也是 ...

谢谢,刚开始学的,这个代码要怎么优化,就是想让查询后能选择结束或者继续查询
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 16:02:11 | 显示全部楼层    本楼为最佳答案   
你的递归时  在函数名前加上return 语句就行了  这样的递归不是返回来执行省下的代码。如果不加return 深度递归完成后,会返回来继续执行 同级省下的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2018-3-15 16:25:26 | 显示全部楼层
yuexing 发表于 2018-3-15 16:02
你的递归时  在函数名前加上return 语句就行了  这样的递归不是返回来执行省下的代码。如果不加return 深度 ...

谢谢指导,解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 12:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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