目标:*编写一个python程序,重复提示输入正数,直到数字总和大于179.在解决方案中至少使用三个模块/函数。 *输入的最大数字不能超过42。 *当数字总和超过179时,打印数字的总和,输入的最大数字和输入的最小数字。
我只需要一些指导,特别是“input_numbers”模块。必须有一种更简单的方法来为每个数字创建一个变量。代码不完整。我还没有开始使用其他两个模块。提前致谢。
def input_numbers():
while True:
num1 = raw_input("Enter a positive integer no greater than 42 ")
if num1 <= 0:
print "That is not a positive integer. Try again "
elif num1 > 42:
print "The number cannot exceed 42. Try again "
num2 = raw_input("Enter another positive integer ")
if num2 <= 0:
print "That is not a positive integer. Try again "
elif num2 > 42:
print "The number cannot exceed 42. Try again "
num3 = raw_input("Enter another positive integer ")
if num3 <= 0:
print "That is not a positive integer. Try again "
elif num3 > 42:
print "The number cannot exceed 42. Try again "
num4 = raw_input("Enter another positive integer ")
if num4 <= 0:
print "That is not a positive integer. Try again "
elif num4 > 42:
print "The number cannot exceed 42. Try again "
num5 = raw_input("Enter another positive integer ")
if num5 <= 0:
print "That is not a positive integer. Try again "
elif num5 > 42:
print "The number cannot exceed 42. Try again "
elif sum(num1, num2, num3, num4, num5) > 179:
print_numbers()
add_numbers()
def add_numbers():
print_numbers()
def print_numbers():
input_numbers()
答案 0 :(得分:4)
您可以通过封装程序的每个步骤来淘汰所有三个功能要求。我们不是让你的循环在函数内部,而是让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
因此,我们不是让input_numbers控制循环以及输入处理和验证,而是让它完成它的名字所暗示的:它要求输入,验证它,然后,如果它是好的,它返回值到调用者,但如果它不好,它会写一条消息,并再次调用自己给用户可以输入好的输入。
我们将设置的下一个功能直接来自您的要求列表。从用户输入的所有数字中,我们需要找到最大的数字。仅从语言中,我们可以确定我们正在查看一组数字,因此,这是一个打破列表的好地方。假设我们将所有用户输入存储在列表中,然后我们可以将该列表传递给函数并对其执行操作,就像这样。
def get_greatest_number(input_list):
highest = input_list[0]
for i in input_list:
if i > highest:
highest = i
return 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语句。
答案 1 :(得分:2)
是的,当然有比为每个数字制作变量更好的方法。将它们存储在列表中。将它们存储在列表中也可以轻松找到它们的总和以及最高和最低值(这里有内置函数)。
作为进一步的提示,你需要使用两个循环,一个在另一个循环中。外部循环使用户输入数字,直到它们的总和超过179.内部循环使用户输入单个数字,直到它在1到42之间。
答案 2 :(得分:1)
def get_int(prompt=''):
while True:
try:
return int(raw_input(prompt))
except ValueError:
pass
def get_values():
values = []
total = 0
while total <= 179:
val = get_int('Enter a positive integer <= 42: ')
if 0 <= val <= 42:
values.append(val)
total += val
return values
def print_info(values):
print 'Sum is {}'.format(sum(values))
print 'Largest value is {}'.format(max(values))
print 'Smallest value is {}'.format(min(values))
def main():
values = get_values()
print_info(values)
if __name__=="__main__":
main()
答案 3 :(得分:0)
您可以在循环中重复轮询该数字,并将输入添加到列表中,例如
def input_numbers():
user_inputs = [] # a list of all user's inputs
while True:
num = raw_input("Enter a positive integer no greater than 42 ")
try:
num = int(num) # convert input string to integer
if num <= 0:
print "That is not a positive integer. Try again "
elif num > 42:
print "The number cannot exceed 42. Try again "
user_inputs.append(num)
except ValueError: # conversion to integer may fail (e.g. int('string') ?)
print 'Not a Number:', num
if some_condition_regarding(user_inputs):
break # eventually break out of infinite while loop
答案 4 :(得分:0)
这里有一些众所周知的技巧:
def min_and_max(your_num_list)
min=your_num_list[0]
max=your_num_list[0]
for num in your_num_list:
if num < min:
min=num
if max > num
max=num
return min,max
答案 5 :(得分:0)
当您编写独立的Python程序时,使用main函数是一个好习惯。它允许您轻松添加一些单元测试,使用您的功能或来自其他模块的类(如果您导入它们)等。
正如其他人已经说过的那样,每次用户输入有效数字时,创建一个列表并向其添加一个新元素是个好主意(直到数字总和超过179)。如果用户输入的值不正确,则不要向列表中添加任何内容并跳到下一次迭代(因此将要求用户再次输入数字)。
所以基本上它看起来像这样:
def validate_entered_number(num):
"""
Checks if the number is positive and is less or equal to 42.
Returns True if the number matches these conditions,
otherwise it returns False.
"""
if num < 0:
print "That is not a positive integer."
return False
if num > 42:
print "The number cannot exceed 42."
return False
return True
def main():
entered_numbers = []
while True:
try:
num = int(raw_input("Enter a positive integer less or equal to 42: "))
except ValueError:
print "You should enter a number"
continue
if validate_entered_number(num):
entered_numbers.append(num)
if sum(entered_numbers) > 179:
print "The sum of the numbers is %s" % sum(entered_numbers)
print "The smallest number entered is %s" % min(entered_numbers)
print "The largest number entered is %s" % max(entered_numbers)
return
if __name__ == "__main__":
main()
事实上,我可以想象你想要在三个变量中存储数字之和,最小数字和最大数字的情况,并在每次迭代中更新这些变量(将当前数字加到总和中并比较它是当前已知的最小和更大的数字,并在必要时更新相应的变量),但在这种情况下,您可能拥有的最长列表只有180个元素(如果所有数字都是1而用户没有输入0或者你有修改程序以拒绝输入0),这是Python中列表的非常少量的元素。但如果你不得不处理大量的数字,我建议你改用这样的解决方案。
答案 6 :(得分:0)
感谢所有回答的人。我编写了以下代码,除最后一个模块外,它几乎完美无缺。如果在第一次运行后退出程序(按0),它将退出,但是如果再次运行它,则按0将不会退出程序。它只会回到程序的开头。我不知道为什么。
注意:分配有各种要求,我必须在我的代码中加入。因此,不必要的模块,全局变量和注释。
maxNum = 42 # declares global variable maxNum
target = 179 # declares global variable target
def user_input(): # prompts user to input a number 42 or less until all add up to 179
x = 0
nums = []
while sum(nums) <= target:
nums.append(int(raw_input("Enter a number: ")))
if int(nums[x]) > int(maxNum):
print "Number cannot exceed 42."
user_input()
else:
x += 1
print_nums(nums,x)
def print_nums(nums,x): # prints the sum of the numbers, the smallest, and the largest
print "Sum of all numbers is", sum(nums)
nums.sort()
x -= 1
print "Largest number entered is", nums[x]
print "Smallest number entered is", nums[0]
decide()
def decide(): # allows user to continue the program or exit
exit = raw_input("<9 to enter a new set of number. 0 to exit.> ")
while True:
if int(exit) == 0:
return
elif int(exit) == 9:
user_input()
user_input()