• kth.se
  • Studentwebben
  • Intranät
  • kth.se
  • Studentwebben
  • Intranät
Logga in
DD1321 HT20 (50170)
p2
Hoppa över till innehåll
Översikt
  • Logga in
  • Översikt
  • Kalender
  • Inkorg
  • Historik
  • Hjälp
Stäng
  • Min översikt
  • DD1321 HT20 (50170)
  • Uppgifter
  • p2
  • Startsida
  • Uppgifter
  • Sidor
  • Filer
  • Kursöversikt
  • Quiz
  • Moduler
  • Samarbeten
  • Video Recording
  • Media Gallery
  • Course Evaluation

p2

  • Inlämningsdatum 31 mar 2021 av 23.59
  • Poäng 1
  • Lämnar in en filuppladdning
  • Filtyper py, txt, md och pdf

Table of Contents

  • 1. Förberedelser
    • 1.1. ssh
    • 1.2. scp
    • 1.3. Alternativ till scp
    • 1.4. curl
    • 1.5. Testa pythonkod interaktivt
  • 2. Programmeringsuppgift
    • 2.1. Stora och små bokstäver
    • 2.2. Lista med en stor bokstav
    • 2.3. Lista med två stora bokstäver
    • 2.4. Lista med en inskjuten siffra eller specialtecken
    • 2.5. Kombinera metoderna
    • 2.6. Komplexitetsundersökning
    • 2.7. Lösenord på fil
    • 2.8. Kommandoradsargument

1 Förberedelser

 

1.1 ssh

Under kursen kan det vara så att vissa uppgifter, av olika oförutsedda anledningar, inte fungerar på din egen dator utan bara på skolans datorer. Det går att köra program på skolans datorer via terminal med programmet ssh

Öppna en terminal (hemma eller i datasalarna) och skriv in följande (byt ut KTHLOGIN mot ditt användarnamn)

> ssh KTHLOGIN@student-shell.sys.kth.se

Första gången du kör ssh mot en ny dator så kan det komma upp en fråga om du litar på ip-adressen Links to an external site. som student-shell.sys.kth.se har. Svara yes på denna fråga och fortsätt logga in med ditt kth-login.

Verifiera att du är på skolans dator med kommandot uname -n. Då borde du få en utskrift liknande denna

> uname -n
share-02.csc.kth.se

Öppna ytterligare en terminal på din dator och positionera de båda terminalerna bredvid varandra

Logga in på student-shell även i denna terminal, om du vill kan du använda följande alternativa syntax för att logga in

> ssh -l KTHLOGIN student-shell.sys.kth.se

Skapa/öppna en fil i terminalen med editeringsprogrammet nano (se p1) genom att i terminalen skriva

> nano dumt.py

Det kommer att se ut ungefär så här:

nano1.png

Skriv in print("dumt") i nano och tryck på <enter>

nano2.png

Spara filen genom att trycka Ctrl ctrl2.png och o (det är vad menas med ^O i nederkantens hjälptext)

nano3.pngnano3.png

Kör programmet i den andra terminalen genom att skriva

> python3 dumt.py

Lägg till en till utskrift (print-sats) i programmet, spara och kör. På det här sättet kan du arbeta på skolans dator hemifrån.

1.2 scp

Avsluta editeringsprgrammet nano genom att trycka ctrl x Avsluta därefter ssh-sessionen i denna terminal genom att i terminalen trycka ctrl d

Du bör, om du gjort enligt instruktionerna, ha två terminaler sida vid sida där den ena är inloggad på skolans serverdator. Skriv uname -n i bägge terminalerna för att verifiera.

> uname -n

Kopiera dumt.py till din lokala dator med kommandot scp genom att i den lokala terminalen skriva

> scp KTHLOGIN@student-shell.sys.kth.se:dumt.py .

Kör därefter programmet på din lokala dator i samma terminal.

Det går att kopiera från din lokala dator till skolans dator med scp. Ändra en av printsatserna lokalt på din dator med din favoriteditor. Spara filen och kopiera därefter med scp

