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

    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 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, [[https://docs.python.org/3/library/stdtypes.html#typesmapping][dictionaries] och listor.

    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
    Ytterligare kommentarer:
    Maxresultat för gradering till > poäng

    Matris

     
     
     
     
     
     
     
         
    Det går inte att ändra en matris efter att du börjat använda den.  
    Hitta en matris
    Hitta matris
    Titel
    Du har redan bedömt studenter med den här matrisen. Större ändringar kan påverka resultaten för deras uppgifter.
    Titel
    Kriterier Bedömningar Poäng
    Redigera beskrivning av kriterium Ta bort kriterium rad
    Det här kriteriet är länkat till ett lärandemål Beskrivning av kriterium
    tröskel: 5 poäng
    Redigera ranking Radera ranking
    5 till >0 poäng
    Full poäng
    blank
    Redigera ranking Radera ranking
    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