2017-04-30 14 views
1

と呼びます。mainLogin()関数を変数に格納しようとすると、次のように表示されます。Python内の変数に格納されている関数を、mh

私はそこに道があると知っていますが、それを理解できないようです。

validUser = {} 
answer = "" 

answer = mainLogin() 

def mainLogin(): 
    while True: 
     print("Are you currently a registered user [y/n]: ") 
     answer = input().lower() 
     if answer in "y n".split(): 
      return answer 
     else: 
      print("Error: please enter [y/n].") 

def Login(answer): 
    if answer == "y": 
     while True: 
      askUsername = input("ENTER USERNAME: ") 
      askPassword = input("ENTER PASSWORD: ") 
      if len(askUsername) > 0 and askUsername.isalpha(): 
       if askUsername in validUser and valid[askUsername] == askPassword: 
        print("\nLogin Success!\n") 
        break 
       else: 
        print("Error: Incorrect username or password!") 
      else: 
       print("Error: Don't be silly!") 
    elif answer == "n": 
     while True: 
      createUsername = input("ENTER NEW USERNAME: ") 
      if len(createUsername) > 0 and createUsername.isalpha(): 
       if createrUsername in validUser: 
        print("Meesage: username already exists.") 
       else: 
        createPassword = input("ENTER NEW PASSWORD: ") 
        if len(createPassword) > 0 and createPasssword.isalpha(): 
         validUser[createUsername] == createPassword 
         print("\nUSER CREATED\n") 
        else: 
         print("Error: Please choose a different password.") 
      else: 
       print("Error: Don't be silly!") 
    else: 
     print("Error: You have not entered [y/n]") 
+0

関数オブジェクトを定義するポイントを*以下*に移動します。 Pythonは文を行ごとに実行します。 –

+0

'mainLogin()'が呼び出された時点で 'mainLogin()'を 'def'していません。関数定義の後に移動します。 – AChampion

+0

'php'では、宣言する前に関数を割り当てることができます。これは' python'では動作せず、関数の下に 'answer = mainLogin()'を移動します。 –

答えて

1

answer = mainLogin()とファイルの末尾を入れます。

以下の関数はまだpythonによって登録されていません。 Pythonはあなたのスクリプト/モジュールを1行ずつ考えます。モジュールのルートにコードがあると、モジュールが実行されます。私たちはどんな仕事をやって起動する前に

def main(): 
    answer = mainLogin() 

def mainLogin(): 
    # code 

if __name__ = "__main__": 
    main() 

ここでのpythonは、上から下にファイル全体を検査します:あなたはまた、次の操作を行うことができ、この問題を解決するために

これが問題を解決するための標準的な方法です。

__name__は、モジュールの名前です。 pythonコマンドでモジュールを特に起動すると、名前は__main__になります。 python script.py。モジュールを別のスクリプトからインポートすると、__name__にモジュールの実際の名前が含まれるため、main()は呼び出されません。

0

定義されていない関数を変数に代入することはできません。まず、関数を定義してから変数に代入します。このように:

def mainLogin(): 
    while True: 
     print("Are you currently a registered user [y/n]: ") 
     answer = input().lower() 
     if answer in "y n".split(): 
      return answer 
     else: 
      print("Error: please enter [y/n].") 

answer = mainLogin() 
関連する問題