1

我是新来的,我已经习惯了用 Python 编程。我一直在网上寻找有用的答案,但是找不到解决我问题的方法。

它是这样的:

radiation=1.3888 
n=17
LAT=51.05

def dec(n):
    if 0<n<365:
        dec=23.45*math.sin(math.radians(360*(284+n)/365))
        print(dec)
    else:
        print('the day',n,'is not valid')

def wss(LAT,dec):
    wss=math.degrees(math.acos(((math.tan(math.radians(LAT)))*math.tan(math.radians(dec)))))
    print(wss)

--- 当我运行这段代码时,这是我收到的:

>>> dec(n)
-20.91696257447642

>>> wss(LAT,dec)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:/Users/Gerard/Dropbox/Master Thesis Gerard Pujol/Master Thesis Work/work hourly radiation OK.py", line 25, in wss
    wss=math.degrees(math.acos(-((math.tan(math.radians(LAT)))*math.tan(math.radians(dec)))))
TypeError: a float is required

我不知道为什么 Python 会给我这种类型的错误:'a float is required'。

我尝试了很多修改,但都没有用。我希望有人能解决我的问题。非常感谢!

4

5 回答 5

1
    radiation=1.3888

    n=17

    LAT=51.05

    def dec(n):

        if 0<n<365:

            dec=23.45*math.sin(math.radians(360*(284+n)/365))
            print (dec)
            return dec

        else:

            print('the day',n,'is not valid')
            return -1


    def wss(LAT,dec):

       wss=math.degrees(math.acos(((math.tan(math.radians(LAT)))*math.tan(math.radians(dec)))))

        print(wss)

然后做:

>>> dec = dec(n)
-20.91696257447642
>>> wss(LAT,dec)

这将起作用。要了解您的代码为何不起作用,请继续阅读。

您正在做的def wss(LAT,dec)是定义一个传递两个参数 LAT 和 dec 的函数。但是,当您实际调用该函数(例如>>>wss(LAT,dec))时,您还没有为dec. 你有一个值,dec(n)但你没有将它分配给任何东西。LAT将此与您分配值的变量进行对比。(还记得LAT=51.05吗?)

于 2013-10-15T12:14:41.630 回答
0

你想做的是像

def dec(n):
    if 0<n<365:
        dec = 23.45*math.sin(math.radians(360*(284+n)/365))
    else:
        print('the day %d is not valid' %n)
        return
    return(dec)

然后打电话

wss(LAT, dec(n))

dec这是一个函数,因此您不能将其作为参数传递。由于dec返回一个浮点数,我想这就是你真正想要检索的。

于 2013-10-15T12:00:10.110 回答
0

该变量dec用于函数名和变量。Python 将其视为错误中的函数名称。

于 2013-10-15T11:57:39.030 回答
0

您首先必须从dec()函数中实际返回一些内容 - 分配给本地名称或打印到 stdout 都不会:

def dec(n):
    if not  0 < n < 365:
        # that's how you handle incorrect arguments in Python
        raise ValueError("'%s' is not a valid day number" % n) 

    # 'n' is valid, let's proceed: 
    return 23.45 * math.sin(math.radians(360 * (284 + n) / 365.0))

现在您可以通过中间变量使用此值:

LAT = 51.5
n = dec(17)
print wss(LAT, n)

或者只是跳过中间变量:

print wss(51.5, dec(17))

注意:如果使用 Python 3.x,请替换print <something>print(<something>)

于 2013-10-15T12:13:27.543 回答
0

首先,你的格式很糟糕。了解代码应该是什么样子——它将在以后为您节省大量时间,尤其是在调试时。

其次,当你运行时: wss(LAT,dec)

您将 2 个参数传递给函数“wss”,第一个是 LAT = 51.05,但您从未定义过名为“dec”的参数 - 您已经定义了这样的函数。

你想要做的是这样的:

import math

n=17
LAT=51.05

def CalcDec(n):
    if 0<n<365:
        dec=23.45*math.sin(math.radians(360*(284+n)/365))
        return dec

def CalcWss(LAT,dec):
   wss=math.degrees(math.acos(((math.tan(math.radians(LAT)))*math.tan(math.radians(dec)))))
   return wss

print CalcWss(LAT, CalcDec(n))

记住要注意可能的例外情况。并阅读一些关于良好编程实践的信息......

于 2013-10-15T12:08:47.883 回答