虽然我已经用 php 做了很多工作,但我对 Python 世界还是很陌生......这是我的案例......
这是我的代码:
def validNum1(Num1):
if Num1 < 0:
print "%s is not valid value. Try again." % Num1
return 0
elif Num1 > 11:
print "%s is not valid value. Try again." % Num1
return 0
else:
return 1
def getInput_Num1():
while 1:
Num1 = raw_input("Enter Num1 Value: ")
if validNum1(int(Num1)):
break
print "You're right. %s is a valid Num1." % Num1
return
def validNum2(Num2):
if Num2 < 0:
print "%s is not valid value. Try again." % Num2
return 0
elif Num2 > 59:
print "%s is not valid value. Try again." % Num2
return 0
else:
return 2
def getInput_Num2():
while 2:
Num2 = raw_input("Enter Num2 Value: ")
if validNum2(int(Num2)):
break
print "You're right. %s is a valid Num2." % Num2
return
if __name__ == '__main__':
getInput_Num1()
getInput_Num2()
所以现在我想你们已经知道需要填补什么了;但让我说得更清楚一些。我想添加到这个程序中的是能够添加 Num1 和 Num2 并向用户显示总和。
我会尝试将其分解为两个接受参数的函数。这也意味着,您可以通过更改
limits
列表来更改限制数量及其值,从而使您的代码更加灵活。它还使用更干净的新样式字符串格式。
def validNum(num,limit):
if 0< num <limit:
print "{0} is a valid value.".format(str(num))
return num
print "{0} is not a valid value. Try again.".format(str(num))
def getInput(limits):
results = []
for limit in limits:
while True:
num = int(raw_input("Enter a numeric Value: "))
if validNum(num,limit):
results.append(int(num))
break
print 'The sum of chosen numbers is {0}'.format(str(sum(results)))
limits=[11,59]
getInput(limits)
尝试将所有功能合并为一个(我想说这会使它更清晰),然后您可以添加
Num1
和 Num2
并打印结果。
def getInput():
while True:
Num1 = raw_input('Enter Num1 Value: ')
if Num1 in range(12):
print 'You're right. %s is a valid Num1.' % Num1
break
print '%s is not valid value. Try again.' % Num1
while True:
Num2 = raw_input('Enter Num2 Value: ')
if Num2 in range(60):
print 'You're right. %s is a valid Num2.' % Num2
break
print '%s is not valid value. Try again.' % Num2
print 'The sum of your numbers is %s.' % (Num1 + Num2)
if __name__ == '__main__':
getInput()
但是,如果您不想更改太多代码,请更改第二个
getInput
函数,使其接受参数 Num1
,然后让第一个函数调用第二个函数,参数输入为 Num1
。然后编写第三个函数,它接受两个数字,将它们相加并打印结果。就像这样:
getInput_Num2(Num1) #add this to end of `getInput_Num1` function
def getInput_Num2(Num1): #add a `Num1` parameter to pass to the new function
addNums(Num1, Num2) #call the new function at the end of `getInput_Num2`
def addNums(Num1, Num2):
print 'The sum of your numbers is %s.' % (Num1 + Num2)
#do whatever else you want to do
if __name__ == '__main__':
getInput_Num1()
我建议不要创建一个函数,而是将关注点分开:你想要输入(两次,有不同的提示),你想要验证,你想要相乘,你想要打印结果。对于后两者,由于其复杂性较低,因此不需要任何功能。对于前两个,创建函数并将它们重新用于 num1 和 num2。
试试这个:
def is_valid_number(number_str):
try:
number = int(number_str)
except ValueError:
return False
if number < 0 or number > 11:
return False
else:
return True
def get_input_number(prompt):
while True:
num = raw_input(prompt)
if is_valid_number(num):
return int(num)
else:
print "%s is not a valid value. Try again." % num
if __name__ == '__main__':
num1 = get_input_number("Enter Num1 Value: ")
num2 = get_input_number("Enter Num2 Value: ")
print "%i + %i = %i" % (num1, num2, num1+num2)
主例程只有三行,每个方法都执行其名称所指示的功能,并且可以重用。
关注点分离(SoC)是软件设计的主要原则之一,它使代码更具可读性、可维护性、优雅性和不易出错
对于任何其他可能正在寻找更具Python风格的方法(Python 3)的人,您可以尝试以下方法:
def valid_nums():
"""Check for validity of user inputs."""
num_1, num_2 = get_input()
if (0 <= num_1 <= 11) and (0 <= num_2 <= 59):
sum_of_nums = num_1 + num_2
return "\nThe sum of {0} and {1} is {2}.\n".format(num_1, num_2, sum_of_nums)
else:
return "\n{0} or {1} is out of range.\n".format(num_1, num_2)
def get_input():
"""Accept user input."""
while True:
try:
num_1 = int(input("Enter a number between 0 and 11: "))
num_2 = int(input("Enter a number between 0 and 59: "))
except ValueError:
print("\nOne or more of your entry is invalid. Please try again.\n")
continue
else:
return num_1, num_2
# Main program loop.
while True:
print(valid_nums())