簡體   English   中英

Python雨量統計

[英]Python-Rainfall Statistics

我正在嘗試為編程課程的入門找到一些功課。 看來我已經走了很長的路要走,找到了大多數信息。 我必須設計一個程序,該程序需要用戶輸入12個月中每個月的總降雨量。 它應該計算並顯示一年的總降雨量,平均降雨量以及數量最高和最低的月份。 我可以讓我的程序執行所有操作,但以最高和最低顯示月份名稱。 就像我之前提到的那樣,我知道我已經走了很長一段路,而且很可能不是最有效的途徑。 這是我的代碼。

year=[]
jan=float(input('Please enter Jan rainfall: '))
feb=float(input('Please enter Feb rainfall: '))
mar=float(input('Please enter Mar rainfall: '))
apr=float(input('Please enter Apr rainfall: '))
may=float(input('Please enter May rainfall: '))
jun=float(input('Please enter Jun rainfall: '))
jul=float(input('Please enter Jul rainfall: '))
aug=float(input('Please enter Aug rainfall: '))
sep=float(input('Please enter Sep rainfall: '))
oct=float(input('Please enter Oct rainfall: '))
nov=float(input('Please enter Nov rainfall: '))
dec=float(input('Please enter Dec rainfall: '))

year.extend((jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec))

def lowest():
    print('The minimum rainfall is', min(year))
lowest()

def highest():
    print('The most rainfall is', max(year))
highest()

def total():
    print('The total rainfall is', sum(year))
total()

def average():
    print('The average rainfall is', float(sum(year))/len(year))
average()

執行此操作時,我會得到輸入提示,即最小值,最大值,總數和平均值。 我只是不確定從哪里獲得最小和最大月份名稱。 如果有一種更快的方法,我也全力以赴。 謝謝。

我可能會在這里使用dict

year = {}
year['jan'] = float(input('Please enter Jan rainfall: '))
...

現在獲得最低要求:

def lowest():
    print('The minimum rainfall is', min(year.values()))

lowest()

如果您想知道哪個月份最低:

def lowest2():
    print('The month of minimum rainfall is', min(year, key=lambda x:year[x]))

lowest2()

由於您不能使用字典,因此可以為月份名稱單獨列出:

months = ["jan", "feb", "mar", ... ]

然后在任何給定的函數中使用返回值的索引從另一個列表中獲取月份名稱,例如

def lowest():
    low = min(year)
    month = months[year.index(low)]
    print ...

編輯:您添加了沒有字典的要求,但是我留下了答案,以防它對其他人有用。

如果使用字典,則可以執行以下操作: https : //stackoverflow.com/a/268285/341744

In [1]: months = {"jan":20, "feb:":32, "mar":45}

In [2]: max(months.iteritems(), key=operator.itemgetter(1))[0]
Out[2]: 'mar'

您可以自動輸入,為簡潔起見,我只用了兩個月。

In [3]: 
def input_rainfall(months):
    r = {}
    for month in months:
        while True:
            try:
                rain = float(input("Enter rainfall for {}: ".format(month)))
                r[month] = rain
                break
            except ValueError:
                print("You must enter a float")
    return r

months = input_rainfall(['jan', 'feb'])
Enter rainfall for jan: 3.4
Enter rainfall for feb: 3.41


In [4]: max(months.iteritems(), key=operator.itemgetter(1))[0]
Out[4]: 'feb'

In [5]: min(months.iteritems(), key=operator.itemgetter(1))[0]
Out[5]: 'jan'

如果無法使用字典,則可以為列表中的元素使用不同的數據表示形式實現類似的邏輯。 您可以采用“ Jan | 10.0”格式,其中第一部分引用月份,第二部分引用降雨值。 在這種情況下,代碼將如下所示:

year=[]
months = ["Jan","Feb","March","April","May","June","July","August","September","October","November","December"]

for i in months:
    year.append(i+"|"+str(input('Please enter '+i+' rainfall: ')))

key_func = lambda s:s.split("|")[1]
split_func = lambda s,index:s.split("|")[index]

min_rainfall = min(year,key=key_func)
print("Minimum Rainfall: "+split_func(min_rainfall,1)+" in the month of "+split_func(min_rainfall,0))

max_rainfall = max(year,key=key_func)
print("Max Rainfall: "+split_func(max_rainfall,1)+" in the month of "+split_func(max_rainfall,0))

total = sum([float(split_func(p,1)) for p in year])
print("Total Rainfall: "+str(total))

print("Average Rainfall: "+str(float(total/len(year))))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM