簡體   English   中英

Python主函數從不調用其他函數?

[英]Python main function never calls other functions?

我的任務是創建一個基本的計算器程序,該程序具有加,減,乘和除的選擇。 Main應該調用菜單,菜單應該顯示選擇,並且在顯示答案后程序應該返回菜單。

當我運行它時,菜單會正確顯示,並提示我選擇數學運算,但是當我輸入一個值(即使它是一個無效數字)時,程序將不執行任何操作並返回菜單。

def add(num1,num2):
    num1, num2 = prompt()
    return num1 + num2

def subtract(num1,num2):
    num1, num2 = prompt()
    return num1 - num2

def multiply(num1,num2):
    num1, num2 = prompt()
    return num1 * num2

def divide(num1,num2):
    num1, num2 = prompt()
    if num1 == 0 and num2 == 0:
        print "Dividing zero by zero is undefined."
    if num1 != 0 and num2 == 0:
        print "Cannot divide by zero."
    return float(num1) / num2

def prompt():
    num1 = raw_input("Please enter the first value: ")
    num2 = raw_input("Please enter the second value: ")
    return (num1,num2)

def menu():
    print "Basic Calculator"
    print "1 - Add"
    print "2 - Subtract"
    print "3 - Multiply"
    print "4 - Divide"
    print "5 - Quit"
    operation = int(raw_input("Please enter a value to choose from options    above: "))
    return operation

def main():
    while True:
        if menu() == 1:
            answer = add(num1,num2)
            print answer
        elif menu() == 2:
            answer = subtract(num1,num2)
            print answer
        elif menu() == 3:
            answer == multiply(num1,num2)
            print answer
        elif menu() == 4:
            answer == divide(num1,num2)
            print answer
        elif menu() == 5:
            print "Thank you for using basic calculator"
            print "Goodbye!"
            break    
        else:
            print "Invalid input"

if __name__=='__main__':
    main()

我如何獲得主函數來調用加法,減法,乘法和除法函數,然后在選擇了選項5退出時中斷?

我會補充說我是python的新手。 感謝您提供的任何幫助!

您的錯誤主要是,請更改為:

def main():
    while True:
        operation = menu()
        if operation == 1:
            answer = add(num1,num2)
            print answer
        elif operation  == 2:
            answer = subtract(num1,num2)
            print answer
        # And so on

因為您在每個IF上調用menu(),所以每個輸入僅檢查一個IF。

編輯

刪除所有對函數的輸入: def add(num1,num2)應該是def add():因為它們返回值,所以不接受值。

我無法重現您描述的行為。 但是您的代碼不起作用,因為這樣的行

answer = add(num1,num2)

拋出錯誤:

$ python2 so.py    
Basic Calculator
1 - Add
2 - Subtract
3 - Multiply
4 - Divide
5 - Quit
Please enter a value to choose from options    above: 1
Traceback (most recent call last):
  File "so.py", line 58, in <module>
    main()
  File "so.py", line 39, in main
    answer = add(num1,num2)
NameError: global name 'num1' is not defined

您認為num1num2來自哪里?

您調用了一個尚不存在的參數的函數: add(num1, num2). 在下面的代碼段中,尚未定義num1num2因為它們是由函數prompt()初始化的,而后者由其他函數( add()subtract()等)調用。

def main():
    while True:
        if menu() == 1:
            answer = add(num1,num2)
            print answer

首先將num1num2初始化,然后在后續調用中將它們用作參數。 刪除對其他函數中的hint()的調用。 在函數調用中使用它們之前,首先需要調用prompt()

def add(num1,num2):
    return num1 + num2

...

def main():
    while True:
        if menu() == 1:
            num1, num2 = prompt()
            answer = add(num1,num2)
            print answer

基本上,稍微修改一下思路。 你進入一個函數調用的參數,你的情況num1num2傳遞到add(num1, num2)應該已經被初始化。 也就是說,在將num1num2傳遞給另一個函數(例如add(num1, num2).之前,它們應該已經具有值add(num1, num2).

另外, raw_input()返回一個字符串,因此您必須先將它們轉換為數值,然后才能進行數學運算。

print("Simple maths count")
num1 = int(input("What is your number?"))
for i in range (1, 20):
    print (num1 * i)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM