Forum >> Principianti >> ripulire lo script

Pagina: 1

Dunque ragazzi io ho fatto un programma:

#Dati dei piloti
bottas=[77,"28/08/1989","Finlandia","Australia 2013",98,3,4,0]
hamilton=[44,"07/01/1985","Inghilterra","Australia 2007",208,62,74,"4(2008-2014-2015-2017)"]
raikkonen=[7,"17/10/1979","Finlandia","Australia 2001",273,20,17,"1(2007)"]
vettel=[5,"03/07/1987","Germania","Stati Uniti 2007",198,47,50,"4(2010-2011-2012-2013)"]
verstappen=[38,"38,""30/07/1997","Belgio","Australia 2015",60,3,0,0]
ricciardo=[3,"01/07/1989","Australia","Gran Bretagna 2011",129,5,1,0]
alonso=[14,"29/07/1981","Spagna","Australia 2001",293,32,22,"2(2005-2006)"]
def pilota(dato):
    etichetta=["Numero di gara:","Data di nascita:","nazione:","Esordio:","Presenze:","Vittorie:","Pole position:","Titoli iridati:"]
    print(" "*20,"*"*50)
    indice=0
    while indice<8:
        print(" "*25,"*",etichetta[indice],dato[indice])
        indice+=1
    print(" "*20,"*"*50)
    print("\n"*10)        
name="null"
while name=="null":
    print("PILOTI FORMULA 1 2018")
    print("Schede dei piloti del campionato mondiale di Formula 1")
    print(" ")
    name=input("Pilota del qule vuoi le informazioni: ")
    name=name.lower()
    if name=="bottas":
        pilota(bottas)
        name="null"
    elif name=="hamilton":
        pilota(hamilton)
        name="null"
    elif name=="raokkonen":
        pilota(raikkonen)
        name="null"
    elif name=="vettel":
        pilota(vettel)
        name="null"
    elif name=="verstappen":
        pilota(verstappen)
        name="null"
    elif name=="ricciardo":
        pilota(ricciardo)
        name="null"
    elif name=="alonso":
        pilota(alonso)
        name="null"
    elif name=="quit":
        print(" "*20,"*"*50)
        print(" "*30,"E' staot un piacere. A presto!")
        print(" "*22,"====================FINISH====================")
        print(" "*20,"*"*50)
        print("\n"*10)
    else:
        name="null"

ps. dove c'è scrito indice(in rosso) ci andrebbero le parentesi quadre, non so perchè me lo fa in quel modo
io vorrei che ogni volta che inserisco un nuovo pilota per vdere le informazioni a riguardo, la lista precedente mi sparisse.

E' vero che potrei far scorrere di parecchie righe, ma così non mi piace. C'è un modo più professionale per fare questo??




Grazie anticipatamente.


--- Ultima modifica di fen1c5 in data 2018-10-15 16:30:36 ---
Prima di tutto, fai un passo indietro e formatta il codice in maniera corretta.

1. Quando inserisci il codice, usa il tasto apposito che trovi vicino alla tavolozza dei colori



2. Per le parentesi quadre, metti una \ prima della parte interessata, vedrai che riuscirai a farla visualizzare correttamente.

3. Dai un'occhiata alla PEP8 prima di ogni altra cosa.

Fatto questo torna e ripeti la domanda.

Cya

dovrei aver fatto correttamente, anche se non ho afferrato bene cosa intendevi con \ prima delle parentesi quadre :)


--- Ultima modifica di fen1c5 in data 2018-10-15 16:31:03 ---
Il problema qui è in sostanza che non hai capito che cosa è una variabile e come funziona. Una variabile è solo un segnaposto per un oggetto (un riferimento, un puntatore... chiamalo come vuoi anche se ci sono nomi più precisi di altri). E' l'oggetto che contiene le informazioni, non la variabile. Una variabile non *può* contenere informazioni aggiuntive rispetto all'oggetto, perché semplicemente queste informazioni non sarebbero accessibili a Python. Naturalmente è comodo dare alla variabile un nome "significativo", ma il nome significativo è solo un promemoria per il programmatore, non è rilevante per Python. Quindi, se ci sono informazioni che non stanno nell'oggetto, non ci sono e basta. Il nome della variabile non c'entra nulla.


