IN1000 Repetisjonskurs: IO og listeoperasjoner (+ string) IO Hva mener vi med IO? Input/output Kommunikasjon mellom bruker og datamaskin Programmer kan få flere oppgaver avhengig av hva vi putter inn Utskrift til terminal print("hei!") s1 = "Det bor en baker i Oestre Aker" print (s1 + " hei") # Ikke lov: # print (s1 + 2) print (s1, 2) s2 = "Han baker boller og pepperkaker" print (s1, "\n", s2) #Linjeskift Input fra bruker Input av strenger mintekst = input("skriv noe pent! ") print("du skrev:", mintekst) Nyttig sammen med løkker mintekst = "" while mintekst!= "slutt": mintekst = input("skriv noe pent! ") print("du skrev:", mintekst) Konvertering av input til andre typer inn = int(input("skriv et tall! "))
sum = 0 while int(inn)!= 0: inn = input("skriv et tall! ") sum += int(inn) print("summen av tallene er:", sum) Tips: Du kan bruke.isdigit() eller for å sjekke at strengen faktisk kan konverteres ( NB. kun for positive tall ). Lese fra fil Det finnes flere måter å gjøre det på, men vi bruker open( filename, r ) minfil = open("igamledager.txt", "r") linje = minfil.readline() while linje!= "": print(linje, end="") # end="" for å unngå linjeskift linje = minfil.readline() minfil.close() Tips: strip() for å fjerne linjeskiftet fra hver linje Skrive til fil Enkelt eksempel: minfil = open("nyfil.txt", "w") minfil.write("nytt innhold i min fil!") minfil.close() Med løkke: for i in range (10): minfil.write("linje" + str(i) + "\n") Kombinasjoner av IO-funksjonalitet Manipulere programflyt direkte
La bruker velge hvor vi skal hente en fil Redigere og lagre filer Eksempler: Kalkulator, teksteditor, videospill, Game of Life-seed Mengder (lister og ordbøker) Lar oss holde styr på store datamengder Kan inneholde hva som helst Liste: liste = [] navn = ["Ina", "Are", "Josef", "Anne", "Pablo"] tall = [20.5, 30.11, 10.3, 19.9, 11.32] b1 = Bil("EK3232") b2 = Bil("MINBIL") biler = [b1, b2, Bil("AZ1234")] Som regel ryddigst om listen inneholder samme type ting (kun strenger, kun tall ) Listeoperasjoner: # Legge til i liste tall.append(30.2) # Legger til paa slutten av lista navn.insert("ole", 2) # Legger til paa spesifikk indeks # Henter element fra indeks ting = liste[0] print (liste[2]) # Fjerne fra liste navn.remove("pablo") # Fjerner foerste matchende element del tall[0] # Fjerner element paa gitt indeks # Sjekke lengde print(len(navn)) enbil = biler.pop(2) # Fjerner og returnerer element paa gitt indeks # Sjekke om en streng eller et tall finnes i en liste if "Ole" in navn: print("ole ligger i lista.")
Nøstede lister: l1 = ["Anne", "Berit", "Elise"] l2 = [32, 41] l3 = ["blaalys", "solkrem", "tusj", "skrivebord"] noestetliste = [l1, l2, l3] print(noestetliste[2][1]) # Skriver ut "solkrem" Nøstede lister ved hjelp av for-løkker: rutenett = [] for i in range(10): liste = [] for j in range(10): liste.append("*") rutenett.append(liste) Skrive ut nøstede lister: for i in range(len(rutenett)): for j in range (len(rutenett[i])): print(rutenett[i][j], end="") print() Ordbok: ordbok = {} adresse = {"gatenavn": "Bygata", "gatenr": 83, "postnummer": "0120"} Har en nøkkelverdi og en innholdsverdi Alle nøkler er unike, innholdet trenger ikke å være det. Ordbok-operasjoner: # Legge til eller oppdatere verdi adresse["gatenavn"] = "Nygata"
# Finne verdier etgatenummer = adresse["gatenummer"] print(adresse["gatenavn"] + " " + adresse["gatenr"]) # Fjerne verdier del adresse["postnummer"] # Fjerner element paa gitt noekkel adresse.pop("gatenavn") # Fjerner og returnerer element Strenger kan i mange tilfeller behandles som lister: streng = "En gammel mann gikk av sted" print(streng[3]) # Skriver ut "g" # Skriver ut alle bokstavene paa hver sin linje for i in range (len(streng)): print(streng[i]) # Skriver ut "En gammel mann" print(streng[0:14]) # Skriver ut "gammel mann gikk av sted" print(streng[3:]) Et større eksempel # Leser inn en ordbok av utgifter, og lar navn paa utgift vaere noekkel def lesfrafil (filnavn): f = open(filnavn, "r") ordbok = {} linje = f.readline() while linje!= "": delt = linje.split(" ") ordbok[delt[0]] = int(delt[1]) linje = f.readline() f.close() return ordbok def skrivtilfil (liste, filnavn):
f = open(filnavn, "w") for e in liste: f.write(e) f.close() def main(): filnavn = input("hvor skal utgiftene hentes fra? ") utgifter = lesfrafil(filnavn) # Lager en liste oversikt som skal inneholde en formatert beregning # av utgifter oversikt = ["Totale utgifter:\n"] sum = 0 for e in utgifter: oversikt.append("%-15s %d" % (e, utgifter[e]) + "\n") sum += utgifter[e] oversikt.append("================================\n") oversikt.append("%-15s %d" % ("Sum:", sum)) skrivtilfil(oversikt, "beregnedeutgifter.txt") main()