我正在研究这个将Julian日转换为格里高利日的函数,输出看起来像ex。 22.0,12.0,2000
这就是为什么在印刷中我有这三个变量,但是当我运行它时,它给了我错误:
在赋值之前引用的局部变量'mes'。
此外,“A”似乎以黄色突出显示,警告“可能在分配前引用局部变量A”。我不知道如何解决它。
我试过改变缩进,但我没有看到什么是错的。
以下是我的功能:
def JD2fechaGregoriana(fecha):
fecha1=int(fecha+0.5)
fecha2=float(fecha1-fecha)
Z =fecha1
F = fecha2
if (Z<2299161):
A=Z
elif (Z>= 2291161):
alpha=int((Z-1867216.25)/36524.25)
A= Z + 1 + alpha -int(alpha/4)
B= A +1524
C= int((B-122.1)/365.25)
D= int(365.25*C)
E= int((B-D)/30.6001)
dia1= B-D - int(30.6001*E)+F
if (E>14):
mes=E-1
elif (E==14 or E==15):
mes=E-13
if (mes>2):
anio=C-4716
elif(mes==1 or mes==2):
anio=C-4715
print(dia1,mes,anio)
先感谢您。
你在mes
中使用变量if...else
,然后打印它的值。即使存在变量mes
,你在if...else
块中分配它的值,自然这将在if
块内创建变量,因此当你尝试打印mes
时它会给出错误:
您应该先在if语句之前将变量声明为0
,然后在if块中进一步使用它。
例如:
.....
mes=0
if (E>14):
mes=E-1
......
变量A
也是如此。
它会工作!
朋友,回顾变量范围的主题,在IF -ELSE中比较它们之前声明变量。用一些值初始化它们。例如
month = 0
A = 0