2017-03-12 1 views
0

takeUnit1関数では、私はconvFROMconv変数をTOtbsp関数でアクセス可能にしようとしています。私はそれを実行しようとすると私が取得:グローバルとして宣言された変数は別の関数で呼び出すことができません

Traceback (most recent call last): 
    File "hb.py", line 124, in <module> 
     takeUnit() 
    File "hb.py", line 28, in takeUnit1 
     takeUnit2() 
    File "hb.py", line 82, in takeUnit2 
     TOtbsp() 
NameError: name 'convFROMconv' is not defined 

私はこのようなconvFROMconvの各例宣言前にグローバル宣言を追加しようとしました:

if convFROM == '1': 
     global convFROMconv 
     convFROMconv = 'Tablespoons' 

    elif convFROM == '2': 
     global convFROMconv 
     convFROMconv = 'Teaspoons' 

    elif convFROM == '3': 
     global convFROMconv 
     convFROMconv = 'Cups' 

    elif convFROM == '4': 
     global convFROMconv 
     convFROMconv = 'Quarts' 

私はいくつかがあるかどうかわかりません私がしようとしているものに関連する小さなルールのようなものです。それも可能ですか?

import os 

tbsp = {'cup' : 0.0625 , 'tsp' : 3 , 'quart' : 0.015625 , 'floz' : 0.5 , 'pint' : 0.03125 , 'gal' : 0.00390625 , 'ml' : 14.7868 , 'liter' : 0.0147868} 
tsp = {'cup' : 0.0208333 , 'tbsp' : 0.333333 , 'quart' : 0.0052083333 , 'floz' : 0.1666666667 , 'pint' : 0.0104166667, 'gal' : 0.0013020833 , 'ml' : 4.92892 , 'liter' : 0.00492892} 
cup = {'tbsp' : 16 , 'tsp' : 48 , 'quart' : 0.25 , 'floz' : 8.32674 , 'pint' : 0.5 , 'gal' : 0.0625 , 'ml' : 236.588 , 'liter' : 0.236588} 
quart = {'cup' : 4 , 'tsp' : 192 , 'tbsp' : 64 , 'floz' : 32 , 'pint' : 2 , 'gal' : 0.25 , 'ml' : 946.353 , 'liter' : 0.946353} 
floz = {'cup' : 0.125 , 'tsp' : 6 , 'quart' : 0.03125 , 'tbsp' : 2 , 'pint' : 0.0625 , 'gal' : 0.0078125 , 'ml' : 29.5735 , 'liter' : 0.0295735} 
pint = {'cup' : 2 , 'tsp' : 96 , 'quart' : 0.5 , 'floz' : 16 , 'tbsp' : 32 , 'gal' : 0.125 , 'ml' : 473.176 , 'liter' : 0.473176} 
gal = {'cup' : 16 , 'tsp' : 768 , 'quart' : 4 , 'floz' : 128 , 'pint' : 8 , 'tbsp' : 256 , 'ml' : 3785.41 , 'liter' : 3.78541} 
ml = {'cup' : 0.0042267571 , 'tsp' : 0.202884 , 'quart' : 0.00105669 , 'floz' : 0.033814 , 'pint' : 0.00211338 , 'gal' : 0.000264172 , 'tbsp' : 0.067628 , 'liter' : 0.001} 
liter = {'cup' : 4.226757063 , 'tsp' : 202.884 , 'quart' : 1.05669 , 'floz' : 33.814 , 'pint' : 2.11338 , 'gal' : 0.264172 , 'ml' : 1000 , 'tbsp' : 67.628} 
acceptableInputs = ['1', '2', '3', '4', '5', '6', '7', '8'] 

