对于串联的循环–;初级python练习
大家好,我写这篇文章是因为我一直在做一个练习,我应该只使用循环和if/else语句。我找到了一种方法,但实际上我对同一块代码进行了四次迭代,我真的在寻找一种自动化的方法。 我知道这可能不是解决这个问题的最佳方法,但现在我不是在寻找最有效的方法(我已经在这个问题的解决方案中找到了),我是在问你如何使用for来迭代代码块 这个练习告诉我创建一个从键盘获取IP地址的程序,并验证它是否可以被解释为有效的IP地址。 IP地址由4个数字组成,每个数字之间用句号隔开。每个数字不能超过3位。(示例:127.0.0.1) 重要的 这个挑战旨在练习循环和if/else语句,因此尽管它可能是使用正则表达式编写的,但我们不希望您在这里使用它们,即使您知道它们是什么 这是我做的:对于串联的循环–;初级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.
# 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循环。如果你可以使用regexre.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")