【问题标题】:Program Returning nothing程序什么都不返回
【发布时间】:2016-08-17 00:46:36
【问题描述】:

我看到了这个Flowchart 并决定用它制作一个程序。问题是,如果我第一次输入“否”,它只会返回“走出去”。所有其他人都返回“无”。我正在使用 Python 2.7

def waitawhile():
    print "Wait a while"
    rain2 = raw_input("Is it still raining?")
    if rain2.lower() == "no":
        return "Go Outside"
    elif rain2.lower() == "yes":
        waitawhile()
def Raining():
    print "Is it raining?"
    rain = raw_input()
    if rain.lower() == "no":
        return "Go Outside"
    elif rain.lower() == "yes":
        print "Have Umbrella?"
        umbrella = raw_input()
        if umbrella.lower == "yes":
            return "Go Outside"
        elif umbrella.lower() == "no":
            waitawhile()
print Raining()

【问题讨论】:

    标签: python python-2.7 windows-10


    【解决方案1】:

    问题在于您对waitawhile 的调用(来自Rainingwaitawhile 本身)。调用它后,您将丢弃返回值并且什么也不返回。要修复它,请将调用更改为:

    waitawhile()
    

    到:

    return waitawhile()
    

    确保对于这两个函数,如果不执行return 语句,就无法到达函数的末尾。

    【讨论】:

    • 做到了!我似乎也忘记了其中一个叫伞.lower() 的括号。我想知道为什么它没有返回语法错误。
    • @AnvitGarg 它不会返回语法错误,因为它不是错误!您刚刚将一个对象值与一个字符串值进行了比较,没关系:)
    • 是的,在 Python 中,如果您单独引用一个函数或方法名称(不带尾括号),您将获得函数或方法对象而不调用该对象。
    【解决方案2】:

    您的程序存在三个问题,以下已修复:

    def waitawhile():
        print "Wait a while"
        rain2 = raw_input("Is it still raining?")
        if rain2.lower() == "no":
            return "Go Outside"
        elif rain2.lower() == "yes":
            return waitawhile()
    def Raining():
        print "Is it raining?"
        rain = raw_input()
        if rain.lower() == "no":
            return "Go Outside"
        elif rain.lower() == "yes":
            print "Have Umbrella?"
            umbrella = raw_input()
            if umbrella.lower() == "yes":
                return "Go Outside"
            elif umbrella.lower() == "no":
                return waitawhile()
    print Raining()
    

    工作如下:

    >>> ================================ RESTART ================================
    >>> 
    Is it raining?
    yes
    Have Umbrella?
    yes
    Go Outside
    >>> ================================ RESTART ================================
    >>> 
    Is it raining?
    yes
    Have Umbrella?
    no
    Wait a while
    Is it still raining?yes
    Wait a while
    Is it still raining?no
    Go Outside
    >>>
    

    你程序中的问题是逻辑错误,所以解释器不会显示语法错误:

    1. 你在 if 条件中使用了.lower 而不是.lower(),它总是为假。
    2. 您忽略了 waitawhile() 方法的返回,而您必须将它们返回到 print 方法。

    【讨论】:

      猜你喜欢
      • 2012-06-18
      • 2018-09-10
      • 2017-02-14
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多