2017-03-27 3 views
-4

私は計算を構築し、それが動作します:なぜ関数は `None`を返すのですか?

num = input("How many numbers would you like to add? ") 

list = [] 
for x in range(num): 
    list.append(input('Number: ')) 

a = 0 
for x in list: 

    a=a+x 
    print a 

しかし、私は単純に動作しない、これの上の機能を作るしようとします。私を指示していただけますか?明示的なreturn Sまたは空return Sなし

list = [] 

def adding(): 
    num = input("How many numbers would you like to add? ") 

    for x in range(num): 

     list.append(input('Number: ')) 

     a = 0 
     for x in list: 
      a=a+x 

print adding() 
+1

1)あなたは機能2から 'return'を使用する必要があります)あなたが同じの機能をオーバーライドするため、' list'リストを呼び出すしないでください名前 – dawg

+0

関数が何かを返すようにするには、return文が必要です。 –

+0

「うまくいきません」というのはあまり役に立ちません。何がうまくいかない?どのように機能しないのですか? – Li357

答えて

4

機能Noneを返します。

>>> def foo(): 
...  print("Hello") 
... 
>>> f = foo() 
Hello 
>>> f is None 
True 

あなたはこの、いくつかの値を返すために、あなたの関数の最後にreturnを使用したくない場合。


その他のヒント。

現在、あなたの関数は、入力を取得してリストを作成して、を合計するすべてのもの:

だけ一つのことを行うあなたの機能を確認します。これはたくさんあります。関数を小さくすると、いくつかのメリットが得られます。 Pythonのビルトインをシャドウしないでください

num_elements = prompt_for_number_of_inputs() 
my_list = prompt_for_elements(num_elements) 
print("The sum of all the elements is {0}".format(sum_elements_in_list(my_list)) 

を::

あなたは、変数と同じことを呼び出す場合

def prompt_for_number_of_inputs(): 
    return int(input("How many elements are there in the list? ") 

def prompt_for_elements(num_elements): 
    return [int(input("Enter a number: ")) for _ in range(num_elements)] 

def sum_elements_in_list(li): 
    return sum(li) 

ので、あなたはこのようにそれを使用する可能性があります:あなたはこのような何か考えるかもしれませんPythonの組み込み関数として、あなたは困っているでしょう。 (上記見られるように)通常

>>> a = list() 
>>> a 
[] 
>>> list = [1,2,3] 
>>> a = list() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'list' object is not callable 

list()は空のリストを作成しますが、あなたが名前listにオブジェクトをバインドしましたので、これは不可能です:ここを参照してください。 hereをシャドーイングできる他の組み込み関数を見てください。

0

リストの変数名を変更して、ビルトイン名をシャドーしてreturn文を追加しました。あなたが意図したとおりに動作します。

sumlist = [] 

def adding(): 
    num = input("How many numbers would you like to add? ") 

    for x in range(int(num)): 

     sumlist.append(int(input('Number: '))) 

     a = 0 
     for x in sumlist: 
      a=a+x 

    return a 

print(adding()) 
+0

関数内に 'sumlist'を置く必要があります。それ以外の場合は、ここでは完全に予防可能なグローバル変数で遊んでいます。 – erip

2

あなたは何を返していません。
インデントが正しくありません。
変数名としてpython組み込み関数を使用しないでください(list)。
(注:_は、多くの場合、使い捨ての変数として使用されている)

def adding(): 
    num = int(raw_input("How many numbers would you like to add? ")) 
    lst = [] 

    for _ in range(num): 
     lst.append(int(raw_input('Number: '))) 

    a = 0 
    for x in lst: 
     a += x 
    return a 

return sum(lst)が同じことをするだろうとして、あなたは本当に第二のループを必要としません。
また、あなたがすべてでlstを必要としない:

def adding(): 
    num = int(raw_input("How many numbers would you like to add? ")) 

    a = 0 
    for _ in range(num): 
     x = int(raw_input('Number: ')) 
     a += x 
    return a 
関連する問題