通过封装程序的每个步骤,您可以消除所有三个功能需求。我们将让main控制循环,并通过将数据传入和传出函数调用来控制流,而不是将循环放在函数内部。
让我们重新设计一下input_numbers()函数。def get_input_number():
num = int(raw_input("Enter a positive integer no greater than 42 "))
if num <= 0 or num > 42:
print "Invalid input. Try again "
get_input_number()
else:
return num
因此,与其让输入的数字控制循环以及输入处理和验证,不如让它按照它的名称所暗示的那样:它请求输入,验证它,然后,如果它是好的,它将值返回给调用者,但是如果它是坏的,它会写一条消息,然后再次调用自己给用户可以输入好的输入。
我们将设置的下一个函数直接来自您的需求列表。从用户输入的所有数字中,我们需要找到最大的一个。仅从语言上,我们就可以确定我们正在查找一组数字,因此,这是一个列出列表的好地方。假设我们将所有输入的用户存储在一个列表中,然后我们可以将该列表传递给一个函数并对其执行操作,就像这样。def get_greatest_number(input_list):
highest = input_list[0]
for i in input_list:
if i > highest:
highest = i
return highest
我们将列表的第一个元素设置为变量highest,然后根据该初始值检查列表中的所有其他元素。如果我们找到一个更大的变量,然后将highest变量重新分配给更大的元素。一旦我们对列表中的每个元素都这样做了,highest中的数字现在将是,就是,highest中的数字,所以,我们将它返回到主程序。
同样,我们也可以找到最小的。def get_smallest_number(input_list):
smallest = input_list[0]
for i in input_list:
if i < smallest:
smallest = i
return smallest
最后,我们到达主回路。这里我们声明一个空列表,number_list来存储所有的数字。我们用它的和作为循环条件。if __name__ == '__main__':
number_list = []
while sum(number_list) < 179:
number_list.append(get_input_number())
在循环的主体中,我们调用get_input_number()并将其结果附加到我们创建的列表中。一旦列表中的数字之和超过179,while循环将退出,我们最终可以向用户显示结果。print
print '-------------------------'
print 'total of numbers entered: %d' % sum(number_list)
print 'greatest number entered: %d' % get_greatest_number(number_list)
print 'smallest number entered: %d' % get_smallest_number(number_list)
在这里,我们可以生成get_greatest_number和get_smallest_number,并将数字列表作为参数提供给它们。它们将循环遍历列表,然后将适当的值返回给print语句。