不知道如何使用创建的方法

时间:2017-12-02 17:21:28

标签: python

我是Python和编程的新手。我正在关注如何制作一个简单的计算器的youtube示例,但我想添加我的想法和功能。或多或少我想让它变得多才多艺。

这是我无法解决的问题。我不知道如何使用我创建的两种方法使其工作

def main():
while True:
    Num1()
    num1 = int.num1()
    Num2()
    num2 = int.num2()


  # Executing the specified calculations with the 'Operation' function (row 13)
    Operation(num1, num2)

     #  --> followed by another nested while asking if the user wants to make another calculation

我希望应用程序能够在任何地方读取,如果用户输入"退出"它会退出,即使它要求一个数字,所以我创建了两种方法,因为它没有直接处理来自main()的循环和用户输入

def Num1():
while True:
    num1 = input("What is the first number? ")
    if num1.isdigit():
        break
    elif num1 == 'exit':
        print("Thank you using the SimpleCalculator. Bye!")
        time.sleep(3)  
        exit()  
    else:
        print("I don't understand. Please input a valid number")
        continue

def Num2():

while True:
    num2 = input("What is the second number? ")
    if num2.isdigit():

        break
    elif num2 == "exit":
        print("Thank you using the SimpleCalculator. Bye!")
        time.sleep(3) 
        exit()  
    else:
        print("I don't understand. Please input a valid number")
        continue

问题在于我得到了这个错误而且我得到了它,但我不知道如何解决它。

Traceback (most recent call last):
File "C:/Users/Albert/PycharmProjects/HelloWorld - First Py' 
Apps/SimpleCalculator.py", line 131, in <module>
main()
File "C:/Users/Albert/PycharmProjects/HelloWorld - First Py' 
Apps/SimpleCalculator.py", line 109, in main
Operation(num1, num2)
NameError: name 'num1' is not defined

6 个答案:

答案 0 :(得分:1)

我在您的代码中看到一些常见错误:

  1. 您可以调用函数Num1()来输入num1,但num1是本地的 变量。因此,您只能在Num1()函数中查看和使用它。相同 用num2。所以,我建议使用Num1和Num2但返回num1 和num2。
  2. 我建议使用1个功能,不需要使用2。
  3. 看起来像num1 = int.num1(),你想将num1()转换为int。这是错的。正确将是num1 = int(num1)。 这会将num1从string转换为int并将其保存到num1。但 最好为字符串和int使用不同的名称:num1 = INT(num1_str)。当你使用括号num1()时,这意味着你打电话 num1函数完成。但是num1不是一个函数,所以它不是 调用。
  4. 您使用两次将字符串转换为int。在编程中,当你看到两个代码,只是复制/粘贴时,你最好做一个 它的功能。这里我们有函数,所以只需插入 在函数中转换为int。
  5. 不要忘记缩进。这是Python中最重要的事情。在其他语言中,您使用类似{}的内容来定义 某个逻辑块的开头和结尾。但在Python中,它 一切都取决于缩进。
  6. 所以,使用它,它看起来像这样:

    def main():
        while True:
            # just call NumEntering - one general function for entering numbers,
            # and give to it attribute - message for user.
            num1 = int(NumEntering("What is the first number? "))
            num2 = int(NumEntering("What is the second number? "))
    
            # Executing the specified calculations with the 'Operation' function (row 13)
            Operation(num1, num2)
    

    功能:

    def NumEntering(message):  # message - this what function get from outer function.
        while True:
            num_str = input(message)  # show given message
            if num_str.isdigit():
                return int(num_str)  # convert to int and return to outer function
            elif num_str == 'exit':
                print("Thank you using the SimpleCalculator. Bye!")
                time.sleep(3)  
                exit()  
            else:
                print("I don't understand. Please input a valid number")
                continue
    

答案 1 :(得分:0)

区分大小写,您定义了Num1() & Num2()而不是num1() & num2()

答案 2 :(得分:0)

您的代码存在很多问题。

  1. 干不要重复自己。当他们做同样的事情时,不需要有两个功能。完整删除Num2。这没用。

  2. Num1未返回值。我们希望函数向用户询问一个数字(它确实如此),如果用户输入“exit”(也已完成)则退出并返回用户输入的数字(未完成)。

  3. 函数名称以小写字母开头,具有描述性。 Num1没有,所以让我们把它改成ask_number。

  4. 上面提到的所有问题都可以通过用以下ask_number函数替换Num1和Num2来解决。

    $error = '';
    if (!preg_match('/^(\.[a-z0-9]+|[a-z0-9]+\.([a-z0-9]*))$/i', $username)) {
        $error = "Invalid Username";
    }
    
    if ($error) echo $error;
    
    1. 您的主要方法是不将函数的返回值赋值给变量。
    2. 通过替换旧代码来修复它

      def ask_number():
          while True:
              num = input("What is the first number? ")
              if num.isdigit():
                  return int(num) #This line fixes problem 2
              elif num == 'exit':
                  print("Thank you using the SimpleCalculator. Bye!")
                  time.sleep(3)  
                  exit()  
              else:
                  print("I don't understand. Please input a valid number")
      

      Num1()
      num1 = int.num1()
      Num2()
      num2 = int.num2()
      

      我们调用ask_number函数两次,并将其返回值分配给num1和num2。

答案 3 :(得分:0)

问题在于Num1()和Num2()问了问题,但没有对它们做任何事情。此外,定义的num1和num2是函数本地的变量,因此您无法从main()函数访问它们。你应该添加&#34;返回numX&#34;而不是中断并将Num1()分配给num1,这允许您在main()函数可访问的变量中捕获用户的输入。

这是你的代码应该是这样的:

%dw 1.0
%output application/java
---
{(payload)}

答案 4 :(得分:0)

免责声明:我要求澄清,但我还没有SO特权。

运行程序时,您能确保缩进正确吗?例如,您的while循环不应与函数定义位于相同的缩进级别。

此外,您是否在此文件SimpleCalculator.py中执行所有操作?如果是这样,您将需要一个额外的行来调用您的方法,因为现在它们只是被声明。

if __name__ == '__main__':
    # And the following line will call your main function which you defined previously        
    main() 

更好的是,只需删除main()函数并将其替换为更多Pythonic语法:

if __name__ == '__main__':
    while True:
        Num1()
        Num2()

此外,由于您正在呼叫Num1()Num2()并且他们正在处理输入,因此您无需设置num1 = int.num1()num = int.num2()(两者都是给我错误)等。如果您希望将值返回到main方法进行处理,则在检查return num1时,您需要执行if num1.isdigit():,并在主方法集中firstNumberInput = Num1()

希望这有帮助!

答案 5 :(得分:0)

可能只是因为您发布了有遗漏的代码,但有几点需要解决。

Num1和Num2函数不返回任何内容。虽然值num1是在函数内分配的,但在函数范围之外无法访问它。

int没有方法&#34; num1&#34;所以调用int.num1()应该用int(num1())

替换

创建2个几乎相同的函数为自己创造了更多的工作并使代码难以改变,你可以创建一个更通用的函数。

def getnum():
    while True:
        mynum = input("What is the first number? ")
        if mynum.isdigit():
            break
        elif mynum == 'exit':
            print("Thank you using the SimpleCalculator. Bye!")
            time.sleep(3)
            exit()
        else:
            print("I don't understand. Please input a valid number")
    return mynum

def main():
    while True:
        num1 = int(getnum())
        num2 = int(getnum())