首页 文章

if语句的函数返回none?

提问于
浏览
-2

我有一个函数,我写的是分两个数字 . 如果用户尝试0/0或x / 0,其中x是任意数字,我将添加错误消息 . 输入非零输入会产生正确答案,但如果分母为0,则函数将打印正确的语句,后跟NONE .

有什么解释吗?这是我的代码:

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

我看到人们在打印变量时有这个问题,并且使用return解决了他们的问题,但是在这里我打印一个字符串所以我不想使用return,对吧?

2 回答

  • 0

    如果没有return语句,则Python中的函数返回 None ,并且只返回程序的 else 分支 .

    考虑抛出异常而不是使用 print . 您可以在此处找到更多信息,包括除以零的示例:https://docs.python.org/2/tutorial/errors.html

  • 0

    我只想简要概述一下如何使用Python的内置异常来改进代码 .

    有几个内置异常会在执行错误操作时自动引发 . 因此,除以零时会产生ZeroDivisionError . 您可以使用try-except-blocks捕获任何这些异常 .

    我正在使用这些内置异常来告诉用户他的输入是否无效或者他是否决定除以零 .

    为此,我重写了您的代码,如下所示:

    def prompt():
        num1 = input('Please input a number: ')
        try:
            num1 = float(num1)
        except Exception as e:
            print('Your input is invalid. Starting at first input again.')
            return prompt()
    
        num2 = input('Please input another number: ')
        try:
            num2 = float(num2)
        except Exception as e:
            print('Your input is invalid. Starting at first input again.')
            return prompt()
    
        return num1, num2 
    
    
    def divide():
        num1, num2 = prompt()
        result = None
        msg = None
        try:
            result = num1 / num2
        except ZeroDivisionError as e:
            msg = str(e)
            result = None
        return msg, result
    
    msg, result = divide()
    
    if result:
        print('The result of you calculation is: {}'.format(result))
    else:
        print('The following error occured: {}'.format(msg))
    

    您肯定还可以进行一些进一步的改进或缩短我的代码 . 但是,我决定将此代码保持在此状态,因为我不想在此时过多地混淆您 .

相关问题