/ / Perché il mio elenco Python non somma i valori insieme? - pitone, array, somma

Perché la mia lista Python non sommerà i valori insieme? - python, matrici, somma

frames = []
frame_total = []
total = 0

while len(frames) < 2:
ball_one = int(raw_input("Enter the score of ball one: "))
ball_two = int(raw_input("Enter the score of ball two: "))


frame_total.append([ball_one, ball_two])
for frame in frame_total:
frames.append(frame_total)
b = sum(frames)
print(frame_total)
print(b)

Questo è il mio codice Non riesco a capire perché ricevo l'errore TypeError: unsupported operand type(s) for +: "int" and "list" quando provo a stampare la somma di ciascun array all'interno dell'array principale. qualche idea?

l'idea è di creare un gioco di bowling. hai 2 palline in ogni frame, ball_one e ball_two. dopo ogni frame, aggiungo questi 2 numeri a un array. quindi se ball_one è 8 e ball_two è 1. allora aggiungerà [[8, 2]] quindi il passaggio successivo se b_1 è 4 e b_2 è 4 allora sembrerà [[8, 2], [4, 4] ]. quindi voglio aggiungere 8 e 2 e 4 e 4 per produrre. [[10, 8]]. e infine il totale di entrambi, quindi 18.

risposte:

0 per risposta № 1

Fammi provare. Si desidera aggiungere ogni coppia [ball_one, ball_two] nei frame. Dopodiché, ottieni la somma per coppia e memorizzala in un altro elenco, ad esempio frames_total e infine visualizza la somma di tutto. Ecco il codice:

frames = [] # will contain raw results in each frame. (ex. [[8, 2], [4, 4]])
frames_total = [] # will contain total values in each frame (ex. [10, 8])
total = 0 # sum of everything

while len(frames) < 2:
ball_one = int(raw_input("Enter the score of ball one: "))
ball_two = int(raw_input("Enter the score of ball two: "))

frames.append([ball_one, ball_two])

frames_total = [sum(frame) for frame in frames]
total = sum(frames_total)

print frames_total
print total

Se vuoi che le informazioni vengano stampate dopo ogni turno, ecco un codice leggermente diverso:

frames = [] # will contain raw results in each frame. (ex. [[8, 2], [4, 4]])
frames_total = [] # will contain total values in each frame (ex. [10, 8])
total = 0 # sum of everything

while len(frames) < 2:
ball_one = int(raw_input("Enter the score of ball one: "))
ball_two = int(raw_input("Enter the score of ball two: "))

frames.append([ball_one, ball_two])
frames_total.append(ball_one + ball_two)
total = sum(frames_total)

print frames
print frames_total
print total

1 per risposta № 2
  • Continui a definire b in ogni iterazione del for ciclo continuo. Dovresti aspettare di definirlo fino a quando non ne avrai davvero bisogno.

  • Continui ad aggiungere frame_total a frames invece di frame.

  • Si tenta di trovare la somma di un elenco di elenchi anziché tutti i numeri all'interno di ciascun elenco.

Il tuo programma aggiornato:

frame_total = []

while len(frames) < 2:
ball_one = int(raw_input("Enter the score of ball one: "))
ball_two = int(raw_input("Enter the score of ball two: "))

frame_total.append([ball_one, ball_two])

print(frame_total)
print(sum(sum(sub) for sub in frame_total))

Se non ti piacciono le espressioni del generatore:

frame_total = []
total = 0

while len(frames) < 2:
ball_one = int(raw_input("Enter the score of ball one: "))
ball_two = int(raw_input("Enter the score of ball two: "))

frame_total.append([ball_one, ball_two])
total += ball_one + ball_two

print(frame_total)
print(total)

0 per risposta № 3

Dalla documentazione

sum (iterable [, start])

Le somme iniziano e gli elementi di un iterabile da da sinistra a destra e restituisce il totale. avvia i valori predefiniti a 0. Il gli elementi di iterable sono normalmente numeri e il valore iniziale no permesso di essere una stringa.

Stai chiamando sum con un elenco di elenchi. E poiché non hai fornito start, è zero per impostazione predefinita. Quindi in pratica cerca di aggiungere un int e un elenco.

Prova a correre 0 + [1,2,3] e capirai qual è il tuo errore.


0 per risposta № 4

Il tuo frame_total ha un elemento, ed è [ball_one, ball_two]. Quando lo aggiungi frame_total a frames, frames ora ha un elemento ed è ancora [ball_one, ball_two]. Quando sommi (frame) genererà a TypeError perché frames l'elemento è a list non un int.


0 per risposta № 5

Modificalo come segue:

frames = []
frame_total = []
total = 0

while len(frames) < 2:
ball_one = int(input("Enter the score of ball one: "))
ball_two = int(input("Enter the score of ball two: "))


frame_total.append(ball_one)
frame_total.append(ball_two)
b = 0
for frame in frame_total:
frames.append(frame_total)
b = b + frame
print(frame_total)
print(b)