Föreläsning 5 Python: argument från kommando-tolken , inläsning av fil, listor och + operatorn, linjärsökning, binärsökning 1 Läsa och skriva på fil Man kan hämta indata från fil eller skriva utdata på en fil, detta är möjligt med funktionerna: open(”fil.txt”) öppnar fil.txt för läsning open(”fil.txt”,”w”) öppnar filen fil.txt för skrivning open(”fil.txt”,”a”) öppnar filen fil.txt för att lägga till. readline() läser en rad och returnerar raden som en sträng readlines() läser alla rader och returnerar en lista som varje element i listan är en rad från filen. write(”en sträng”) skriver texten ”en sträng” på filen 2 Exempel fil = open(”namnlista.txt”) namnlista = fil.readlines() 3 Exempel fil = open(”namnlista.txt”) namn = fil.readline() namnlista = [] while namn!=”” : namnlista.append(namn) namn = fil.readline() 4 Argument från kommando-tolken Man kan få in strängar från kommandotolken på terminalen in till programmet genom att använda fördefinierade listan sys.argv. datorn~> python prg.py arg1 arg2… 5 Exempel # -*- coding: latin-1 -*import sys print ”du startade det här programmet med”,\ len(sys.argv)-1 ,”argument(er)” # -*- coding: latin-1 -*import sys print ”följande är en lista av argumenter:” for element in sys.argv: print element 6 Datalogi • Datalogi är läran om behandling av data. • För att behandla en mängd data måste man göra val av datastrukturer och algoritm. Beroende på vilken algoritm och datastruktur man väljer påverkas effektivitet av programmet. • För att kunna mäta effektivitet hos ett program använder man måtten tidskomplexitet och rumskomplexitet. 7 Grundläggande datalogi • Algoritmet – Rekursion, – Sökning: linjär sökning, binärsökning, breddenförstsökning, djupetförstsökning, bästaförstsökning – Sortering: urvalssortering, bubbelsortering, Insättningssortering, damerna först sortering, kvicksortering(quicksort), samsortering (mergesort) • Datastruktur: Lista, kö, stack, länkade listor, binära träd, allmänna träd, hashtabeller, prioritetskö, allmänträd, Trappor 8 Linjärsökning Linjärsökning : Linjärsökning eller sekventiell sökning kallas när man söker element för element från första elementet i listan. soktal = 8 lista = [1,3,6,4,2,7,9,8,0] for element in lista : if element == soktal : print soktal,”finns i listan” break 9 Binärsökning Om man har en sorterad lista kan man använda binärsökning som är snabbare än linjärsökning: Binär sökning går på det viset att man börjar söka från mitten av den sorterade listan. Om det man söker är mindre än elementet i mitten då ska man söka i vänstra delen av listan, annars om det är större ska man söka i högra delen av listan. 10 Exempel Skriv ett program som med hjälp av binärsökning hittar index för talet 8 i listan nedan, ditt program ska fungera med vilken lista som helst bara listan är sorterad och innehåller tal. lista = [1,3,4,6,7,8,18,100] 11 Exempel Vi har en fil i varannan rad står ett namn och i raden efter namnet står skonummer för alla personer, skriv ett program som skriver namn för alla som har skonummer 43. Observera filen är inte sorterad 12 Exempel Skriv ett program som läser alla namn till en lista och skriver ut alla namn som börjar med ’j’ och har ett ’a’ i namnet. 13