2016-10-10 13 views
0

私はleetcodeで作業していますが、実際にはローカルにファイルを書き込んだことはありません。Pythonの基本的な使い方、関数の呼び出し

class Solution(object): 
    def singleNumber(self, nums): 

     for i in range(0,len(nums),2): 
      if (i != len(nums) - 1) and (nums[i] != nums[i+1]): 
       print (nums[i]) 
      elif i == len(nums) - 1: 
       print (nums[i]) 

    def main(): 
     nums=[1,1,2,2,3] 
     s=Solution() 
     s.singleNumber(nums) 
     print('done') 

私はこのスクリプトを実行していますが、出力が見えず、間違っていることを理解していません。

+0

ローカルのPythonプログラムでは、メインコードは常にクラスの外側*で実行されます。だからインデントのないすべての関数とクラスの外で "def main()"の内部でコードを動かす必要があります。その後、あなたが思っている主な方法ではないので、 "def main()"を削除してください。 –

+0

なぜ 'main'を' Solution'の方法にしましたか? –

答えて

2
クラスの外であなたの メイン機能を移動し、それを特異的に実行

class Solution(object): 
    def singleNumber(self, nums): 

     for i in range(0,len(nums),2): 
      if (i != len(nums) - 1) and (nums[i] != nums[i+1]): 
       print (nums[i]) 
      elif i == len(nums) - 1: 
       print (nums[i]) 

def main(): 
    nums=[1,1,2,2,3] 
    s=Solution() 
    s.singleNumber(nums) 
    print('done') 

main() 

出力:ドロップ:

3 
done 

別の可能性は全く別の関数にすることですdefメイン行、そのコードの4行をインデント解除し、トップレベルから実行します。

+0

私は 'def main'を落とすことが客観的に優れているのか分かりません。 –

+0

あなたは正しいです。それは議論の余地がある。文言が変更されました。 – Prune

2

Javaのような他の多くのプログラミング言語とは異なり、Pythonではmainメソッドがクラス内にある必要はありません。さらに、Python mainメソッドを定義する必要はありません:ファイル全体をアプリケーションとして実行します。オリジナルの投稿では、Pythonは次のアクションを実行します:

  • これは、コードが保持するコードとしてsingleNumberを定義します。
  • メソッドmainをコードとして定義します。
  • クラスSolutionにこの2つのメソッドを保存します。
  • 実行する行がもうないため、アプリケーションを終了します。

アプリケーションが正しいようにするには、次のようにあなたはそれを書く必要があります。

class Solution(object): 
    def singleNumber(self, nums): 
     for i in range(0,len(nums),2): 
      if (i != len(nums) - 1) and (nums[i] != nums[i+1]): 
       print (nums[i]) 
      elif i == len(nums) - 1: 
       print (nums[i]) 

if __name__=='__main__': 
    nums=[1,1,2,2,3] 
    s=Solution() 
    s.singleNumber(nums) 
    print('done') 

あなたはなぜラインif __name__=='__main__':を不思議に思うかもしれません。すべてのファイルに変数__name__が暗黙的に定義されており、ファイルを直接実行しているか、インポートしているかによって値が異なります。最初のケースでは、割り当て__name__='__main__'が実行され、2番目のケースでは__name__変数にファイル自体の名前が割り当てられます。これは、このファイルが主であるかどうかをあなたに知らせるものです。

Solutionクラスを破棄し、singleNumberメソッドをモジュールメソッドに昇格させることもできます。

関連する問題