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