def takeUnit1(): 
    print ('Unit Converter') 
    print ('Select the unit you want to convert FROM') 
    print ('1 Tbsp - Tablespoon') 
    print ('2 Tsp - Teaspoon') 
    print ('3 C - Cups') 
    print ('4 qt. - Quart') 
    print ('5 fl. oz. - Fluid Ounce') 
    print ('6 gal. - Gallon') 
    print ('7 ml - Milliliter') 
    print ('8 L - Liter') 
    convFROM = input('Unit: ') 

    if convFROM in acceptableInputs: 
     takeUnit2() 
     global convFROMconv 
     if convFROM == '1': 
      convFROMconv = 'Tablespoons' 

     elif convFROM == '2': 
      convFROMconv = 'Teaspoons' 

     elif convFROM == '3': 
      convFROMconv = 'Cups' 

     elif convFROM == '4': 
      convFROMconv = 'Quarts' 

     elif convFROM == '5': 
      convFROMconv = 'Fluid Ounces' 

     elif convFROM == '6': 
      convFROMconv = 'Gallons' 

     elif convFROM == '7': 
      convFROMconv = 'Milliliters' 

     elif convFROM == '8': 
      convFROMconv = 'Liters' 

     else: 
      print ('') 

    else: 
     print('That is not an acceptable input, please try again') 


def takeUnit2(): 
    os.system('cls') 
    print ('Select the unit you want to convert TO') 
    print ('1 Tbsp - Tablespoon') 
    print ('2 Tsp - Teaspoon') 
    print ('3 C - Cups') 
    print ('4 qt. - Quart') 
    print ('5 fl. oz. - Fluid Ounce') 
    print ('6 gal. - Gallon') 
    print ('7 ml - Milliliter') 
    print ('8 L - Liter') 
    convTO = input('Unit: ') 

    if convTO in acceptableInputs: 
     print('yay') 

     global convTOname #Making convTOconv global 
     global TOfunc1 
     if convTO == '1': #This whole statement converts the input number to its corresponding name 
      convTOname = 'Tablespoons' 
      TOfunc1 = 'TOtbsp' 
      TOtbsp() 

     elif convTO == '2': 
      convTOname = 'Teaspoons' 
      TOfunc1 = 'TOtsp' 

     elif convTO == '3': 
      convTOname = 'Cups' 
      TOfunc1 = 'TOcups' 

     elif convTO == '4': 
      convTOname = 'Quarts' 
      TOfunc1 = 'TOquarts' 

     elif convTO == '5': 
      convTOname = 'Fluid Ounces' 
      TOfunc1 = 'TOfloz' 

     elif convTO == '6': 
      convTOname = 'Gallons' 
      TOfunc1 = 'TOgal' 

     elif convTO == '7': 
      convTOname = 'Milliliters' 
      TOfunc1 = 'TOml' 

     elif convTO == '8': 
      convTOname = 'Liters' 
      TOfunc1 = 'TOliters' 


     else: 
      print ('') 

    else: 
     print('That is not an acceptable input, please try again') 






takeUnit1() 

def TOtbsp(): 
    os.system('cls') 
    print ('Convert tablespoons to: ' + convFROMconv) 
    print ('YAY') 

ありがとうございます!

+1

あなたのプログラムが見つけることができないのは、 'convFROMconv'ではなく、' TOtbsp'関数です。 – Liteye

+0

'takeUnit1()' _afterを 'def TOtbsp():'に移動します。 –

+0

私の悪いです。私はCMDからコピーできないので、自分でエラーをタイプしました。これでTOtbspからconvFROMconv –

答えて

0

変数に問題はありません。 エラーTOtbspのためにエラーが発生しました。

Pythonはスクリプト言語です。 したがって、使用する前に関数を定義する必要があります。

ソースコードの先頭にTOtbspを移動します。

+0

に修正されました。私はCMDからコピーできないので、自分でエラーをタイプしました。これで、TOtbspからconvFROMconvに修正されました。 –

+0

'TakeUnit2'から呼び出された' TOtbsp'に 'convFromconv'を使っているようです。 しかし 'TakeUnit2'は' convFromconv'が宣言される前に呼び出されます。 – bismute

+0

修正しました、ありがとうございます! –

関連する問題