2017-05-12 8 views
0

私が持っている一連の機能の結果を出力する際に​​問題があります。私が何時間も立ち往生していたので、どんな情報でも大歓迎です。リストを出力する際に​​エラーが発生する

エラー:

minNum = theArray[0] 
IndexError: list index out of range 

所望の出力:

The original array was: 
[22, 49, 80, 4, 53, 31, 6, 30, 61, 87] 
The maximum value is: 87 
The minimum value is: 4 
The total value is: 423 
The average value is: 42.3 
The sorted array is: 
[4, 6, 22, 30, 31, 49, 53, 61, 80, 87] 

機能: randIntArray - (でテストするために)ランダムな整数の配列を移入。 getInt(プロンプト) - ユーザー10xから整数を取得しようとします。 getData() - 整数を配列(userIntList)に格納するためにgetIntを使用してループ10xを実行します。 swap - リストのスワップルーチン。 sortArray - スワップルーチンを使用して並べ替えます。 displayArray - 配列を出力します。 maxValue - リスト内の最大値を探します(python組み込み関数を使用しません)。 minValue - リスト内のminを探します(python組み込み関数を使用しません)。 aveValue - リスト内のave#を探します(python組み込み関数を使用しません)。 totalValue - リスト内の整数の合計数を見つけます(組み込み関数pythonを使用していません)。 dataOut(theArray) - 上記の値を出力します。 processInput(theArray) - dataOut、sortを使用し、リストをソートされていないソート形式でプロンプトします。 unitTest - ランダム整数関数を使用して結果をテストし、出力します。

import random 

def randIntArray(): 
    randomList = [] 
    randomList = random.sample(range(1, 101), 10) 
    return randomList 

def getInt(prompt): 
    # Function to call when asking for the A and B values later. 
    try: 
     x = input(prompt) 
     y = int(x) 
     return y 
    except: 
     print("That was not an integer. Please enter an integer. ") 


def getData(): 
    userIntList = [] 
    for i in range(10): 
     userNum = getInt("Please enter value number : ") 
     userIntList.append(userNum) 
    return userIntList 


def swap(a, j, k): 
    temp1 = a[j] 
    a[j] = a[k] 
    a[k] = temp1 

def sortArray(a): 
    for i in range(len(a)): 
     for k in range(len(a) - 1): 
      first = k 
      second = k + 1 

      if (a[first] > a[second]): 
       # Uses Swap function 
       swap(a, first, second) 

def displayArray(theArray): 
    outList = theArray 
    return outList 

def maxValue(theArray): 
    maxNum = 0 
    for i in theArray: 
     if i > maxNum: 
      maxNum = i 
    return maxNum 

def minValue(theArray): 
    minNum = theArray[0] 
    for i in theArray: 
     if i < minNum: 
      minNum = i 
    return minNum 

def totalValue(theArray): 
    aTotal = 0 
    for s in theArray: 
     aTotal += s 
    return aTotal 

def aveValue(theArray): 
    aTotal = totalValue(theArray) 
    aAverage = aTotal/len(theArray) 
    return aAverage 

def dataOut(theArray): 
    print("The maximum value is: " + str(maxValue(theArray))) 
    print("The minimum value is: " + str(minValue(theArray))) 
    print("The total value is: " + str(totalValue(theArray))) 
    print("The average value is: " + str(aveValue(theArray)) + "\n") 

def processInput(theArray): 
    print("The original array was:\n " + str(displayArray(theArray)) + "\n") 
    dataOut(theArray) 
    sortArray(theArray) 
    print("The sorted array is:\n " + str(displayArray(theArray))) 

def unitTest(): 
    print("Running test . . .") 
    randIntArray() 
    theArray = randIntArray() 
    processInput(theArray) 
    print("\n Finished test . . .") 

def main(): 
    unitTest() 
    theArray = [] 
    done = False 
    while not done: 
     proceedQ = input("Would you like to enter 10 numbers <y/n>? ") 
     if proceedQ == "y": 
      getData() 
      processInput(theArray) 
     if proceedQ != "y": 
      done = True 


main() 

皆さんに参加していただきありがとうございます。天使です。

  • バー
+0

は、あなたが() '' varibale theArray'へのgetData 'によって返された値を格納するためのものかもしれませ同一のリストの最大値と最小値を見つけるために行くのpython提供されるツールや機能

を使用してみてください。したがって、 'theArray'は空白ですが、最初の要素にアクセスしようとしている関数' minValue() 'にあります。そのため、エラーがスローされます – kuro

+0

あなたのコードはPythonの慣用句ではありません。 PythonではCamelCaseよりもアンダースコアが優先されます。 'randIntArray'関数(' generate_random_array'という名前のほうが良い)に 'randomList = []'という文を書く必要はなく、 'random.sample(range(1,101)、 –

+0

'displayList'関数は効果的に何もしません。pythonには' min'と 'max'関数が組み込まれています。' ' aTotal'、 'theName'は奇妙に見えて入力が難しいので、実際のプロダクションのPythonコードではこれらの接頭辞を見つけることはできません。まず、Python Tutorialを読んで基礎を理解し、PEP-8で標準Pythonコーディングスタイル。 –

答えて

0

あなたがgetData()を呼び出すときmain()では、それは割り当てませんtheArray

更新main()コードに返さuserIntList:あなたはmain()

def getData(): 
    userIntList = [] 
    for i in range(10): 
     userNum = getInt("Please enter value number : ") 
     userIntList.append(userNum) 
    return userIntList 

def main(): 
    unitTest() 
    theArray = [] 
    done = False 
    while not done: 
     proceedQ = input("Would you like to enter 10 numbers <y/n>? ") 
     if proceedQ == "y": 
      # Assign the returned list from getdata() to theArray 
      theArray = getData() 
      processInput(theArray) 
     if proceedQ != "y": 
      done = True 
0

関数を呼び出すgetData()あなたはそれによって返された結果をキャプチャしていません。したがって、theArray[]として初期化されると、processInput()を経由してminValue()に渡され、同じ値の[]が渡されます。しかしminValue()の中には、theArrayに要素が存在しないときに最初の要素にアクセスしようとしています。また、Pythonで、あなたはスワップを行うには別の機能を必要としない

theArray = getData() 

- あなたはmain()でこれを行う必要があります。このように簡単にできる -

b, a = a, b 

自分でソートする必要はありません。

関連する問題