2017-10-02 4 views
1
def getInt(): 
    while True: 
     width = int(input("Enter width (1 - 60):")) 
     if width > 1 and width < 60: 
      break 
     else: 
      print("Please enter a valid input") 
    while True: 
     height = int(input("Enter width (1 - 20):")) 
     if height > 1 and height < 20: 
      break 
     else: 
      print("Please enter a valid input") 
    return width, height 


def calcPerimeter(width, height): 
    perimeter = (2 * (width + height)) 
    return perimeter 

def calcArea(width, height): 
    area = width * height 
    return area 


def main(): 
print('Results: {}'.format(getInt())) 
print('The perimeter is {}' .format(calcPerimeter(width, height))) 
print('The area is {}' .format(calcArea(width, height))) 


main() 

私は実行し、それは言う:ある関数から別の関数に変数を取得するにはどうすればよいですか?

Traceback (most recent call last):

main()

print('The perimeter is {}' .format(calcPerimeter(width, height)))

NameError: name 'width' is not defined

+0

あなたは '可変スコープ'を知っていますか? 'main'メソッドで' width'が見えると思いますか? –

+0

'getInt()'は幅と高さを返しますが、 'getInt()'を呼び出すと、戻り値はどこにも保存されません。これを試してください: 'width、height = getInt()' –

+0

私はgetIntの値を表示する場合は、私は値としてそれらを取得し、私はちょうど他の機能にそれらを取得することはできません。 –

答えて

2

多分あなたは、あなたが渡す前に、特定の変数へのgetInt()を返す必要がこの

def main(): 
    width, height = getInt() 
    print('Results: {}, {}'.format(width, height)) 
    print('The perimeter is {}' .format(calcPerimeter(width, height))) 
    print('The area is {}' .format(calcArea(width, height))) 

にあなたのmain()を変更してみてください

他の方法ではgetInt()関数内でcalculatePerimeterとcalculateAreaを呼び出していますが、ここには例があります

def getInt(): 
    while True: 
     width = int(input("Enter width (1 - 60):")) 
     if width > 1 and width < 60: 
      break 
     else: 
      print("Please enter a valid input") 
    while True: 
     height = int(input("Enter width (1 - 20):")) 
     if height > 1 and height < 20: 
     break 
     else: 
      print("Please enter a valid input") 
    return calcPerimeter(width, height), calcArea(width, height) 


def calcPerimeter(width, height): 
    perimeter = (2 * (width + height)) 
    return perimeter 

def calcArea(width, height): 
    area = width * height 
    return area 


def main(): 
    perimeter, area = getInt() 
    print('Perimeter is {}, area is {}'.format(perimeter, area)) 


main() 
0

1つの方法は、グローバルキーワードを使用することです。もう1つの方法は、関数から必要な変数を返し、それらをグローバルスコープに保存することです。

0

ポーの答えにあなたのmain機能を変更すると、正しくコードの実行を作る理由を理解する[http://python-textbok.readthedocs.io/en/1.0/Variables_and_Scope.html]をこの(リンク)を参照してください。

calcPerimeterおよびcalcAreaの内部で定義された変数は、異なる範囲にあるため、main関数では表示/アクセスできません。

0
#I think i have resolved your problem.In your case it was returning list/tuple .you have to convert it into simple variable 
def getInt(): 
    while True: 
    width = int(input("Enter width (1 - 60):")) 
    if width > 1 and width < 60: 
     break 
    else: 
     print("Please enter a valid input") 
while True: 
    height = int(input("Enter height (1 - 20):")) 
    if height > 1 and height < 20: 
     break 
    else: 
     print("Please enter a valid input") 
return width,height 


def calcPerimeter(width, height): 
    hw=width+height 
    perimeter = 2*hw 
    return perimeter 

def main(): 
    width,height= getInt() 
    p=calcPerimeter(width, height) 
    print('The perimeter is %s'%p) 
    a=calcArea(width, height) 
    print('The area is %s'%a) 


main() 
関連する問題