> scp dumt.py KTHLOGIN@student-shell.sys.kth.se:

Prova därefter att köra programmet i terminalen som är inloggad på skolans server

1.3 Alternativ till scp

Det finns grafiska gränssnitt till scp så att man kan dra och släppa filer. På windows maskiner finns programmet WinSCP som man dessutom kan ställa in att automatiskt kopiera över en fil om den ändras lokalt. På det sättet kan man jobba med sin favoriteditor lokalt och köra filen i en terminal på skolans server. Till Mac OS X finns programmet Cyberduck som även kan jobba mot molntjänster som google cloud.

1.4 curl

I programmeringsuppgiften som följer ska du hämta en fil med vanliga lösenord. Det kan du göra med curl på följande vis:

> curl http://www.csc.kth.se/utbildning/kth/kurser/DD1321/19/p2_passwords.txt > p2_passwords.txt

I efterföljande labbar kan filerna man ska hämta vara väldigt stora och då är det bättre att ladda ner dem med curl

1.5 Testa pythonkod interaktivt

I den här labben kommer du att jobba bl.a. med strängmanipulering Links to an external site., [[https://docs.python.org/3/library/stdtypes.html#typesmapping Links to an external site.][dictionaries] och listor Links to an external site..

Du förväntas läsa dokumentation om olika pythonanrop på nätet men ibland är det tillfredställande att prova sig fram interaktivt hur python fungerar. Starta en pythontolk i terminalen genom att skriva python3 och prova följande satser

> python3
>>> s1 = "hej\n"
>>> s2 = "   då "
>>> print(s1 + s2)
hej
   då
>>> print(s1.strip() + s2.strip())
hejdå
>>> s = "sommarlov"
>>> s[0] + s[1] + s[2]
'som'
>>> s[6:]
'lov'
>>> s[-3:]
'lov'
>>> s[:-3]
'sommar'
>>> v = []
>>> v.append( s[:-3] )
>>> v
['sommar']
>>> v.extend( ['vinter', 'höst'] )
>>> v
['sommar', 'vinter', 'höst']
>>> alfabeta = {'a':'A', 'b':'B'}
>>> alfabeta['a']
'A'
>>> if 'a' in alfabeta: print("a finns i", alfabeta)
... else: print("a finns INTE i", alfabeta)
...
a finns i {'b': 'B', 'a': 'A'}>>> s[0:2] + s[-1] + 'a'
'sova'
>>> "{}et {} var speciellt".format(s, 2019)
'sommarlovet 2019 var speciellt'
>>> exit()

avsluta genom att skriva exit() eller trycka ctrl d

2 Programmeringsuppgift

Du ska skriva ett program som försöker gissa lösenord. Syftet med labben är att lära sig loopar, villkor, strängmanipulering, filhantering och annat matnyttigt.

Programmet utgår från en lista med vanliga lösenord som, om du inte gjort det redan i förberedelseuppgifterna, kan hämtas här:

http://www.csc.kth.se/utbildning/kth/kurser/DD1321/19/p2_passwords.txt[p2_passwords.txt]]

Listan ska utökas med varianter på dessa lösenord med blandade stora och små bokstäver och siffror däremellan.

2.1 Stora och små bokstäver

Skriv en hjälpfunktion som tar en bokstav och returnerar stor bokstav (om det går, annars returneras parametern oförändrad). Python har inbyggda funktioner för detta men du ska använda en dictionary där du hårdkodar in alfabetets små och stora bokstäver (se förberedelseuppgiftens alfabeta).

2.2 Lista med en stor bokstav

Skriv en funktion som tar en sträng och returnerar en lista av ord där en av bokstäverna gjorts till stor bokstav. Funktionen ska använda den hjälpfunktion du skrev nyss.

v = storbokstav("admin") # returnerar ['Admin', 'aDmin', 'adMin', 'admIn', 'admiN']

2.3 Lista med två stora bokstäver

Skriv en funktion som tar en sträng och returnerar en lista av ord där alla kombinationspar av två bokstäver har gjorts till versal

v = tvåstora("admin") 
# returnerar ['ADmin', 'AdMin', 'AdmIn', 'AdmiN', 'aDMin', 'aDmIn', 'aDmiN', 'adMIn', 'adMiN', 'admIN']

2.4 Lista med en inskjuten siffra eller specialtecken

Skriv en funktion som givet en sträng skjuter in en siffra eller ett specialtecken ( + - * / ). De ska läggas in i början och slutet och mellan varje bokstav.

I exemplet nedan läggs bara '2', '3' och '+' in

v = skjutinspecial("och")
# returnerar ['2och', '3och', '+och', 'o2ch', 'o3ch', 'o+ch', 'oc2h', 'oc3h', 'oc+h', 'och2', 'och3', 'och+']

2.5 Kombinera metoderna

Skriv en funktion som kombinerar dina funktioner. För varje nytt ord där t.ex. en siffra blivit inkjuten ska du returnera alla varianter med en respektive två stora bokstäver.

För ordet fyra ska man få följande kombinationer (med '2', '3' och '+') som specialtecken

fyra
Fyra ,fYra ,fyRa ,fyrA ,
FYra ,FyRa ,FyrA ,fYRa ,fYrA ,fyRA ,
2fyra
2Fyra ,2fYra ,2fyRa ,2fyrA ,
2FYra ,2FyRa ,2FyrA ,2fYRa ,2fYrA ,2fyRA ,
3fyra
3Fyra ,3fYra ,3fyRa ,3fyrA ,
3FYra ,3FyRa ,3FyrA ,3fYRa ,3fYrA ,3fyRA ,
+fyra
+Fyra ,+fYra ,+fyRa ,+fyrA ,
+FYra ,+FyRa ,+FyrA ,+fYRa ,+fYrA ,+fyRA ,
f2yra
F2yra ,f2Yra ,f2yRa ,f2yrA ,
F2Yra ,F2yRa ,F2yrA ,f2YRa ,f2YrA ,f2yRA ,
f3yra
F3yra ,f3Yra ,f3yRa ,f3yrA ,
F3Yra ,F3yRa ,F3yrA ,f3YRa ,f3YrA ,f3yRA ,
f+yra
F+yra ,f+Yra ,f+yRa ,f+yrA ,
F+Yra ,F+yRa ,F+yrA ,f+YRa ,f+YrA ,f+yRA ,
fy2ra
Fy2ra ,fY2ra ,fy2Ra ,fy2rA ,
FY2ra ,Fy2Ra ,Fy2rA ,fY2Ra ,fY2rA ,fy2RA ,
fy3ra
Fy3ra ,fY3ra ,fy3Ra ,fy3rA ,
FY3ra ,Fy3Ra ,Fy3rA ,fY3Ra ,fY3rA ,fy3RA ,
fy+ra
Fy+ra ,fY+ra ,fy+Ra ,fy+rA ,
FY+ra ,Fy+Ra ,Fy+rA ,fY+Ra ,fY+rA ,fy+RA ,
fyr2a
Fyr2a ,fYr2a ,fyR2a ,fyr2A ,
FYr2a ,FyR2a ,Fyr2A ,fYR2a ,fYr2A ,fyR2A ,
fyr3a
Fyr3a ,fYr3a ,fyR3a ,fyr3A ,
FYr3a ,FyR3a ,Fyr3A ,fYR3a ,fYr3A ,fyR3A ,
fyr+a
Fyr+a ,fYr+a ,fyR+a ,fyr+A ,
FYr+a ,FyR+a ,Fyr+A ,fYR+a ,fYr+A ,fyR+A ,
fyra2
Fyra2 ,fYra2 ,fyRa2 ,fyrA2 ,
FYra2 ,FyRa2 ,FyrA2 ,fYRa2 ,fYrA2 ,fyRA2 ,
fyra3
Fyra3 ,fYra3 ,fyRa3 ,fyrA3 ,
FYra3 ,FyRa3 ,FyrA3 ,fYRa3 ,fYrA3 ,fyRA3 ,
fyra+
Fyra+ ,fYra+ ,fyRa+ ,fyrA+ ,
FYra+ ,FyRa+ ,FyrA+ ,fYRa+ ,fYrA+ ,fyRA+

Det är tillåtet att få dubletter i sin lista. Tips, för att undvika dubletter kan man, förutom att lägga in orden i listan, även lägga in orden i en dictionary och kontrollera mot den innan man ligger in ordet.

2.6 Komplexitetsundersökning

Gör mätningar för att se hur dels längden på ett ord, dels antal inkjutna specialtecken påverkar hur många ordkombinationer som genereras.

  • Skriv ner antal ordkombinationer (längden på listan) du får för olika långa ord.
  • Variera antal siffror/specialtecken som skjuts in i ett givet ord och räkna antal ordkombinationer

Vad drar du för slutsats av komplexiteten i respektive fall?

2.7 Lösenord på fil

Läs in lösenord att prova från fil (se funktionen get_file_content i labb p1). Eventuellt behöver du använda strip() för att ta bort radreturtecken som lästs in från filen.

För vart och ett av lösenorden, generera alla kombinationer och spara ner dem i en fil.

def save_file_content(filename, list_of_combinations):
    with open(filename, 'w') as f: 
        for item in list_of_combinations: 
            f.write("%s\n" % item)

Du kan jämföra den lista du får med denna lista på kursens server som innehåller de flesta kombinationerna.

2.8 Kommandoradsargument

Skriv ett nytt program som läser in filen med ordkombinationer som du genererat. Programmet ska ta ett kommandoradsargument och kontrollera om ordet finns i listan. Om ordet finns i listan ska programmet skriva ut att ordet är olämpligt som password, i annat fall ska programmet inte skriva ut något alls.

Du behöver importera paketet sys. Kommandoradsargument hamnar i listan sys.argv. Prova koden nedan och skriv ut sys.argv

import sys
if len( sys.argv ) > 1:
    word_to_test = sys.argv[1]
else:
    print("Usage: python3", argv[0]. "<ord>")

Vid redovisningen ska du kunna generera en ordkombinationsfil och testa den med kommandoradsprogrammet. Du ska kunna redogöra för den kod du skrivit. Om ni är två som jobbat tillsammans ska var och en kunna redogöra för hela koden. Du ska också redogöra för vad du kommit fram till angående komplexiteten.

 

1617227999 03/31/2021 11:59pm
Inkludera en beskrivning
Ytterligare kommentarer:
Maxresultat för gradering till > poäng
Inkludera en bedömningstitel

Matris

Hitta matris
Inkludera en titel
Hitta en matris
Titel
Du har redan bedömt studenter med den här matrisen. Större ändringar kan påverka resultaten för deras uppgifter.
 
 
 
 
 
 
 
     
Det går inte att ändra en matris efter att du börjat använda den.  
Titel
Kriterier Bedömningar Poäng
Det här kriteriet är länkat till ett lärandemål Beskrivning av kriterium
tröskel: 5 poäng
Redigera beskrivning av kriterium Ta bort kriterium rad
5 till >0 poäng Full poäng blank
0 till >0 poäng Inga poäng blank_2
Det här området kommer användas av utvärderaren för kommentarer relaterade till det här kriteriet.
poäng
  / 5 poäng
--
Ytterligare kommentarer
Det här kriteriet är länkat till ett lärandemål Beskrivning av kriterium
tröskel: 5 poäng
Redigera beskrivning av kriterium Ta bort kriterium rad
5 till >0 poäng Full poäng blank
0 till >0 poäng Inga poäng blank_2
Det här området kommer användas av utvärderaren för kommentarer relaterade till det här kriteriet.
poäng
  / 5 poäng
--
Ytterligare kommentarer
Poängsumma: 5 av 5
Föregående
Nästa
p1 p3