鱼C论坛

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

[已解决]大家好啊 第三期的答案中有个地方看不懂,有谁能讲解一下么?

[复制链接]
发表于 2017-12-11 16:43:27 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 yjsx86 于 2017-12-11 16:44 编辑

大家好在挑战赛第三期的答案中 有个地方看不懂 也是第一次看到这样的写法 能帮我讲解一下么 谢谢!
红色部分 第一次见 if else 分开写的
def next_int(m):
    m = list(str(m))
    l = len(m)
    for i in range(l-1, 0, -1):
        if m > m[i-1]:
            break
    else:
        return None

    mid = i
    for j in range(l-1, i-1, -1):
        if m[i-1] < m[j] <= m:
            if m[mid] > m[j]:
                mid = j
    m[i-1], m[mid] = m[mid], m[i-1]
    m[i:] = sorted(m[i:])
    s = ''.join(m)
    return int(s)
最佳答案
2017-12-11 17:01:39
本帖最后由 jerryxjr1220 于 2017-12-11 17:04 编辑

这里的else不是和if成对的,是和for成对的,你仔细看对齐的空格。
  1. for ... :
  2.   循环
  3. else:
  4.   for循环结束后的子程序,如果是break跳出循环则不触发else后的子程序
复制代码


同样的while循环后也可以跟else语句,作用与for循环类似。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-11 16:47:44 | 显示全部楼层
就是负索引,当后面的数比前面的大的时候,将结束循环,找到了i的位置
如果走完了都没有找到后面比前面大的数,说明这个数已经达到最大,返回None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-11 17:01:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jerryxjr1220 于 2017-12-11 17:04 编辑

这里的else不是和if成对的,是和for成对的,你仔细看对齐的空格。
  1. for ... :
  2.   循环
  3. else:
  4.   for循环结束后的子程序,如果是break跳出循环则不触发else后的子程序
复制代码


同样的while循环后也可以跟else语句,作用与for循环类似。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 17:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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