【问题标题】:Python lists and function, finding the max/min months of rainfallPython 列表和函数,查找最大/最小降雨月份
【发布时间】:2017-03-11 18:05:10
【问题描述】:

我的程序应该获取每个月的降雨量,并计算一年的总降雨量、平均月降雨量以及降雨量最高(最大)和最低(最小)的月份。

一切都按计划进行,除了最高和最低月份的产出。我需要这个来显示降雨量最高和最低的月份的名称。我可以获得正确的值来显示,而不是月份的名称。

months = ["January", "February", "March", "April",
          "May", "June", "July", "August",
          "September", "October", "November", "December"]
values = []
year = []

for i in months :
    values.append(float(input("Enter total rain for " + i + ": ")))
print()



def total():
    print("The total rainfall for the year is %.2f" % sum(values))
total()

def average():
    print("The average monthly rainfall is %.2f" % float(sum(values)/ 12))
average()

def highest():
    print("The highest monthly rainfall is", max(values))
highest()

def lowest():
    print("The lowest monthly rainfall is", min(values))
lowest()

【问题讨论】:

    标签: python list


    【解决方案1】:

    您可以通过monthszipvalues 得到minmax,它们是(value, month) 的元组。确保将值放在首位,以便用于排序。

    >>> months = ["January", "February", "March", "April",
    ...           "May", "June", "July", "August",
    ...           "September", "October", "November", "December"]
    >>> values = [47, 2, 28, 9, 4, 64, 28, 94, 1, 9, 4, 23]  # or whatever
    >>> val, month = min(zip(values, months))
    >>> print("The lowest rainfall was %r in %s" % (val, month))
    The lowest rainfall was 1 in September
    

    【讨论】:

      【解决方案2】:

      您可以找到最小值/最大值的索引,然后使用该索引来查找月份。使用zip 是更 Python 的方式,但这是另一种初学者的方法

      def highest():
          print("The highest rainfall month is:",months[values.index(max(values))] )
          print("The highest monthly rainfall is", max(values))
      

      【讨论】:

      • 谢谢!我还在学习 Python,所以对我来说一切都是初学者的方法。非常感谢您的帮助!
      • 只是好奇,如果没有代码的“values.index”部分,还有其他方法可以做到这一点吗?我的教科书几乎没有解释这一点,所以我没有完全理解。
      【解决方案3】:

      maxmin 分别返回列表中的最大值或最小值。您可以使用index 获取该值的索引,然后使用该索引获取月份的名称。例如:

      def highest():
          max_value = max(values)
          ind = values.index(max_value)
          month_name = months[ind]
          print("The highest monthly rainfall is %d, occurring on %s" % \
          (max_value, month_name))
      

      【讨论】:

      • 只是好奇,如果没有代码的“values.index”部分,还有其他方法可以做到这一点吗?我的教科书几乎没有解释这一点,所以我没有完全理解。
      • @AndrewN。使用 zip 是一种巧妙的方式来解决 ti - 请参阅 tobias_k 的答案
      • @Mureinik-- 是的,它看起来是一种有效的方法,但我们也没有学到任何关于使用 zip 的知识。不过感谢您这么快回复!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2015-01-12
      • 2021-10-07
      • 2012-04-18
      • 2015-09-29
      • 2013-09-28
      相关资源
      最近更新 更多