2016-04-25 54 views
0

创建一个不需要参数的函数。该功能要求用户输入一系列大于或等于零的数字,一次一个。用户类型结束以指示不再有数字。该函数计算所有输入值的总和。当用户键入“结束”时添加用户输入的数字和中断的循环

我应该可以用while循环和if语句来做到这一点。

我遇到的主要问题是我不知道如何让“结束”实际上停止循环,而不是增加值。

def SumFunction(): 
"""Sum of all values entered""" 

number = 0 
while number >= 0 and number is not "end": 
    number = number + (float(input("Enter next number: "))) 
return number 

回答

0

这个程序是你想我猜:

def SumFunction(): 
    sum = 0 
    while(True): 
     x = input('Enter: ') 
     while x.lower()=='end': 
      return sum 
     while float(x) >= 0: 
      sum += float(x) 
      break 
     else: 
      print ("Wrong Number!") 

输出:

>>> SumFunction() 
Enter: 1 
Enter: 2 
Enter: -1 
Wrong Number! 
Enter: end 
3.0 
>>> 

可以使用break在循环出去吧。您也可以使用return方法退出功能。当你离开某个功能时,你也离开了循环!

当且仅当循环正常退出(即没有中断)时,循环的else块才会运行。

+0

这并不符合作业的所有要求。 –

+0

@BurhanKhalid更正。谢谢。 :) – EbraHim

+0

谢谢Ebrahim。 Python 2中的raw_input函数是什么?我正在学习如何使用python 3进行编码,所以我不太熟悉那个功能。有没有python 3替代品? – sluh

0

分手了环路成多个分立的步骤:

def SumFunction(): 
    """Sum of all values entered""" 
    number = 0 
    user_input = 1 
    while user_input >= 0: 
     user_input = input("Enter next number: ") 
     if user_input == 'end': 
      break 
     user_input = float(user_input) 
     number += max(user_input, 0) 
    return number 

这首先获取用户输入并检查它是否'end'。如果是,则程序跳出循环并返回运行总数number。如果不是,程序会将用户输入转换为数字并将其添加到number。如果数字为0或负数,程序将不会向number添加任何内容,循环将停止。最后,返回结果number

+0

感谢您的回答。如果你所做的功能本该工作或者不工作,我不会这样做,但是我得到了一些错误。我遇到了一开始就遇到的同样类型的问题。我不知道该怎么做,所以程序可以区分浮点数和“结束”的字符串值来终止。布尔汉用他的想法走在了正确的轨道上,但我仍然陷入困境。 – sluh

+0

@sluh - 对不起,请参阅编辑。 – TigerhawkT3

0

想想你的循环检查:

“做到这一点,而数大于或等于0,这是不是“end'`

哪个值。满足这两个条件。如果我进入'end'那么它满足这两个条件;。因为如果这两个条件都满足你的循环只会打破

所以,你真的想or不是and

一旦你解决这个问题,你会碰到一个问题:

>>> def sum_function(): 
...  number = 0 
...  while number >= 0 or number is not 'end': 
...   number = number + float(input('Enter a number: ')) 
...  return number 
... 
>>> sum_function() 
Enter a number: 1 
Enter a number: 3 
Enter a number: end 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 4, in sum_function 
ValueError: could not convert string to float: end 

这里的问题是,你的一切转化到它进入后立即浮动;所以只要有人输入'end',程序就会崩溃,因为它不能将'end'转换为浮点数。

试图解决一个自己:-)

0

你可以使用一个尝试捕捉,如果有Value Error当你正在寻找一些他们可能输入端,非越少,你可以做apropriate检查在除了块之外。

相关问题