Siccome tu non metti un'informazione essenziale (il nome del pilota) negli oggetti, il fatto che tu "sai" qual è il pilota guardando il nome della variabile non conta nulla perché non puoi dare questa informazione a Python, e quindi in sostanza non ci puoi fare nulla di utile. In pratica non esiste un modo in cui tu puoi *ricavare* il nome di un pilota, perché il nome non fa parte delle informazioni contenute dentro gli oggetti.


Tutto il resto del tuo script (che contiene beninteso molti altri problemi separati) frana completamente come conseguenza del fatto che non hai capito come si usano le variabili. Per esempio, il fatto di dover scrivere compulsivamente "if name=='bottas': pilota(bottas)" etc. etc. per mille volte (che suppongo sia quello che speravi che ti avremmo consigliato come aggiustare) è una diretta conseguenza di questo problema. Se trovi il modo di capire bene come devono essere fatti i tuoi oggetti, e se capisci che cosa è una variabile e come si usa, vedi che trovi anche subito il modo di evitare quell'elenco infinito di "if".


Oppure, se vuoi una cosa ancora più semplice: prova a completare questa banale funzione che restituisce il nome del pilota (eh, già) a partire dal suo numero di macchina:

def cerca_pilota(num_macchina):
    for pilota in (bottas, hamilton, vettel, .......):
        if pilota[0] == num_macchina:
            return IL-NOME-DEL-PILOTA # che cosa diavolo e' "il nome del pilota" adesso???
    return 'nessun pilota con quel numero di macchina'
Prova a costruire qualunque meccanismo che fa restituire il nome del pilota a quella funzione. Vedrai che non ci riesci, perché in definitiva Python non conosce i nomi dei piloti. L'unica cosa che puoi fare sarebbe... fare tu stesso il lavoro che dovrebbe fare Python:

def cerca_pilota(num_macchina):
    if num_macchina == 77: # il numero di "bottas" (ma python non lo sa)
        return 'bottas'
    elif num_macchina == 44: # questo e' "hamilton", e NOI lo sappiamo!
        return 'hamilton'
    elif ......
        .......
    else:
        return 'nessun pilota con quel numero di macchina'
Ma capisci che così non ha senso programmare, non ha senso neppure avere un computer. Il lavoro lo stai facendo tu.






--- Ultima modifica di RicPol in data 2018-10-15 17:28:21 ---
A dire il vero io ho seguito la spiegazione di un "potenziale" insegnante su youtube il quale ha eseguito in linea di massima quel programma(cambiava solo alcune informazioni dei piloti).
Quindi devodedurre che quel tipo che spiegava non sia un vero inegnante visto che di fatto il programma è il suo. Questo haimè non fa altro che incasinarmi durante l'apprendimento del linguaggio.
ps. lui segue una guidacontenuta in questo sito: https://www.python.it/doc/newbie/

Ad ogni modo, se ho ben capito questo programma non ha senso scriverlo per i motivi da te elencati.





--- Ultima modifica di fen1c5 in data 2018-10-15 18:23:27 ---
Non ha senso scriverlo così, certo. Non ha neanche senso seguire qualcuno su YT che peraltro segue una guida elencata qui (che poi sarà il solito terribile pensare da informatico, ovviamente). Tanto vale seguire direttamente la guida, no? Ma in realtà tanto vale prendersi un buon libro e seguirlo con calma, passo passo.
Infatti mi sa proprio che hai ragione anche perché su youtube girano tanti pseudo insegnanti....

Un'ultima cosa, quale libro riguardante il python mi consigliereste??



--- Ultima modifica di fen1c5 in data 2018-10-16 09:52:17 ---
Ma io non capisco proprio perché uno dovrebbe cercare su YT per cominciare... voglio dire, YT è notoriamente la cloaca della qualità su internet... boh.


Comunque se """""l'insegnante""""" che hai trovato scrive davvero codice del genere, forse potresti lasciare un commento linkando a questo thread... è una goccia nell'oceano ma tanto vale...

Per quanto riguarda libri, boh, in Italiano ovvio che non c'è molto. Ma probabilmente il migliore resta il Lutz https://learning-python.com/index-book-links.html#pubs e i suoi sono stati tradotti ("Imparare python" mi sembra che sia il titolo italiano; invece "programmare python" è più avanzato e non conviene all'inizio).




Ok!!





Pagina: 1



Esegui il login per scrivere una risposta.