2016-09-06 3 views
1

私はちょうどPythonの関数の周りに頭を抱えています(Pythonは6ヶ月間しか学習していません)、私は動作していないコードに固執しています。それは合計が定義されていないと言う、nameerror。いくつかの記事を読んで、私は変数に合計を格納する必要があると思うが、私はどこにいるのか分からない。 return文でこれを行うことはできますか?それをグローバルにするために合計を定義する場所は不明です。結果を変数に取り込む

これはいくつかのタスクを持つプログラムです。私はまた、csvファイルにテーブルを格納することに苦労しています。ここにコードがあります。ライン83上

import csv 

def set_values(): 
    ans1 = float(input('Please enter the first number: ')) 

    ans2 = float(input('Please enter the second number: ')) 

    ans3 = float(input('Please enter the third number: ')) 

    levels = int(input('Please set the amount of levels between 5 and 10: ')) 


    return (ans1, ans2, ans3, levels) 


def display_model_values(ans1, ans2, ans3, levels): 
    print('The outcome for model 1 is ',ans1) 
    print('The outcome for model 2 is ',ans2) 
    print('The outcome for model 3 is ',ans3) 
    print('The number of levels are ',levels) 


def run_model(ans1, ans2, ans3, levels): 
    total = ans1+ans2+ans3 
    print ("\t","Level","\t","Answer 1","\t","Answer 2","\t","Answer 3","\t","Total") 
    for i in range (0,levels+1): 
     print("\t",i,"\t\t",ans1,"\t\t",ans2,"\t\t",ans3,"\t\t",total) 
     result1 =ans2*ans3 
     result2 = ans2/ans1 
     total = ans1+result1+result2 
    return (i,result1, result2, total) 


def export_data(ans1,ans2,ans3,total): 
    table = [ans1, ans2, ans3,total] 

    nameoffile = input('what would you like to call the filename') 
    nameoffile = open(nameoffile+".csv","w") 
    csv_file_ref = csv.writer(nameoffile) 
    csv_file_ref.writerow(table) 
    nameoffile.close() 

## with open(nameoffile+'.csv', 'w') as csvfile: 
##  writer = csv.writer(csvfile) 
##  writer.writerow(r) for r in table] 




choice = '' 
count = 0 
while choice != 'q': 
    print('Main Menu') 
    print ('1)Set Model Values') 
    print ('2)Display Model Values') 
    print ('3)Run Model') 
    print ('4)Export Data') 
    print ('Q)Quit') 
    choice = input('Please Enter Choice') 


    if choice =='1': 
     ans1, ans2, ans3, levels = set_values() 
     count = count +1 

    elif choice == '2': 
     if count < 1: 
      print ('you need to choose option 1 first') 
     else: 
      display_model_values(ans1,ans2,ans3,levels) 


    elif choice =='3': 
     if count < 1: 
      print('you need to choose option 1 first') 
     else: 
      run_model(ans1,ans2,ans3,levels) 

    elif choice =='4': 
     if count < 1: 
      print ('you need to choose option 1 first') 
     else: 
      export_data(ans1,ans2,ans3,total) 

    elif choice == 'Q': 
      break 
    else: 
     print('not an option') 
+1

'NameError'例外のトレースバックを投稿してください。 – FamousJameous

答えて

1

合計は、run_model内でのみ定義されています。その関数が返ってくると、totalを参照することはできません。その理由は、out of scopeです。変数は "unbound"になりました。これはPythonがあなたにtotalという名前が定義されていないと言っていることを伝えています。それは一度どこかに定義されましたが、それはずっと消え去っています。あなたのコードに

簡単な変更は、ここのように、エクスポート機能の本体内に、合計は再計算させることである。

def export_data(ans1,ans2,ans3): 
    total = ans1 + ans2 + ans3 # total is available inside of export_data 
    table = [ans1, ans2, ans3,total] 

    nameoffile = input('what would you like to call the filename') 
    nameoffile = open(nameoffile+".csv","w") 
    csv_file_ref = csv.writer(nameoffile) 
    csv_file_ref.writerow(table) 
    nameoffile.close() 

これらは、あなたのコードの作業を行う必要があります。

+0

ありがとうございますが、エラーは85のエリフの選択肢にあります。== 4 –

+0

まだ動作していません、ごめんなさい。私は上記を追加しました。私はそれを返すように合計がどのように束縛されているか分かりません。たぶん私は実際に何を返すのか分からないのでしょうか? –

+0

@LisaG申し訳ありませんが、上記の関数シグネチャには小さな間違いがありました。 'export_data(ans1、ans2、ans3、total)'の代わりに 'export_data(ans1、ans2、ans3)'を読み込んでいなければなりません。コードが編集されました – dangom

1

、あなたのwhileループ内で定義されていない関数export_data(ANS1、ANS2、ANS3、合計)に変数totalを送っています。あなたの合計が値を送信する前にans1+ans2+ans3であると仮定すると、 は、問題を解決する必要がありますライン、

total = ans1+ans2+ans3 

を追加します。

+0

こんにちはJamesさん、ありがとう。エラーが –

+0

トレースバック(最新の呼び出しの最後)であった: ファイル "E:\のtest.py" export_data(ANS1、ANS2、ANS3、合計)で、ライン87、 NameError:名 '合計' の –

+0

に定義されていません@LisaG、ありがとう!あなたは私の答えをupvoteして答えを受け入れることができますか? –

0

DEF export_data(ANS1、ANS2、ANS3): 合計= ANS1 + ANS2 + ANS3#総export_data テーブル= [ANS1、ANS2、ANS3、総]

nameoffile = input('what would you like to call the filename') 
nameoffile = open(nameoffile+".csv","w") 
csv_file_ref = csv.writer(nameoffile) 
csv_file_ref.writerow(table) 
nameoffile.close() 

の内側に提供されて輸出し、合計でエラーはありません

関連する問題