2013-10-15 3 views
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) 
    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 

나도 몰라 : '부유물이 필요합니다'.

많은 수정을 시도했지만 쓸모가 없었습니다. 누군가 내 문제를 해결하기를 바랍니다. 고마워요!

+4

코드의 형식을 수정하십시오 –

+1

(코드 블록에 코드를 넣었지만 잘못 들여 쓰기가되었습니다) – geoffspear

+0

'math.radians (dec)'; 'dec'은 함수가 아니라 값입니다. 어쩌면 당신은'dec (something) '을 부를까? – geoffspear

답변

0

변수 dec은 함수 이름과 변수 모두에 사용됩니다. 파이썬은 이것을 오류의 함수 이름으로보고 있습니다. 당신이 원하는 무엇

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이 float을 반환하기 때문에 실제로 검색하려고하는 것 같습니다.

+1

사실을 확인하십시오. 파이썬 함수는 객체이며 다른 객체와 마찬가지로 인수로 전달할 수 있습니다. 또한이 경우'dec()'은 float을 반환하지 않고'None'을 반환합니다. –

+0

나쁘다, 나는 너무 빨리 질문을 읽었다. 내 대답을 바로 잡았어. – MBR

+0

고맙습니다. 작동합니다! 정말 감사합니다! 나는 성공없이 몇 시간 동안 싸우고 있었다. 나는 더 공부해야한다! – gpujol

0

우선 서식이 잘못되었습니다. 코드가 어떻게 보일지 배우십시오. 나중에 디버깅하는 동안 많은 시간을 절약 할 수 있습니다. 실행할 때

둘째 : 당신은 'WSS를'기능이 개 인수를 전달

(LAT 12 월) WSS를 첫 번째 LAT = 51.05,하지만 당신은 '12월'라는 인수를 정의 적이 없다 - 당신은 그러한 기능을 정의했다.

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)) 

가능한 예외를 돌봐 기억하십시오 : 당신이 원하는 무엇

이 같은 것입니다. 그리고 좋은 프로그래밍 관행에 대해 조금 ... 자세히

+0

'dec()'함수 안에서'dec'이라는 변수를 사용하는 것은 여전히 ​​혼란스럽고,'return'중 하나에'()'을 쓰는 이유는 무엇입니까? – unwind

+0

빠른 복사 - 파스타였습니다 ;-), 이제 좀 더 읽기 쉽습니다. –

+0

대단히 감사합니다. 작동합니다! 정말 감사합니다! 나는 성공없이 몇 시간 동안 싸우고 있었다. 나는 더 공부해야한다! – gpujol

0
먼저 실제로 dec() 함수에서 뭔가를 반환해야

- 어느 쪽도하지 표준 출력에 로컬 이름도 인쇄에 할당하는 것은하지 않을 것이다 : 이제

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)) 
을 당신은 중간 변수를 통해 하나이 값을 사용할 수 있습니다

NB : Python 3을 사용하는 경우.X,

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) 

print(<something>) 그런 다음 할로 print <something> 대체 :이 작동

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

. 코드가 작동하지 않는 이유를 알아 보려면 계속 읽어보십시오.

def wss(LAT,dec)으로 무엇을하고있는 것은 두 개의 인수 LAT와 dec을 전달하는 함수를 정의한다는 것입니다. 그러나 실제로 해당 기능을 호출 할 때 (예 : >>>wss(LAT,dec)) dec에 대한 값을 설정하지 않았습니다. dec(n)에 값이 있지만 아무 것도 할당하지 않았습니다. 값을 할당 한 변수 LAT과 대조하십시오. (LAT=51.05 기억해?)

+0

대단히 감사합니다! 정말 고마워! – gpujol

관련 문제