我是新来的,我已经习惯了用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会给我这种类型的错误:'需要浮点数'。
我尝试了很多修改,但一直没用。我希望有人能解决我的问题。非常感谢你!
答案 0 :(得分:0)
变量dec
用于函数名和变量。 Python将其视为错误中的函数名称。
答案 1 :(得分: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
正在返回一个浮点数,我想这就是你真正想要检索的内容。
答案 2 :(得分:0)
首先,你的格式很糟糕。了解代码的外观 - 它将在以后为您节省大量时间,尤其是在调试时。
其次,当你跑: WSS(LAT,分解)
你将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))
请记住处理可能的例外情况。并阅读一些关于良好编程实践的内容......
答案 3 :(得分: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>)
答案 4 :(得分:0)
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
吗?)