2016-08-30 42 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