2016-08-30 43 views
-1
numbers=[] 
while True: 
    print('Input Number '+str(len(numbers)+1)+' (or nothing to close):') 
    number=input() 
    numbers=numbers+[number] 
    if number=='': 
     print('What do you want to do?') 
     answer=input() 
     break 
     if answer==mean: 
      mean 
def mean(): 
    end_mean=reduce(lambda x, y: x + y, numbers)/len(numbers) 
    print(end_mean) 

我想在python中制作一个计算器类型程序,它允许您输入数字列表,然后选择您使用它们执行的操作。上面的脚本只是一个开始,但是当我输入数字并输入'mean'时,它会询问我要做什么,它会结束脚本并不显示任何内容。我是python的新手,所以请在答案中原谅。Python中的计算器类型程序错误

import functools 
numbers=[] 

def means(): 
    end_mean = functools.reduce(lambda x, y: x + y, numbers)/len(numbers) 
    print(end_mean) 

def sum(): 
    end_sum = functools.reduce(lambda x, y: x + y, numbers) 
    print(end_sum) 

def whatDo(): 
     print('Input Extra Numbers '+str(len(numbers)+1)+' (or nothing to close):') 
     try: 
      number= int(input()) 
      numbers.append(number) 
     except: 
      print('What do you want to do?') 
      answer = input() 
      if answer == "mean": 
       means() 

while True: 
    print('Input Number '+str(len(numbers)+1)+' (or nothing to close):') 
    try: 
     number= int(input()) 
     numbers.append(number) 
    except: 
     print('What do you want to do?') 
     answer = input() 
     if answer == "mean": 
      means() 
      print('Do you want anything else?') 
      reply=input() 
      if reply=='no': 
       break 
      elif reply--'yes': 
       whatDo() 
     else: 
      break 

但是我得到这个:

Traceback (most recent call last): 
    File "E:/Python/calculator.py", line 26, in <module> 
    number= int(input()) 
ValueError: invalid literal for int() with base 10: '' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "E:/Python/calculator.py", line 37, in <module> 
    elif reply--'yes': 
TypeError: bad operand type for unary -: 'str' 

后的“你 -

编辑3

使用回答下面我有固定的脚本与此有关结束后想要别的东西“,我输入'是'。

+3

你的'break'在'if'检查前是否应答=='意思是':'(我加了引号)和'mean'应该是'mean()'来调用一个函数 – depperm

+0

什么是python版本您正在使用? python2或python3? –

+0

python 3 @AhsanulHaque –

回答

1

可能这会帮助你。

numbers=[] 

def means(): 
    end_mean = reduce(lambda x, y: x + y, numbers)/len(numbers) 
    print(end_mean) 

while True: 
    print('Input Number '+str(len(numbers)+1)+' (or nothing to close):') 
    try: 
     number= int(input()) 
     numbers.append(number) 
    except: 
     print('What do you want to do?') 
     answer = input() 
     if answer == "mean": 
      means() 
     else: 
      break 

我从你的代码中改变了什么?

  • 添加了try-except块。这是添加的,以便它可以处理您通过''作为输入时的情况。
  • 投影输入到int之前传递给号码,因为您需要int值来计算平均值,而不是string值。
  • 您正在输入一个列表,然后添加到之前的列表中,这是不必要和低效的。我将其替换为numbers.append(number)
  • 删除了不必要的break语句。 break用于摆脱循环。当你使用break时,你永远不会看到后面执行的语句。
1

首先,你打破之前,你去检查。你的支票本身也将失败:

if answer==mean: 
    mean 

你已经比较了答案(一个字符串)和mean(一个函数对象)。尝试:

if answer == "mean": 
    mean() 

另外,我希望你要输入数字从转换为INT

if number=='': 
    .... 
else: 
    numbers=numbers+[int(number)] 
+0

无论如何,这部分将永远不会执行,因为OP无条件地提前返回。 –

+0

正确;我错误地从原帖中删除了这个。现在修复。 – Prune