Help su programma

di il
7 risposte

Help su programma

Salve a tutti, 

grazie per avermi accettato.

Ho un problema con un programma in python e non riesco a capire dove sta l'errore

Il programma in questione è il seguente:

---------------------------------------------------------------------

import time
import random

Cartoons = ['Looney Tunes','Spongebob','Dragonball','Masha e orso','Thunderman','Danger Force','Pan Barbiere','Winnie The Pooh','Tom e Jerry','La Pimpa']
print('*' * 10, 'ChatBot', '*' * 10)
time.sleep(1)
name = input("Ciao! come ti chiami? ??")
time.sleep(1)
while True:
   print(name, ' Quale comando scegli? ')
   print('Mostrare la lista', 'Rimuovere dalla lista', 'Aggiungere alla lista', 'Mostrare un elemento casuale')
   command = input('')
   if command == 'Mostrare la lista':
       for i in Cartoons:
         print(i)
   elif command  ==  'Aggiungere alla lista':
      for i in Cartoons:
          print(i)
      aggiungere =input("Cosa vuoi aggiungere alla lista?")
      Cartoons.append(aggiungere)
      for i in Cartoons:
          print(i)
   elif command == 'Rimuovere dalla lista':
      for i in Cartoons:
         print(i)
         rimuovi =input("Cosa vuoi rimuovere dalla lista?")
         if rimuovi not in Cartoons:
             rimuovi =input("Cosa vuoi rimuovere dalla lista?")
         elif rimuovi in Cartoons:
              Cartoons.remove(rimuovi)
              print(i)
   elif command ==  'Mostrare un elemento casuale':
      print(random.choice(Cartoons))
   else:
      print("Non è nella lista...")
________________________________________________________________________

Funziona tutto a parte che ho evidenziato in grassetto: quando si chiede di Rimuovere dalla lista, mostra solo il primo degli oggetti e se si indica un oggetto presente nella lista. Qualcuno sa dirmi dove è l'errore?

Grazie mille.

A.

7 Risposte

  • Re: Help su programma

    11/02/2026 - Accipiter ha scritto:

    quando si chiede di Rimuovere dalla lista, mostra solo il primo degli oggetti

    È un problema di indentazione. Quando entri nel for, stampi l'i-esimo elemento e poi aspetti l'input.

    Devi togliere 4 spazi a sinistra dall'input in poi, per tutta la parte in grassetto.

    Per il futuro, usa il tag apposito per il codice, soprattutto per il Python vista l'estrema importanza che ha appunto l'indentazione.

  • Re: Help su programma

    Grazie innanzitutto per la risposta.

    Se tolgo i 4 spazi a sinistra dell'input per tutta la parte in grassetto, effettivamente mi stampa tutta la lista, ma quando digito un nome da togliere dalla lista, invece di ristampare la lista senza il nome digitato, mi stampa solo il nome digitato.

    A.

  • Re: Help su programma

    Grazie innanzitutto per la risposta.

    Se tolgo i 4 spazi a sinistra dell'input per tutta la parte in grassetto, effettivamente mi stampa tutta la lista, ma quando digito un nome da togliere dalla lista, invece di ristampare la lista senza il nome digitato, mi stampa solo il nome digitato.

    A.

  • Re: Help su programma

    12/02/2026 - Accipiter ha scritto:

    invece di ristampare la lista senza il nome digitato, mi stampa solo il nome digitato

    Perché è quel che gli hai scritto di fare. Devi correggere l'algoritmo, affinando il ragionamento: quel che immagino tu voglia fare è:

    1. Stampare la lista;
    2. Richiedere l'input all'utente;
    3. verificare che l'input sia corretto (ossia presente nella lista).
    4. se è corretto, elimina ed "esci";
    5. se non è corretto torna al punto 2.

    Quindi ti serve un ciclo che continui potenzialmente all'infinito ed un for in questo caso non va bene dato che è pensato per essere eseguito al massimo un predeterminato numero di volte.

    Devi "ricliclare" l'idea del while principale e riadattarla per questo caso specifico.

  • Re: Help su programma

    Quello che non capisco è perché non mi ristampa la lista senza il nome digitato.

    elif rimuovi in Cartoons:
                  Cartoons.remove(rimuovi)
                  print(i)

    Dovrebbe togliere il nome digitato dalla lista e stampare, o sbaglio?

    A

  • Re: Help su programma

    12/02/2026 - Accipiter ha scritto:

    Dovrebbe togliere il nome digitato dalla lista e stampare, o sbaglio?

    Purtroppo, la seconda. :)

    Rimuove certamente l'elemento, ma poi ristampa l'elemento stesso. L'elemento viene solo rimosso, ma non deallocato, quindi continua ad esistere e può ancora essere "manipolato". Per ristampare l'intera lista, devi di nuovo passare per il ciclo.

    Diciamo che, vista la quantità di volte che stampi a video la lista, non sarebbe male se tu predisponessi una funzione apposita da richiamare alla bisogna. Oltre a manutenere meglio il codice più avanti nello sviluppo, ti semplifica la stesura perché ogni volta che vuoi la lista, ti basterà richiamare l'apposita funzione e non ogni volta copiaicollare/riscrivere il codice necessario.

  • Re: Help su programma

    12/02/2026 - Sgrubak ha scritto:

    12/02/2026 - Accipiter ha scritto:

    Dovrebbe togliere il nome digitato dalla lista e stampare, o sbaglio?

    Purtroppo, la seconda. :)

    Rimuove certamente l'elemento, ma poi ristampa l'elemento stesso. L'elemento viene solo rimosso, ma non deallocato, quindi continua ad esistere e può ancora essere "manipolato". Per ristampare l'intera lista, devi di nuovo passare per il ciclo.

    Diciamo che, vista la quantità di volte che stampi a video la lista, non sarebbe male se tu predisponessi una funzione apposita da richiamare alla bisogna. Oltre a manutenere meglio il codice più avanti nello sviluppo, ti semplifica la stesura perché ogni volta che vuoi la lista, ti basterà richiamare l'apposita funzione e non ogni volta copiaicollare/riscrivere il codice necessario.

    Ti ringrazio, con il tuo aiuto ho risolto.

    A.

Devi accedere o registrarti per scrivere nel forum
7 risposte