2016-12-17 18 views
-1

私はPythonの小さな問題で取り組んでいました。これは問題です -Python:関数のブール戻り値の出力

intの配列が与えられている場合は、配列に6が含まれていると再帰的に計算します。指定されたインデックスから始まる配列の部分だけを考慮するという規則を使います。このようにして、再帰呼び出しではindex + 1を渡して配列を移動できます。最初の呼び出しは0のインデックスで渡されます。

array6([1, 6, 4], 0) → true 
array6([1, 4], 0) → false 
array6([6], 0) → true 

これは私が思いついた解決策です。

def array6(intList, index): 
    if len(intList) < index + 1: 
     print(False) 
    else: 
     if intList[index] == 6: 
      print(True) 
     else: 
      array6(intList, index + 1) 

スクリプトは私がreturn文として、それを呼び出すために、印刷を変更する場合を除き、正常に動作するようです:それは、コンソールで "None" を表示しない(0)、array6([1、6、4])印刷。どうしてこれなの?理想的には、真または偽を表示する必要があります - 右ですか?それとも、スクリプトに何かが欠けていますか?

+0

おそらく 'array6'を返すのを忘れました。 'return'でコードを表示できますか? – martianwars

答えて

1

実行が最も内側のelseステートメントに移動すると、returnステートメントが見つからないため、Noneとみなされます。それを解決するために

は、操作を行います。あなたはreturn機能array6(intList, index+1)に忘れてしまったよう

return array6(intList, index + 1) 
1

それはそうです。あなたのif-else-ifチェーンのすべてのブロックが何かを返すことは、再帰関数では重要です。関数が何も返さないときはいつでもNoneが得られます。 (あなたがを間違っていた場所を知っているコメントで見て)

def array6(intList, index): 
    if len(intList) < index + 1: 
     return False 
    else: 
     if intList[index] == 6: 
      return True 
     else: 
      # you forgot the return here 
      return array6(intList, index + 1) 
1

すべてのPythonの関数は何かを返す -

これは、全体のコードはどのように見えるかです。明示的に戻らない場合、戻り値はNoneです。あなたは何を返すされていませんが、近くにあった。また

def array6(intList, index): 
    if len(intList) < index + 1: 
     return False 
    else: 
     if intList[index] == 6: 
      return True 
     else: 
      return array6(intList, index + 1) 

は、あなたが削除することができ、ifは、その内部にreturnを持っているこの

def array6(intList, index): 
    if len(intList) < index + 1: 
     return False 
    if intList[index] == 6: 
     return True 
    return array6(intList, index + 1) 

好きな時間をインデントのレベルを削除することができますファンクションは既に返されているので、elseに従ってください。