2014-03-13 2 views
-2

나는 지난 몇 주 동안이 작업을 수행하려고 노력 해왔고 코드를 망쳤지만 아무 것도 도움이되지 않습니다. 나는 총 강우량, 평균 강우량 및 12 일 이상의 가뭄과 5 일 이상의 홍수가 6 인치 이상인 비가 있는지 확인하는 데 어려움을 겪고 있습니다. 도와주세요. 나는 파이썬 3.3에서 이것을하고있다. 그리고 저는 108 일 동안 그리고 1 세기 동안 시뮬레이션을하고 있습니다. 나는 정말로 약간의 도움에 감사 할 것이다. 이 프로그램을 실행할 때 totalRain에 대한 숫자를 얻지 만 합산 된 강우량은 아닙니다. 홍수와 홍수 부분에 대해 if 문을 사용한다고 가정합니다. 그러나 어떻게해야할지 모르겠습니다. 가뭄으로 비가 내리는 12 일 이상 가뭄이 있었는지를 보여줄 필요가 있습니다.파이썬에서의 강우량 시뮬레이션

import random 
import math 

def rainFallAmount(x): 
    if chance<=0.71: 
     rainfall=0; 
    elif chance<=0.78: 
     rainfall=0.5; 
    elif chance<=0.85: 
     rainfall=0.75; 
    elif chance<=0.92: 
     rainfall=1.0; 
    elif chance<=0.98: 
     rainfall=1.5; 
    else: 
     rainfall=2.0; 
    return rainfall; 


totalRain = 0; 
day=109; 
num_days_no_rain = 0; # max_days_without_rain 
days_of_drought = 0; # days_not_raining 
days_over15 = 0; 
days_rained = 0; 
years = 100; 
#last_5_days = [0, 0, 0, 0, 0]; 
days = 36500; 
max_drought = 0; 

#This for loop is for 108 days. 
for day in range(109): 
    chance=random.uniform(0,1); 
    rainfall=rainFallAmount(chance); 
    print(rainfall); 
#last_5_days=[day%5]; 
#last_5_days= rainfall; 
#math.fsum([last_5_days]) > 6 
#there was a flood 
    if rainfall<0.5: 
     days_of_drought+=1; 
     days_rained=0; 
     num_days_no_rain+=1; 
    if days_of_drought>max_drought: 
     max_drought=days_of_drought; 
    else: 
     days_rained+=1; 
     if rainfall>=1.5: 
      days_over15+=1; 
      if rainfall>=0.5: 
       totalRain+=1; 
       avgRain=totalRain/day; 

print(rainfall); 
print("The number of days the rain was greater than 1.5 inches: ", days_over15); 
print("The longest period of no rain is: ", num_days_no_rain); 
print("The total rain for", day, "days is:", totalRain); 
print("The average rain per day is: ", avgRain); 
print("The longest period of rain is: ", days_rained); 
print("Longest drought was: ", days_of_drought,"days"); 

#This for loop is for a whole century. 
for years in range(36500): 
    chance=random.uniform(0,1); 
    rainfall =rainFallAmount(chance); 
    print(rainfall); 
    if rainfall == 0: 
     days_of_drought+=1; 
     days_rained=0; 
    if days_of_drought>max_drought: 
     max_drought=days_of_drought; 
     days_rained+=1 
     if rainfall>=0.5: 
      totalRain+=1; 
      avgDayRain=(totalRain/day;) 
      avgYearRain=(totalRain/years); 


print("The longest period of no rain is: ", noRain); 
print("The total rain for", years, "years is:", totalRain); 
print("The average rain per year is: ", avgYearRain); 
print("The average rain per day is: ", avgDayRain); 
+4

문제는 매우 복잡하며 다른 질문에 더 작은 해결할 수있는 부분으로 더 잘 분할되어야합니다. 질문을 공식화하고 다른 사용자가 귀하를 따라 가기 쉽습니다. – linkyndy

+0

강우량 시뮬레이션은 내 것이기도하지만 답변을 얻으려면 다시 게시해야 할 수도 있습니다. 도움이 필요하고 정말 감사 할 것입니다. – Shannon

답변

0

정확하게 이해하면 변수 totalRain에 시뮬레이션의 강우량 합계가 포함되기를 원합니다. 코드에는 여러 가지 문제가 있으며 그 중 몇 가지만 해결할 것입니다.

문제는이 if 문에 : 영어

if days_of_drought>max_drought: 
    max_drought=days_of_drought; 
else: 
    days_rained+=1; 
    if rainfall>=1.5: <--- HERE 
     days_over15+=1; 
     if rainfall>=0.5: 
      totalRain+=1; <-- HERE 
      avgRain=totalRain/day; 

이 말한다 : "강우량이 1.5 인치 인 경우, 모든 강수량의 합에 1을 추가 할 수 있습니다." 당신은 아마도 "모든 비의 합계에 의 강우량을 더한다. (비가 조금 내리지 않아도)."

이외에도 if rainfall>=0.5은 이미 강우량이 1.5 이상이므로 확실하게 0.5 이상인 지점에 있기 때문에 의미가 없습니다.

부수적으로, 세미콜론이 필요하지 않습니다.

시도하고 다음과 같은 일이 당신이 원하는 경우 참조 : avgRain을 계산하는 마지막 문이 나에게 의심 보인다

totalRain+=rainfall 
if days_of_drought>max_drought: 
    max_drought=days_of_drought 
else: 
    days_rained+=1 
    if rainfall>=1.5: 
     days_over15+=1 
     avgRain=totalRain/day 

있다. 변수가 무엇을 의미하는지 정확하게 계산하는 방법에 대해 생각하고 싶을 것입니다.