在Python数组中使用max()和min()失败

在Python数组中使用max()和min()失败,python,sorting,max,min,Python,Sorting,Max,Min,上下文:继续自学Python,我最近完成了一个教科书练习,要求提供一个程序,允许用户定义“x”年数,并能够在“x”中每个月输入降雨量值 问题:下面是我的代码,它的工作原理是“ok”,但最新的练习要求我“扩展”我的代码,在打印语句中显示数值最大和最小的用户输入降雨值 披露:我一直在关注S.O,试图找到我问题的解决方案,但似乎没有任何东西能够帮助我解决我的挑战。 我尝试过的:我尝试过使用max()和min()但是我不断得到一个TypeError:“int”对象不可使用当我键入代码print(max(

上下文:继续自学Python,我最近完成了一个教科书练习,要求提供一个程序,允许用户定义“x”年数,并能够在“x”中每个月输入降雨量值

问题:下面是我的代码,它的工作原理是“ok”,但最新的练习要求我“扩展”我的代码,在打印语句中显示数值最大和最小的用户输入降雨值

披露:我一直在关注S.O,试图找到我问题的解决方案,但似乎没有任何东西能够帮助我解决我的挑战。

我尝试过的:我尝试过使用
max()
min()
但是我不断得到一个
TypeError:“int”对象不可使用
当我键入代码
print(max(monthlyRainfall)
print(min(monthlyRainfall)

有人能提供一些“指针”来指出我的错误吗?

您可以使用和
0
来初始化变量,以跟踪最小和最大降雨量值,实际上用户永远不会分别在上面或下面输入

但是,对于第二种情况,只是为了确保您还可以添加一个简单的检查,以确保用户不会输入负降雨量:

def calculationAlgorithm(userYearsTracking):
    totalMonths = 0
    totalRainfall = 0
    maxRainfall = 0
    minRainfall = sys.maxsize
    for currentYear in range (1, userYearsTracking +1):
        for currentMonth in range (1, 13):
            monthlyRainfall = int(input("Inches of rainfall for month " + format(currentMonth, "d",) + " | year " +
                                    format(currentYear, "d",)+": "))
            if monthlyRainfall < 0:
                print("Error invalid rainfall entered")
                sys.exit()
            if monthlyRainfall > maxRainfall:
                maxRainfall = monthlyRainfall
            if monthlyRainfall < minRainfall:
                minRainfall = monthlyRainfall
            totalMonths += 1
            totalRainfall += monthlyRainfall
    averageRainfall = totalRainfall / totalMonths
    print("Total months: " + str(totalMonths))
    print("Total rain:", format(totalRainfall), "(inch)")
    print("Total average rainfall:", round(averageRainfall,2), "(inch)")
    print("Largest input rainfall: " + str(maxRainfall))
    print("Smallest input rainfall: " + str(minRainfall))
N.B.在命名新变量时,我只使用了,因为这是您正在使用的样式。我建议将程序中所有变量的名称更改为python中的惯例。

python内置的min()和max()函数需要可编辑的对象,如列表、集合等。我认为您只输入了一个不太正确的整数(当只给出1个数字时,您如何选择最小值或最大值?显然是bot min和max)。 一种方法是:

  • 声明列表变量:

    rainfallList=[]

  • 然后,当您获得monthlyRainfall时,您应该添加以下代码:

    rainfallList.append(月降雨量)

  • 毕竟,对于循环,您可以使用min(rainfallList)和/或max(rainfallList)

  • 因此,您的最终代码应该是:

    def yearsToTrack():
        userYearsTracking = int(input("How many years do you want to track: "))
        return userYearsTracking
    
    def calculationAlgorithm(userYearsTracking):
        totalMonths = 0
        totalRainfall = 0
    
        rainfallList = []
    
        for currentYear in range (1, userYearsTracking +1):
            for currentMonth in range (1, 13):
                monthlyRainfall = int(input("Inches of rainfall for month " + format(currentMonth, "d",) + " | year " +
                                        format(currentYear, "d",)+": "))
                totalMonths += 1
                rainfallList.append(monthlyRainfall)
    
                totalRainfall += monthlyRainfall
        averageRainfall = totalRainfall / totalMonths
        print("Total months: " + str(totalMonths))
        print("Total rain:", format(totalRainfall), "(inch)")
        print("Total average rainfall:", round(averageRainfall,2), "(inch)")
        print("Min rain:", format(min(rainfallList)), "(inch)")
        print("Max rain:", format(max(rainfallList)), "(inch)")
    
    def main():
        userYearsTracking = yearsToTrack()
        calculationAlgorithm(userYearsTracking)
    main()
    

    print(str(…)
    你能提到你当前的输出吗听起来你是在把一个
    int
    传递给
    max
    /
    min
    而不是它们的列表。这些函数(min,max)是在iterables(列表,元组等)上调用的。代码中没有这样的数据结构,您只需维护总计。您需要添加类似于
    overallMin=min(overallMin,monthlyRainfall)的内容
    到您的内部循环。max也一样。这些应该像总和变量一样初始化。感谢您简单的解释,这真的很有帮助。我曾考虑过声明列表,但一直说服自己我不需要。我很高兴这对您有帮助:)
    How many years do you want to track:  1
    Inches of rainfall for month 1 | year 1:  2
    Inches of rainfall for month 2 | year 1:  2
    Inches of rainfall for month 3 | year 1:  2
    Inches of rainfall for month 4 | year 1:  2
    Inches of rainfall for month 5 | year 1:  4
    Inches of rainfall for month 6 | year 1:  1
    Inches of rainfall for month 7 | year 1:  2
    Inches of rainfall for month 8 | year 1:  2
    Inches of rainfall for month 9 | year 1:  2
    Inches of rainfall for month 10 | year 1:  2
    Inches of rainfall for month 11 | year 1:  2
    Inches of rainfall for month 12 | year 1:  2
    Total months: 12
    Total rain: 25 (inch)
    Total average rainfall: 2.08 (inch)
    Largest input rainfall: 4
    Smallest input rainfall: 1
    
    def yearsToTrack():
        userYearsTracking = int(input("How many years do you want to track: "))
        return userYearsTracking
    
    def calculationAlgorithm(userYearsTracking):
        totalMonths = 0
        totalRainfall = 0
    
        rainfallList = []
    
        for currentYear in range (1, userYearsTracking +1):
            for currentMonth in range (1, 13):
                monthlyRainfall = int(input("Inches of rainfall for month " + format(currentMonth, "d",) + " | year " +
                                        format(currentYear, "d",)+": "))
                totalMonths += 1
                rainfallList.append(monthlyRainfall)
    
                totalRainfall += monthlyRainfall
        averageRainfall = totalRainfall / totalMonths
        print("Total months: " + str(totalMonths))
        print("Total rain:", format(totalRainfall), "(inch)")
        print("Total average rainfall:", round(averageRainfall,2), "(inch)")
        print("Min rain:", format(min(rainfallList)), "(inch)")
        print("Max rain:", format(max(rainfallList)), "(inch)")
    
    def main():
        userYearsTracking = yearsToTrack()
        calculationAlgorithm(userYearsTracking)
    main()