0
def inputKilos():

    while True:
        numKilos = float(raw_input("Enter a number of Kilometers.  Enter 0 to end program. "))

        if numKilos == 0:
            break 
        else: 
            convert_kilos(numKilos)

    return

def convert_kilos(numKilos):
    numMiles = numKilos * 0.6214
    print_output()
    return

def print_output():
    print numKilos, "kilometers eqauls", numMiles, "miles."

def main():
    inputKilos()

main()

プログラムを実行しようとすると、" NameError: グローバル名 'numKilos' が定義されていません" と表示され、なぜ numKilos が定義されていないと表示されるのかわかりません。numKilos は、ユーザーが入力した数値と同じです。

4

3 に答える 3

3

numKilosはとの両方のローカル変数ですが、ではinputKilosありconvert_kilosませんprint_output。ローカル変数には、その関数内からのみアクセスできます。

変数を渡すには、を使用return <value>して関数から値を返し、を使用して値を収集するか、関数にresult = function()値を渡すことで逆を実行します(。で行ったように)convert_kilos

于 2012-09-23T01:45:39.227 に答える
0

Those are local variables not global.

You can try this:

#!/usr/bin/python

def inputKilos():
    while True:
        numKilos = float(raw_input("Enter a number of Kilometers.  Enter 0 to end program. "))
        if numKilos == 0:
            break 
        else: 
            miles = convert_kilos(numKilos)
            print_output(numKilos,miles)
    return

def convert_kilos(numKilos):
    numMiles = numKilos * 0.6214
    return numMiles

def print_output(numKilos,numMiles):
    print numKilos, "kilometers eqauls", numMiles, "miles."


inputKilos()

Or using global keyword:

#!/usr/bin/python

numKilos=0
numMiles=0

def inputKilos():
    while True:
        global numKilos
        numKilos = float(raw_input("Enter a number of Kilometers.  Enter 0 to end program. "))
        if numKilos == 0:
            break 
        else: 
            convert_kilos(numKilos)
            print_output

def convert_kilos(numKilos):
    global numKilos
    global numMiles
    numMiles = numKilos * 0.6214    

def print_output:
    global numKilos
    global numMiles
    print numKilos, "kilometers eqauls", numMiles, "miles."


inputKilos()
于 2012-09-23T02:24:49.903 に答える
0

リファクタリングされたバージョンは次のとおりです。

MILES_PER_KM = 0.621371

def get_float(prompt=''):
    while True:
        try:
            return float(raw_input(prompt))
        except ValueError:
            pass

def main():
    while True:
        kms = get_float('Enter a distance in kms (or 0 to exit): ')
        if kms:
            miles = MILES_PER_KM * kms
            print '  {} kilometers is {} miles.'.format(kms, miles)
        else:
            break

if __name__=='__main__':
    main()
于 2012-09-23T03:09:27.280 に答える