2016-12-21 9 views
-1
def main_loop(): 

    print "where are you from?" 
    loc = raw_input() 

    print "so your from " + loc + "?" 
    ans = raw_input() 


def isittrue(): 
    if ans == "yes": 
    print "We all love " + loc 
    else: 
    print "Where did you say you were from again?" 


main_loop()  
isittrue() 

ユーザーに場所を入力するスクリプトを作成しようとしている場合は、場所を確認してからメッセージを表示するように要求します。そうでない場合はスクリプトを再開します。Python Basic ifステートメント

ただし、次のエラーを取得しておいてください。 NameError:名前「ANS」main.py

にライン18に定義されていない何かアドバイスは大歓迎です。

+1

' ans'は 'main_loop'のスコープでのみ利用可能です。 – Maroun

答えて

0

を返すためにreturnを使用することです:

def main_loop(): 

    print ("where are you from?") 
    loc = input() 

    print ("so your from " + loc + "?") 
    ans = input() 

    isittrue(ans,loc) 


def isittrue(ans,loc): 
    if ans == "yes": 
    print ("We all love " , loc) 
    else: 
    print ("Where did you say you were from again?") 


main_loop()  

main_loop、passi()でisittrue()を呼び出して使用するにはmain_loopまた、2つの文字列を使用することもできます。また、input()、raw_input()を使用する方が良いです ""古いです "

1

問題がの範囲です。変数名は、呼び出された関数にとってローカルです。

ansisittrue()とすると、Pythonとそのほとんどの言語では、別の関数の変数を参照しているとは思われません。これらの変数は、囲みスコープ内の変数(この場合はグローバルスコープ)にのみアクセスできます。

それを行うための最も簡単な方法は、囲みスコープが今mainloop()isittrue()のものとなりmainloopで定義された変数へのアクセス権を持っているようにisittruemainloop()内を移動することです。

def main_loop(): 

    print "where are you from?" 
    loc = raw_input() 

    print "so your from " + loc + "?" 
    ans = raw_input() 


    def isittrue(): 
     if ans == "yes": 
      print "We all love " + loc 
     else: 
      print "Where did you say you were from again?" 

    isittrue() 


main_loop() 
+0

これに同意することにしました。 – LockTheTaskBar

+0

def main_loop(): \t "どこから来ましたか?" \t loc = raw_input() \t "これからあなたの" + loc + "?「 \t ANS = raw_input() \tデフisittrue(): \t \tかのANS == "はい: \t \t他に" \t \t \t印刷 "我々はすべての愛" + LOC: \t \t \t "Whatt?" \t \t \t main_loop() \t isittrue() main_loop() – LockTheTaskBar

+0

あなたがこれで行くことを選択した場合、あなたは受け入れ答えとしてマークするだろうか? –

1

あなたans変数がmain_loop機能の上に下に追加することによって、あなたはANS変数グローバルを作ることができます

isittrue関数内のでそのacessibleないmain_loopを()、関数にローカルで、その後、ANSからacessibleになりますisittrue機能。 はしかし、グローバル変数は悪であるため、そのように世界的な使用にはお勧めできません

def main_loop(): 
    global ans, loc 
    print "where are you from?" 
    loc = raw_input() 

    print "so your from " + loc + "?" 
    ans = raw_input() 

か良い方法は、私はあなたのコードを編集し、この作品ansmain_loopから機能

def main_loop(): 
    global ans 
    print "where are you from?" 
    loc = raw_input() 

    print "so your from " + loc + "?" 
    ans = raw_input() 
    return ans, loc 

def isittrue(ans, loc): 
    if ans == "yes": 
     print "We all love " + loc 
    else: 
     print "Where did you say you were from again?" 

ans, loc = main_loop()  
isittrue(ans,loc) 
+1

グローバル変数を使用することは、ほとんどの場合、アンチパターンと見なされる警告を追加することをお勧めします。 –