2016-06-22 5 views
0

Ich erstelle eine Anwendung, um zu testen, wie viele "Schritte" es dauert, bis eine Zahl 1 mithilfe der Colatz-Vermutung erreicht. Hier ist der Code:Python Looping und Anhängen von Arrays

import sys 
import csv 

def findSteps(mode): 
    count = 0 
    while mode != 1: 
     count = count + 1 
     if mode%2 == 0: 
      mode = mode/2 
     else: 
      mode = (3*mode)+1 

    return count 

numbers = [] 
counts = [] 

for n in range(1, 100): 
    important = findSteps(n) 
    numbers[n] = n 
    counts[n] = important 

with open('colatz conjecture table.csv', 'wb') as csvfile: 
    myWriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL) 
    myWriter.writerow(numbers) 
    myWriter.writerow(counts) 

Leider, wenn ich es laufen, gibt es mir einen „Index Fehler: Liste Zuordnung außerhalb des Bereichs.“

+3

'Nummern behalten möchten [n] = n ': Sie können nicht Weisen Sie einfach einen zufälligen Index in einer Liste zu, wenn die Liste nicht die richtige Größe hat. Bitte lies etwas mehr über Listen in Python. Vielleicht willst du ein Diktat? – Evert

+1

Erstellen Sie Ihre Liste durch Anhängen: 'counts.append (wichtig)'. – Julien

Antwort

2

Neben der list.append() Variante können Sie auch

numbers = range(1, 100) 
counts = [findSteps(n) for n in numbers] 

verwenden Oder, wenn Sie es funktionelle

numbers = range(1, 100) 
counts = map(findSteps, numbers) 
0

Sowohl numbers als auch counts haben einen Typ von list, basierend darauf, wie Sie sie in Ihrem Code definiert haben. Sie können also die Methode append verwenden, um die Daten zu beiden hinzuzufügen. Denken Sie daran, dass die Indizes nullbasiert sind. Darüber hinaus stimme ich mit @ Evert Kommentar es sieht aus wie ein dictionary Objekt ist besser für Ihre Bedürfnisse geeignet.