Föreläsning 5 Python: argument från kommando-tolken Datalogi för E1 2005-11-14 Föreläsning 5 Python: argument från kommando-tolken , inläsning av fil, listor och + operatorn, linjärsökning, binärsökning KTH, Nada, Vahid Mosavat
Datalogi för E1 2005-11-14 reload() reload() är en inbyggd funktion som används till att uppdatera en funktion som har importerats tidigare: import mymath … reload(mymath) reload funkar inte med importering i följande form: from mymath import * KTH, Nada, Vahid Mosavat
Datalogi för E1 2005-11-14 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 KTH, Nada, Vahid Mosavat
Exempel fil = open(”namnlista.txt”) namnlista = fil.readlines() Datalogi för E1 2005-11-14 Exempel fil = open(”namnlista.txt”) namnlista = fil.readlines() KTH, Nada, Vahid Mosavat
Exempel fil = open(”namnlista.txt”) namn = fil.readline() Datalogi för E1 2005-11-14 Exempel fil = open(”namnlista.txt”) namn = fil.readline() namnlista = [] while namn!=”” : namnlista = namnlista + [namn] KTH, Nada, Vahid Mosavat
Argument från kommando-tolken Datalogi för E1 2005-11-14 Argument från kommando-tolken Man kan få in strängar från kommando-tolken på terminalen in till programmet genom att använda fördefinierade listan sys.argv. datorn~> python prg.py arg1 arg2… KTH, Nada, Vahid Mosavat
Exempel # -*- coding: latin-1 -*- # -*- coding: latin-1 -*- import sys Datalogi för E1 2005-11-14 Exempel # -*- coding: latin-1 -*- import sys print ”du startade det här programmet med”,\ len(sys.argv)-1 ,”argumenter” # -*- coding: latin-1 -*- import sys print ”följande är en lista av argumenter:” for arg in sys.argv: print arg KTH, Nada, Vahid Mosavat
Datalogi för E1 2005-11-14 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 KTH, Nada, Vahid Mosavat
Datalogi för E1 2005-11-14 Binärsökning Om man har en sorterad lista kan man använda binärsökning som är snabbare än linjärsökning istället: Binär sökning går på det viset att man börjar söka från mitten av listan. Om den man söker är mindre än elementet i mitten då ska man söka i vänstra delen av listan, annars ska man söka i högra delen av listan. KTH, Nada, Vahid Mosavat
Datalogi för E1 2005-11-14 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] KTH, Nada, Vahid Mosavat
Datalogi för E1 2005-11-14 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 KTH, Nada, Vahid Mosavat
Datalogi för E1 2005-11-14 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. KTH, Nada, Vahid Mosavat