2017-03-12 39 views
-1

せずに、私は次の関数を作ったが、それは私がエラーなしにもかかわらず、主な機能を使用する場合はDEFメインとデフメイン()= O、()= X

def setup_name(): 
    print("Before we start...","\n" 
      "What is your name?") 
    char_name = input("Name : ").strip().capitalize() 
    return char_name 

def intro(): 
    print(cname," is building great walls now") 
    print() 

cname = setup_name() 
intro() 

主な機能の使用せずに、エラーを生成しますが、以下の私を与えますエラー

def setup_name(): 
    print("Before we start...","\n" 
      "What is your name?") 
    char_name = input("Name : ").strip().capitalize() 
    return char_name 

def intro(): 
    print(cname," is building great walls now") 
    print() 

def main(): 
    cname = setup_name() 
    intro() 
main() 

私には、ここには違いがないようですので、鋭い目が必要だと思います。

ありがとうございます!

+0

エラーメッセージを見ると役立ちます。 – interjay

+0

'cname'は2番目の例の' main'関数に対してローカルなので、introはそれにアクセスできません。最初の例ではグローバルでした。だから、あなたは、グローバル変数が悪いことができ、避ける必要があります参照してください! –

+2

サイドノートでは、あなたのタイトルはそれほど役に立ちません。 –

答えて

2

cnameがもはやモジュールレベルでスコープされ番目のバージョンでは(現在のスコープは今main機能されていない)ので、introcnameを使用しようとしたとき、あなたはNameErrorを取得します。

cnameintroに明示的に渡して、2番目のバージョンで動作させる必要があります。

Short Description of the Scoping Rules?を参照してください。

+0

woah!ハイパーリンクされたリソースは、私がまだ扱っていないものです!リソースとコメントありがとう!それは本当に私を助けた! –

関連する問題