2016-12-08 50 views
0

私は別のプログラムから関数をインポートする簡単なプログラムを書いています。基本的に華氏を摂氏に変換します。逆もまた同様です。ここでは、メインプログラムのコードは次のとおりです。私はそれを行うに行くとき、それは温度を取るよインポートされた変数が定義されていません

def fahrenheit(): 
    fahrenheit = temp * 1.8 + 32 
def celsius(): 
    celcius = temp - 32 
    celsius = celcius/1.8 

temp = int(input('What is the temperature? ')) 
print('Is this temperature in fahrenheit or celsius?') 
system = int(input('Please put 1 for Fahrenheit and 2 for Celsius: ')) 
if system == 1: 
    from tempconvert import celsius 
elif system == 2: 
    from tempconvert import fahrenheit 
else: 
    print('I dont understand.') 

そして、ここでは、プログラムのコードは、インポートされる機能から来ているのですそれは華氏と摂氏の区別を受け入れます。しかし、それは、インポートされた関数のtempが定義されていないと言うでしょう。しかし、私はそれがメインプログラムによって定義されると思った。だから、これを修正する方法に関する提案は私が立ち往生しているので歓迎です。

答えて

0

うん、関数内で定義された名前は、彼らがで定義されているモジュールのグローバルに見ていきます、ないそれらがインポートされるモジュール。
すべての関数オブジェクトは__globals__という名前隠さ属性を持っていますで利用可能な名前を保持している辞書への参照を保持し、モジュールを定義します。

適切な引数tempを使用して関数を定義し、呼び出すときにその関数を渡す必要があります。

def fahrenheit(temp): 
    fahrenheit = temp * 1.8 + 32 

def celsius(temp): 
    celcius = temp - 32 
    celsius = celcius/1.8 

これはまた、あなたの関数がで取っていることを確認したくなるでしょうtempは、関数のローカル名として、

+0

ああ、私はそれを認識していないとは思わない。ありがとう! –

1

まず:-)少し速くロードされている素敵な副作用を持っていますパラメータ、この場合はtemp。また、関数がメインコードブロックの値を返すようにすることもできます。

def fahrenheit(temp): 
    fahrenheitTemp = temp * 1.8 + 32 
    return fahrenheitTemp 

def celsius(temp): 
    celciusTemp = temp - 32 
    celciusTemp = celciusTemp/1.8 
    return celciusTemp 

次に、メインコードブロックを変更する必要があります。現在、他のモジュールから関数を正しくインポートしていますが、使用していません。あなたの関数を使用するには、あなたが最後に()と他のモジュールにdefキーワードの後に​​指定し、そしてあなたが()

内の指定されたすべてのパラメータを置くことは、現在の温度に取り、あなたにそれを渡してみましょ名を使用します変換された温度を戻して印刷する。ここに行く:

temp = int(input('What is the temperature? ')) 
print('Is this temperature in fahrenheit or celsius?') 
system = int(input('Please put 1 for Fahrenheit and 2 for Celsius: ')) 

if system == 1: 
    from tempconvert import celsius 
    print(celsius(temp))  

elif system == 2: 
    from tempconvert import fahrenheit 
    print(fahrenheit(temp)) 

else: 
    print('If at first you don't succeed... try try again!') 
関連する問題