Topic: rubrica con python  (Letto 144 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Bronx03

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
rubrica con python
« il: Aprile 30, 2020, 10:37 »
Salve, sono nuovo nella programmazione. vorrei creare un semplice programma che mi crea un file di testo su cui scrivere una rubirca. ho inserito 5 opzioni: crea,visualizza,aggiungi,ricerca e cancella. Per le prime tre opzioni sono riuscito a creare un programma che fa ciò che deve fare, però quando arrivo alla ricerca mi blocco. Volevo chiedervi; Come posso cercare il nome nel file, la riga in cui si trova il nome e stampare nome e numero (nome e numero stanno sulla stessa riga)? Non so come procedere, qualcuno a qualche idea? Ogni risposta è ben accetta. Grazie

Qui vi lascio il codice:

archivio="rubrica.txt"

import re


def presenta_menu():
   
    print("************************************")
    print("1. crea la rubrica")
    print("2. aggiungi un nome")
    print("3. vizualizza la rubrica")
    print("4. stampa la rubrica")
    print("5. cerca in rubrica")
    print("6. chiudi il programma")
    print("************************************")
    righe=0
    nomef=open(archivio,"r")
    for riga in nomef.readlines():
        righe = righe + 1
    nomef.close
    print(righe)
   
def scegli():
    risposta=int(input("scegli: "))
    while risposta>6 or risposta<1:
        print("scegli tra 1 e 6")
        risposta=int(input())
    return risposta

def crea():
    nomef=open(archivio,"w")
    nomef.close()

def aggiungi():
   
    nomef=open(archivio,"a")
    nomef.write(input("nome: "))
    x=int(input("numero: "))
    nomef.write("        ")
    nomef.write(str(x))
    nomef.write(";")
    nomef.write("\n")
    nomef.close
   
def ricerca():   
    try:
        nomef = open(archivio,"r")
        name=input("nome: ")
        rig=0
        if re.search(name,nomef.read()):
            while name in nomef.read():
                rig=rig+1
            print(nomef.readlines(rig))
        else:
            print("non è presente")
        nomef.close
    except FileNotFoundError:
        print("crea prima la rubrica")     


def visualizza():
    try:
        nomef=open(archivio,"r")
        print(nomef.read())
       
    except FileNotFoundError:
        print("crea prima la rubrica")

def stampa():
    try:
        nomef=open(archivio,"r")
        s=input("nome: ")
       
        if re.search(s,dat):
                print(dat)
        else:
            print("non è presente")
    except FileNotFoundError:
        print("crea prima la rubrica")

def main():
    listcontt=[]
    tot=0
    presenta_menu()
    scelta=scegli()
    while scelta!=6:
        if scelta==1:
            crea()
        elif scelta==2:
            aggiungi()
            tot+=1
            listcontt.append(tot)
            print(listcontt)
        elif scelta==3:
            visualizza()
        elif scelta==4:
            stampa()
        elif scelta==5:
            ricerca()
        presenta_menu()
        scelta=scegli()
    print("terminato")



main()



Aspetto risposta ;) :)

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 258
  • Punti reputazione: 0
    • Mostra profilo
Re:rubrica con python
« Risposta #1 il: Aprile 30, 2020, 16:05 »
Allora, @Bronx03, è evidente che sei proprio agli inizi e credo proprio che se Ti indicassi come far funzionare il Tuo codice NON Ti farei un favore, cercherò di dare qualche indicazione di risposta alle Tue domande, in ordine di importanza.

1° : Come posso cercare il nome nel file

In vari modi, ad esempio utilizzando il modulo "os" ed in particolare "os.path.exists()"
Molto dipenderà da come fornisci il pathname del file (se assoluto o relativo) a da "dove" lancerai lo script.

In particolare, dici "sono riuscito a creare un programma che fa ciò che deve fare" ... ne sei sicuro? Se il file "rubrica.txt" non esistesse il Tuo programma funzionerebbe?
Valuta bene ciò che fai, la verifica dell'esistenza del file dovrebbe precedere ogni tentativo di lettura/scrittura sullo stesso e poi, perché mai un processo che deve mostrare un menu dovrebbe anche aprire un file?

2° :  però quando arrivo alla ricerca mi blocco

Detto da uno che utilizza le espressioni regolari (import re), lascia un pochino perplessi ... sarà che abbiamo copicchiato qualcosa? ;)
Intendiamoci, prendere esempi da codice altrui è normale ma è indispensabile prima capire cosa fa il codice letto (e come si utilizza) poi utilizzare i concetti acquisiti per scrive codice idoneo ai propri fini.

Per l'argomento una domanda : Ti sei studiato le liste?
Poi una possibile indicazione : "nomef.readlines()" Ti restituisce una lista di stringhe.
Non è poi necessario utilizzare una regex per verificare se una stringa è contenuta in un'altra, potrebbe bastare un "in".

detto questo, le funzioni ... lo sai che possono ricevere dei parametri e restituire degli "oggetti"?
Potrebbero anche evitarti di utilizzare variabili "globali" (da sempre una bruttissima idea)
Non necessariamente devi aprire il file ogni volta che effettui una qualsiasi manipolazione, se non sono "enormi" potresti caricarti i dati in memoria e manipolare/inserire in quella sede, scrivendoli su file quando salvi o prima di uscire.

in ultimo, cercati il costrutto "if __name__ == '__main__':" e comprendilo, servirà.
« Ultima modifica: Aprile 30, 2020, 16:08 da nuzzopippo »

Offline Bronx03

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Re:rubrica con python
« Risposta #2 il: Maggio 04, 2020, 09:20 »
Grazie mille. Mi scuso ma non sapevo dove sbattere la testa così ogni cosa che passava in convento lo buttavo dentro al programma :). Ti ringrazio molto per l'aiuto, adesso mi informerò meglio sulle cose che mi hai consigliato. ;)