【发布时间】:2016-12-30 08:06:16
【问题描述】:
大家好,我写信是因为我遇到了一个只能使用 for 循环和 if/else 语句的练习。我找到了一种方法,但实际上我将相同的代码块迭代了四次,我真的在寻找一种自动化它的方法。 我知道这可能不是解决练习的最佳方法,但现在我不是在寻找最有效的方法(我已经在练习的解决方案中找到了),我在问你如何使用 for 进行迭代代码块
该练习告诉我创建一个程序,该程序从键盘获取 IP 地址并验证它是否可以解释为有效的 IP 地址。 IP 地址由 4 个数字组成,彼此之间用句号分隔。每个数字不能超过 3 位数字。 (例如:127.0.0.1) 重要的 这个挑战旨在练习 for 循环和 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)
【问题讨论】:
-
'如果它是真实写的':python提供
ipaddres。你甚至不必使用正则表达式。包括电池! -
你的问题是什么?
-
@hiroprotagonist 最后四部分代码重复了四次,我想只写一次可能使用 for 循环。
-
如果您可以使用正则表达式
re.match(r"^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$", ip),您可以从中提取组并检查它们是否在 [0 .. 255] 内
标签: python python-3.x if-statement for-loop break