2016-08-07 30 views
0
geht

Das ist meine Funktion bisher:Index außerhalb des zulässigen Bereichs Fehler, Kann mir bitte jemand sagen, wo seine falsche

def fizzbuzz(intList): 
    strList = list[] 
    for i in range(0,len(intList)): 
     if intList[i] % 3== 0 and intList[i] % 5==0: 
      strList[i] = "FizzBuzz" 
     elif intList[i] % 3 == 0: 
      strList[i] = "Fizz" 
     elif intList[i] % 5 == 0: 
      strList[i] = "Buzz" 
     else: 
      strList[i] = str(intList[i]) 
    return strList 

Das ist, was ich im Grunde tun soll:

  1. Für Zahlen, die ein Vielfaches von drei sind, ersetzen Sie die ganze Zahl durch die Zeichenfolge "Fizz".

  2. Für Zahlen, die ein Vielfaches von fünf sind, ersetzen Sie die ganze Zahl durch die Zeichenfolge "Buzz".

  3. Für Zahlen, die ein Vielfaches von beiden drei und fünf ersetzen Sie die ganze Zahl mit der Zeichenfolge sind "FizzBuzz"

Ihre Funktion in einer Liste von ganzen Zahlen als Eingabe sollte. Ihre Funktion sollte die Eingabeliste nicht verändern. Ihre Funktion sollte eine aktualisierte Liste mit Ganzzahlen und Strings zurückgeben.

+1

'strList = list []' ist das Python? korrigiere es als 'strList = list()' –

Antwort

0

Sie erstellen (am wahrscheinlichsten, das ist) eine leere Liste mit strList = list() und dann strList[i] bei einem Index zugreifen, die nicht existieren - die strList leer ist, jeder Indexierungsvorgang auf sie wird angehoben ein IndexError.

Sie sollten Kopieren seiner die ursprüngliche Liste statt mit [:] (oder list(intList) oder [*intList] wenn auf Python 3.5):

strList = intList[:] 

Wenn Sie jetzt Index strList Sie den Index verwenden werden, die angibt, die aktuelle Nummer in intList Sie durchlaufen.

+0

Danke Jim! Du warst sehr hilfreich! –

0

Sie indexieren strList basierend auf der Länge von intList. Dies funktioniert nur, wenn strList und intList die gleiche Länge haben.

Um eine Liste erstellen Sie auch die korrekte Syntax list() Gegensatz verwenden müssen, um list[]

Darüber hinaus haben Sie strList erstellt eine leere Zeichenfolge sein, dh Sie müssen strList[i] nicht verwenden, um jeden Index zuweisen Werte (scheinbar unmöglich).

Eine Lösung für dieses Problem ist die Verwendung .append(value). Ich habe eine Lösung geschaffen, wie unten zu sehen:

def fizzbuzz(intList): 
    strList = list() 
    for i in range(0,len(intList)): 
     if intList[i] % 3== 0 and intList[i] % 5==0: 
      strList.append("FizzBuzz") 
     elif intList[i] % 3 == 0: 
      strList.append("Fizz") 
     elif intList[i] % 5 == 0: 
      strList.append("Buzz") 
     else: 
      strList.append(str(intList[i])) 
    return strList 

Hier kann die Funktion den strlist schaffen wird, in dem gegebenen intList durch jeden Wert laufen. Je nach Wert hängt die Funktion den gewünschten Wert an die Liste an. Zum Schluss eine neue Liste, die auf Wörtern und Zahlen basiert.

+0

Danke Mitchell! Ihre Lösung schien mir sehr deutlich zu machen, wo ich falsch gelaufen bin! –

+0

Ich bin froh, dass ich helfen konnte! :) –