2017-11-20 22 views
1

Context:私は最近Pythonの自己学習を続けています。 「x」の各月に降水量の値を入力できるようにする必要があります。Pythonの配列でmax()とmin()を使用するのに失敗しました

問題:以下は「ok」のコードですが、最新のエクササイズではprint文で数値的に最大と最小のユーザー入力降雨値を表示するようにコードを拡張しています。

開示:私は私の質問に解決策を見つけることを試みるためにS.Oを見てきましたが、何も私の挑戦に近づいていないようです。私が試した何

私はprint(max(monthlyRainfall)またはprint(min(monthlyRainfall)

def yearsToTrack(): 
    userYearsTracking = int(input("How many years do you want to track: ")) 
    return userYearsTracking 

def calculationAlgorithm(userYearsTracking): 
    totalMonths = 0 
    totalRainfall = 0 
    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 
      totalRainfall += monthlyRainfall 
    averageRainfall = totalRainfall/totalMonths 
    print("Total months: " + str(totalMonths)) 
    print("Total rain:", format(totalRainfall), "(inch)") 
    print("Total average rainfall:", round(averageRainfall,2), "(inch)") 

def main(): 
    userYearsTracking = yearsToTrack() 
    calculationAlgorithm(userYearsTracking) 
main() 

は、いくつかの「ポインタ」を提供することができ、誰されているコードを入力したとき、私は私がTypeError: 'int' object is not iterableを得続けるしかしmax()min()を使用して試してみましたどこが間違っているのか?

+0

'プリント(文字列(...))' –

+0

あなたが言及することはできますあなたの現在の出力 –

+0

あなたは 'int'を' max'/'min'に渡すように聞こえます。 – Shadow

答えて

0

のように、Pythonの組み込みmin()関数とmax()関数は、反復可能オブジェクトを期待しています。などを設定します。 1つの数字だけが与えられたとき - 明らかにbot minとmaxです)。これを行う 一つの方法は、次のようになります。

  1. 宣言リストVAR:

    rainfallList.append(monthlyRainfall)

  2. :あなたがmonthlyRainfallを得るとき

    rainfallList = []

  3. その後、あなたはこのコードを追加する必要があります

  4. すべてのループの後で、分(rainfallList)および/または最大(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() 
+0

説明を簡潔にしていただきありがとうございます。本当に助かりました。私はリストを宣言することを考えましたが、私は必要としなかった自分自身を説得し続けました。 – William

+0

私はそれがあなたに役立ってうれしいです:) –

1

sys.maxsizeおよび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)) 

上記の変更here.との完全なプログラムを試してみてください

使用例:

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 

N.B.私は、使用しているスタイルとして新しい変数を命名するのにcamelCaseしか使用していません。あなたのプログラム内の変数の名前をすべてsnake_caseに変更することをお勧めします。これはPythonの規約です。

関連する問題