2014-04-27 3 views
0

J'essaie de prendre une liste 2D et d'ajouter un numéro donné par l'utilisateur au premier numéro de chaque sous-liste et de faire du second numéro de la sous-liste la sortie. Utilisez ensuite une fonction distincte pour imprimer la liste 2D entière. Jusqu'à présent, c'est tout ce que j'ai pu faire. Je n'arrive pas à comprendre comment faire pour que l'indexation fonctionne correctement avec les boucles, donc je n'ai pas encore mis la fonction d'affichage, car je ne peux pas obtenir la sortie correctement. Toute aide est grandement appréciée! J'utilise Python 3,3Manipulation de liste 2D en Python

ROWS = 5 
COLS = 2 

def main(): 

    num1 = int(input('Type a whole number and press ENTER: ')) 

    values = [[10, 0], 
       [13, 0], 
       [36, 0], 
       [74, 0], 
       [22, 0]] 

    for r in range(ROWS): 
     add = values[0] + num1 
     for c in range(COLS): 
      c = add 

    print(c) 
    input('press enter to continue') 

main() 

Répondre

1

Il y a quelques problèmes avec votre boucle de courant:

for r in range(ROWS): # r is assigned to values 0 to 4 in turn (but never used) 
    add = values[0] + num1 # TypeError - can't add integer to (sub-)list 
    for c in range(COLS): # c is assigned to values 0 to 1 in turn 
     c = add # c is reassigned to add's value 

Cela ne tente pas de mettre à jour la liste, et utilise des valeurs inutilement codées en dur (et ROWSCOLS). La solution minimale est:

for r in range(ROWS): 
    add = values[r][0] + num1 # note [r] 
    for c in range(COLS): 
     values[r][c] = add 

Mais beaucoup plus propre serait:

for row in values: 
    add = row[0] + num1 
    for index in range(len(row)): 
     row[index] = add 

Cela mettra à jour toutes les valeurs de la première valeur ainsi que l'entier de l'utilisateur. Pour laisser le premier entier au démarrage, utilisez range(1, COLS)/range(1, len(row)).