在Python中模拟降雨
我这几周一直在尝试完成这个项目,但我在代码上搞了很多次,似乎都没有什么效果。我在计算总降雨量、平均降雨量,以及检查是否有超过12天的干旱和超过5天的洪水(降雨量至少为6英寸)时遇到了困难。请帮帮我。我是在用Python 3.3进行这个模拟,模拟的时间是108天,然后是一个世纪。我真的很感激能得到一些帮助。当我运行这个程序时,我得到了一个总降雨量的数字,但这个数字并不是降雨量的总和。关于洪水的部分,我应该使用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);
1 个回答
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。
顺便说一下,你的代码中不需要使用分号。
试试看下面这样的代码是否符合你的需求:
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
最后计算 avgRain
的那段代码让我觉得有点问题。你可能需要仔细想想这个变量到底是什么意思,以及应该如何正确计算。