请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 8687|回复: 1

简单的While加if,但是,奇怪的执行结果

[复制链接]

2

主题

0

好友

10

积分

新手上路

Rank: 1

发表于 2021-1-13 16:04:19 |显示全部楼层
#! /usr/bin/python
# -*- coding: utf-8 -*-
import re

# ip_rule = r'(?<![\.\d])(?:25[0-5]\.|2[0-4]\d\.|[01]?\d\d?\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)(?![\.\d])'
value = '输入合法的远程主机ip:'
ip_rule = r"^(??:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"

# retry=3,递减1,3次后break
def setup_reinput_ip_3(values, retry=3):
    val = raw_input(values)
    print val
    # re.match 如果匹配成功,则返回一个Match,否则返回一个None
    while re.match(ip_rule, val) is None:
        print 'retry1', retry
        if retry == 0:
            print 'retry2=', retry
            break
            return 'wrong' # 它的存在,只是为了试错
            print 'retry7', retry
        else:
            print 'retry3', retry
            retry -= 1
            print 'retry4', retry
            setup_reinput_ip_3('请输入合法的远程ip地址: ' + '(剩余 {} 次)'.format(retry), retry)
            print 'retry5', retry
    else:
        print 'retry6', retry
        return val


print setup_reinput_ip_3('输入远程主机ip:')


请问这个代码哪里出了问题?
为什么不匹配的输入结果不按照思路break呢?
它还会继续执行几次。

我的运行结果,粘贴如下:
输入远程主机ip:9
9
retry1 3
retry3 3
retry4 2
请输入合法的远程ip地址: (剩余 2 次)9
9
retry1 2
retry3 2
retry4 1
请输入合法的远程ip地址: (剩余 1 次)9
9
retry1 1
retry3 1
retry4 0
请输入合法的远程ip地址: (剩余 0 次)9
9
retry1 0
retry2= 0
retry5 0
retry1 0
retry2= 0
retry5 1
retry1 1
retry3 1
retry4 0
请输入合法的远程ip地址: (剩余 0 次)9
9
retry1 0
retry2= 0
retry5 0
retry1 0
retry2= 0
retry5 2
retry1 2
retry3 2
retry4 1
请输入合法的远程ip地址: (剩余 1 次)9
9
retry1 1
retry3 1
retry4 0
请输入合法的远程ip地址: (剩余 0 次)9
9
retry1 0
retry2= 0
retry5 0
retry1 0
retry2= 0
retry5 1
retry1 1
retry3 1
retry4 0
请输入合法的远程ip地址: (剩余 0 次)9
9
retry1 0
retry2= 0
retry5 0
retry1 0
retry2= 0
None

Process finished with exit code 0



回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2021-1-14 17:59:09 |显示全部楼层
函数里又调用函数,形成了递归调用

while re.match(ip_rule, val) is None:
    retry -= 1
    val = raw_input(values)

不匹配的情况下重试,3行代码就可以了。
不需要一层套一层,循环套递归,全都乱了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-3-29 14:50 , Processed in 0.015881 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部