对于串联的循环–;初级python练习

对于串联的循环–;初级python练习,python,python-3.x,if-statement,for-loop,break,Python,Python 3.x,If Statement,For Loop,Break,大家好,我写这篇文章是因为我一直在做一个练习,我应该只使用循环和if/else语句。我找到了一种方法,但实际上我对同一块代码进行了四次迭代,我真的在寻找一种自动化的方法。 我知道这可能不是解决这个问题的最佳方法,但现在我不是在寻找最有效的方法(我已经在这个问题的解决方案中找到了),我是在问你如何使用for来迭代代码块 这个练习告诉我创建一个从键盘获取IP地址的程序,并验证它是否可以被解释为有效的IP地址。 IP地址由4个数字组成,每个数字之间用句号隔开。每个数字不能超过3位。(示例:127.0.

大家好,我写这篇文章是因为我一直在做一个练习,我应该只使用循环和if/else语句。我找到了一种方法,但实际上我对同一块代码进行了四次迭代,我真的在寻找一种自动化的方法。 我知道这可能不是解决这个问题的最佳方法,但现在我不是在寻找最有效的方法(我已经在这个问题的解决方案中找到了),我是在问你如何使用for来迭代代码块

这个练习告诉我创建一个从键盘获取IP地址的程序,并验证它是否可以被解释为有效的IP地址。 IP地址由4个数字组成,每个数字之间用句号隔开。每个数字不能超过3位。(示例:127.0.0.1) 重要的 这个挑战旨在练习循环和if/else语句,因此尽管它可能是使用正则表达式编写的,但我们不希望您在这里使用它们,即使您知道它们是什么

这是我做的:

# ipAddress = input("please enter an ipAddress: ")
ipAddress = "192.168.7.7"  #test ip address


# check if number of dots is 3
numberOfDot = 0
for char in ipAddress:
    if char == '.':
        numberOfDot += 1
totNumbOfDot = numberOfDot  # output of this section is totNumberOfDot, to be checked at the end
if totNumbOfDot != 3:
    print("You inserted a wrong ip address")


# first number check            # THIS IS THE BLOCK OF CODE I WANT TO 
number1 = ''                    # ITERATE WITH FOR IF POSSIBLE
for char in ipAddress:
    if char in "0123456789":
        number1 += char
    if char == '.':
        break
if 1 <= len(number1) <= 3:
    print("First number:   OK")
else:
    print("First number:   Fail")
digitN1 = len(number1) + 1
print(number1)


# second number check
numberMinus2 = ipAddress[digitN1:]
number2 = ''
for char in numberMinus2:
    if char in "0123456789":
        number2 += char
    if char == '.':
        break
if 1 <= len(number2) <= 3:
    print("Second number:  OK")
else:
    print("Second number: Fail")
digitN2 = len(number2) + digitN1 +1
print(number2)


# third number check
numberMinus3 = ipAddress[digitN2:]
number3 = ''
for char in numberMinus3:
    if char in "0123456789":
        number3 += char
    if char == '.':
        break
if 1 <= len(number3) <= 3:
    print("Third number:   OK")
else:
    print("Third number:   Fail")
digitN3 = len(number3) + digitN2 + 1
print(number3)


# fourth number check
numberMinus4 = ipAddress[digitN3:]
number4 = ''
for char in numberMinus4:
    if char in "0123456789":
        number4 += char
    if char == '.':
        break
if 0 < len(number4) <= 3:
    print("Fourth number:  OK")
else:
    print("Fourth number:  Fail")
digitN4 = len(number4) + digitN3 + 1
print(number4)
#ipAddress=input(“请输入一个ipAddress:”)
ipAddress=“192.168.7.7”#测试ip地址
#检查点数是否为3
numberOfDot=0
对于ipAddress中的字符:
如果char==''。:
numberOfDot+=1
totNumberOfDot=numberOfDot#本节的输出为totNumberOfDot,将在末尾进行检查
如果托托多夫!=三:
打印(“您插入了错误的ip地址”)
#第一个数字检查#这是我想要的代码块
number1=''#如果可能,用FOR迭代
对于ipAddress中的字符:
如果“0123456789”中的字符:
number1+=char
如果char==''。:
打破

如果1好,你必须问自己一个正确的问题:“我能做得更好吗?”。请一直这样做。是的,事实上,你可以。处理点之间的数字验证的代码本质上是相同的。因此,您应该将字符串拆分为点,并使用for循环来验证每个组:

for str in ipAddress.split("."):
    your validation here

怎么样?在点处拆分字符串
,并检查点之间是否存在有效范围内的数字(这也将接受
'255.255.255'

def有效(ipaddress):
#我们需要3个点;否则这就不是IP地址。
如果不是ipaddress.count('.')==3:
返回错误
#检查点之前、点之间和点之后的内容
对于ipaddress.split('.')中的字节:
#如果字节不能解释为整数->不好!
尝试:
i=int(字节)
除值错误外:
返回错误
#现在检查字节是否在有效范围内
如果i<0:
返回错误
如果i>255:
返回错误
返回真值
打印(有效(ipaddress='192.168.7.7'))#->True
打印(有效(ipaddress='.168.7.7'))#->False
打印(有效(ipaddress='721.168.7.7'))#->False
我还要说,split()是一种方法。您的问题是,是否有一种方法可以使用您的逻辑,而不必重复代码4次。要实现这一目标,您可以执行以下操作:

numberOfDot=0
number=""
for char in ip+'.':
    if char=='.':
        numberOfDot+=1
        if len(number) in [1,2,3]:
            print("number %d OK"%numberOfDot)

        else:
            print("number %d not OK"%numberOfDot)
        print(number)
        number=""
    elif char in '1234567890':
        number+=char
    else:
        print("character not valid")
if numberOfDot!=4:
    print("you inserted a wrong ip")

正如我所说,我还建议使用split()-这只是为了尝试提供更接近您的问题的答案。另外请注意,这段代码(与您的代码相同)将包含字母而不仅仅是数字的ip地址标记为OK。

“如果它是为真实目的编写的”:python提供。你甚至不用使用正则表达式。包括电池!你的问题是什么?@hiroprotation代码的最后四个部分重复了四次,我只想写一次,可能是使用for循环。如果你可以使用regex
re.match(r^(\d{1,3})\(\d{1,3})\(\d{1,3})\(\d{1,3})$,ip)
你可以从中提取组并检查它们是否在[0..255]之内
numberOfDot=0
number=""
for char in ip+'.':
    if char=='.':
        numberOfDot+=1
        if len(number) in [1,2,3]:
            print("number %d OK"%numberOfDot)

        else:
            print("number %d not OK"%numberOfDot)
        print(number)
        number=""
    elif char in '1234567890':
        number+=char
    else:
        print("character not valid")
if numberOfDot!=4:
    print("you inserted a wrong ip")