首页 文章

Jython编码问题

提问于
浏览
-1

设计一个程序,让用户将12个月中每个月的总降雨量输入到列表中 . 该计划应计算并显示当年的总降雨量,月平均降雨量以及最高和最低量的月份 .

def main():
January = requestNumber ("Enter the amount of rainfall for the month of January:") 
February = requestNumber ("Enter the amount of rainfall for the month of February:") 
March = requestNumber ("Enter the amount of rainfall for the month of March:") 
April = requestNumber ("Enter the amount of rainfall for the month of April:") 
May = requestNumber ("Enter the amount of rainfall for the month of May:") 
June = requestNumber ("Enter the amount of rainfall for the month of June:") 
July = requestNumber ("Enter the amount of rainfall for the month of July:") 
August= requestNumber ("Enter the amount of rainfall for the month of August:") 
September = requestNumber ("Enter the amount of rainfall for the month of September:") 
October = requestNumber ("Enter the amount of rainfall for the month of October:") 
November = requestNumber ("Enter the amount of rainfall for the month of November:") 
December = requestNumber ("Enter the amount of rainfall for the month of December:") 

Year = [January, February, March, April, May, June, July, August, September, October, November, December] 

total_rainfall = (sum(Year))
showInformation("The total rainfall for the year is:" + str(total_rainfall))

monthly_average = (sum(Year)) / 12
showInformation ("The monthly average for the year is:" +  str(monthly_average))

这是我到目前为止的代码 . 我真的在努力研究问题的最后一部分,即显示最高和最低降雨量的月份 . 我知道如何使用max和min显示数字,但我不知道如何获得对应于最大和最小降雨量的月份 .

感谢任何人都能给我的帮助,这是在Jython .

1 回答

  • 0

    解决方案1:

    将月份名称列表添加到您的程序:

    Names = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
    Year = [January, February, March, April, May, June, July, August, September, October, November, December]
    

    然后,一旦获得用户输入,同时对两个列表进行排序:

    monthsSorted = sorted( zip(Names, Year), cmp=lambda (x1, y1), (x2, y2) : y2 - y1 )
    
    print "MAX=%s" % str(monthsSorted[0])
    print "MIN=%s" % str(monthsSorted[-1:])
    

    zip()将创建两个这样的列表:

    zip( [1,2,3], [a,b,c] ) -> [(1,a), (2,b), (3, c)]
    

    然后按第二部分(雨量)排序 .

    现在最大的月份是在几个月的前面,最小的是它的最后一个元素 .

    解决方案2:迭代所有元素,将它们相互比较,就像一轮冒泡排序:

    print "MAX=%s" % str( reduce(lambda (x1, y1), (x2, y2) : (x1, y1) if y1 > y2 else (x2, y2), zip(Names, Year)) )
    
    print "MIN=%s" % str ( reduce(lambda (x1, y1), (x2, y2) : (x1, y1) if y1 < y2 else (x2, y2), zip(Names, Year)) )
    

相关问题