Python hjälp, functions, nybörjare

Permalänk

Python hjälp, functions, nybörjare

Hej guys
Jag läser en distans kurs i python och har kört fast i en uppgift. Jag är nybörjare så var snälla här...

UPPGIFT:
Du ska skapa ett program som innehåller två funktioner. Den ena funktionen ska ta emot en sträng som argument och inte ha något returvärde. Strängen är den text som funktionen skriver till skärmen men varje bokstav skrivs med * omkring sig (se exempel nedan)

Den andra funktionen tar emot en sträng som argument och returnerar en sträng som är samma som den som den fick som argument, men varje bokstav är skiftad ett steg. T.ex. APA blir BQB.

Exempel på programkörning:

Ange ett ord: STOCKHOLM
*S*T*O*C*K*H*O*L*M*
STOCKHOLM krypterat blir TUPDLIPMN.

Så här lång har jag kommit:

def star(s):
starword = ""
for character in s:
return starword

def main():
word = input("write a word ")
word = star(word)
print(word)

Tack/ Tracy

Permalänk
Medlem

Split och join när det kommer till stjärnorna och kryptering kan du lösa med att ha en lista med alfabetet som element. Gör en for slinga och plocka ut elementet som hittas i listan fast plus ett.

Då kanske du kommer vidare med lösningar 😊

Visa signatur

Case: Phanteks Enthoo Luxe PSU: EVGA SuperNova G2 750W MoBo: ASUS X99 Deluxe CPU: Intel Core i7 5820K RAM: Crucial Ballistix Sport 32GB DDR4 2400 Mhz GPU: 2x MSI GTX970 Gaming 4GB Cooling: Noctua NH-D15 SSD: Samsung 950 pro 512GB & Samsung 850 EVO 250GB

Permalänk
Skrivet av CeeJaySWE:

Split och join när det kommer till stjärnorna och kryptering kan du lösa med att ha en lista med alfabetet som element. Gör en for slinga och plocka ut elementet som hittas i listan fast plus ett.

Då kanske du kommer vidare med lösningar 😊

Hej CeeJaySwe
Det låter så lätt... men tack ändå

Permalänk
Medlem
Skrivet av tracy_lee:

Hej CeeJaySwe
Det låter så lätt... men tack ändå

Det är medvetet som jag inte skriver en komplett lösning. Du tar väl kursen för att lära dig? 😉

Visa signatur

Case: Phanteks Enthoo Luxe PSU: EVGA SuperNova G2 750W MoBo: ASUS X99 Deluxe CPU: Intel Core i7 5820K RAM: Crucial Ballistix Sport 32GB DDR4 2400 Mhz GPU: 2x MSI GTX970 Gaming 4GB Cooling: Noctua NH-D15 SSD: Samsung 950 pro 512GB & Samsung 850 EVO 250GB

Permalänk
Skrivet av CeeJaySWE:

Det är medvetet som jag inte skriver en komplett lösning. Du tar väl kursen för att lära dig? 😉

Hej CeeJaySWE,
Ja absolut!
Det är bara att det är svårt att följa kursen på distans...jag tror att om jag ser en lösning på detta uppgift att jag kommer att förstå bättre. Har några tips på övningar om Funktioner?
Inga problem
/Tracy

Permalänk
Hedersmedlem
Skrivet av tracy_lee:

Hej CeeJaySWE,
Ja absolut!
Det är bara att det är svårt att följa kursen på distans...jag tror att om jag ser en lösning på detta uppgift att jag kommer att förstå bättre. Har några tips på övningar om Funktioner?
Inga problem
/Tracy

Mitt förslag är att experimentera. Klura på hur du kan lösa det, aha, jag vill börja med en stjärna och sen ta första bokstaven och sen en stjärna och sen nästa bokstav... Första stjärnan får jag nog till, hur får jag första bokstaven och hur lägger jag den efter stjärnan? Gör något som ser rätt ut bara och sen kan du börja klura på hur du gör det snyggare. Skriv det rad för rad om du måste, utan någon loop. Testa att få till en stjärna och en bokstav, kör programmet, blev det rätt? Varför inte?

Permalänk
Medlem

Rejält off topic men finns det program som knäcker krypton likt dessa(antar att det finns).
Är väl iof inte så svårt att skriva ett som förskjuter alfabetet 1 steg per snurra och lagrar det resultatet i en fil per förskutning så får man väl titta i varje fil vilken som verkar stämma överens bäst.
Däremot om man krypterar med en slumpad ordning på alfabetet så borde det väl bli rejält mycket svårare att knäcka det? Då med lite extratecken kanske man har 35^35(1e54) olika alfabetsföljder att testa mot vilket bör ta en fruktansvärd tid.
I ett sådant case antar jag att programmet som knäcker istället kollar följder som repeteras och jämför mot ordlistor eller så?
Hehe, kan inte mycket om detta men tycker det är ganska kul

Visa signatur

Bara gammalt skräp...

Permalänk
Medlem

@bardbard: Om man bara ändrar ordning på alfabetet så går det oftast att knäcka med frekvensanalys. Att slumpa hela alfabetet blir väl aningen svårare att knäcka än om man bara förskjuter det eftersom man vid förskjutning bara behöver gissa en bokstav rätt, men särskilt säkert är det i alla fall inte.

Permalänk
Medlem

Chiper:s är inte så vanligt att man använder när man krypterar då dessa är ganska lätta att knäcka.
Men historiskt har det använt ganska flitigt till diverse saker, detta är ett så kallat Caesar chiper och namngivits efter julius caesar.

https://en.wikipedia.org/wiki/Caesar_cipher

Visa signatur

There are 10 types of people in the world: Those who understand binary, and those who don't...

Asus Maximus VIII Hero | i7-6700K | ASUS GeForce GTX1070 Strix 8GB | G.Skill F4-2133C15Q-32GRK |

Permalänk
Medlem
Skrivet av perost:

@bardbard: Om man bara ändrar ordning på alfabetet så går det oftast att knäcka med frekvensanalys. Att slumpa hela alfabetet blir väl aningen svårare att knäcka än om man bara förskjuter det eftersom man vid förskjutning bara behöver gissa en bokstav rätt, men särskilt säkert är det i alla fall inte.

Är väl som jag misstänkte att man kollar frekvensen på bokstäverna och på det sättet kan lista ut vad allt blir. Gäller ju i det fallet att man vet språket samt har en längre sekvens(twitter kanske går att köra hyfsat säkert^^).

Sen förstår ju givetvis jag med att dessa krypton är osäkra men de är ju ändå kul att klura på då de är väldigt enkla att bygga.

Visa signatur

Bara gammalt skräp...

Permalänk
Medlem
Skrivet av tracy_lee:

Hej CeeJaySwe
Det låter så lätt... men tack ändå

Om du inte löst det redan så har du ett tips här. Titta på hur en character fungerar i språket du lär dig. Kanske att gå lite för långt; men kapitlet "Data Type Conversion" kan nog vara till hjälp här.

Permalänk
Medlem

Sorry om jag förstör din "läxa" nu men har haft tråkigt på jobbet på morgonen...

Mitt script för att kryptera samt dekryptera:

#Bardbards superkrypto, fritt för FRA att låna =) import random #Variera "Kryptonyckel" för att få olika krypteringar #Om krypterat med en nyckel så måste samma nyckel användas för att decryptera random.seed("Kryptonyckel") #Lista med tecken som kan krypteras, fyll på med mer om önskas alpha = ["a","A","b","B","c","C","d","D","e","E","f","F", "g","G","h","H","i","I","j","J","k","K","l","L", "m","M","n","N","o","O","p","P","q","Q","r","R", "s","S","t","T","u","U","v","V","w","W","x","X", "y","Y","z","Z","å","Å","ä","Ä","ö","Ö"," ",",",".","?"] random.shuffle(alpha) def newChar(c,encrypt): if encrypt: addition = 1 else: addition = -1 if c in alpha: newIndex = alpha.index(c)+addition if newIndex >= len(alpha): newIndex -= len(alpha) elif newIndex < 0: newIndex += len(alpha) return alpha[newIndex] else: print("Unknown character in your word...("+c+")\nCan't encrypt") quit() def handleWord(s,action): newWord = "" for letter in s: newWord += newChar(letter,action) return newWord word = input("Write a word to encrypt:") print("Encrypted:"+handleWord(word, True)) word = input("Write a word to decrypt:") print("Decrypted:"+handleWord(word, False))

Dold text

Innefattar funktion som jag undrade om ovan lite i tråden, d.v.s att slumpa ordningen på alfabetet med hjälp av en kryptonyckel(ett seed). Varierar man seeden så så varieras outputen.
Exempel:
"Jag gillar Sweclockers" med seed "Kryptonyckel" blir:
xPFöFYRRPKöHTNpRäpQNKC
medans "Jag gillar Sweclockers" med seed "Sweclockers" blir:
OANHNx AKHIGPi .iuPKo

Givetvis måste man dekryptera med samma seed som användes vid krypteringen.
Ganska tjusigt ändå och borde vara svårt att knäcka om man håller sig till kortare meningar.
Hehe, fick lite feeling för detta nu och ska se om jag kan klura ut en "säkrare"(om det nu går att kalla det säkert...) lösning som varierar seeden under krypteringens gång^^

Edit:
En liten stund senare^^:
Nytt skript som skakar om alfabetet för varje bokstav(lite overkill kanske...).

#Bardbards superkrypto, fritt för FRA att låna =) import random #Variera "cryptoKey" för att få olika krypteringar #Om krypterat med en nyckel så måste samma nyckel användas för att decryptera cryptoKey= "Sweclockers" #Lista med tecken som kan krypteras masterList = ["a","A","b","B","c","C","d","D","e","E","f","F", "g","G","h","H","i","I","j","J","k","K","l","L", "m","M","n","N","o","O","p","P","q","Q","r","R", "s","S","t","T","u","U","v","V","w","W","x","X", "y","Y","z","Z","å","Å","ä","Ä","ö","Ö"," ",",",".","?"] alpha = list(masterList) random.seed(cryptoKey) random.shuffle(alpha) def newChar(c,encrypt): if encrypt: addition = 1 else: addition = -1 if c in alpha: newIndex = alpha.index(c)+addition if newIndex >= len(alpha): newIndex -= len(alpha) elif newIndex < 0: newIndex += len(alpha) return alpha[newIndex] else: print("Unknown character in your word...("+c+")\nCan't encrypt") quit() def handleWord(s,action): newWord = "" for letter in s: newWord += newChar(letter,action) random.shuffle(alpha) return newWord word = input("Write a word to encrypt:") print("Encrypted:"+handleWord(word, True)) random.seed(cryptoKey) alpha = list(masterList) random.shuffle(alpha) word = input("Write a word to decrypt:") print("Decrypted:"+handleWord(word, False))

Dold text

Förut om man krypterade t.ex "aaaaaaaa" så skulle utfallet blivit kanske "XXXXXXX". Med det nya skriptet
så får vi istället "AmåFwMcW".
Provade lite online solvers iaf som lyckades brute forca det gamla upplägget men går bet på det nya. Känns även som att det inte skulle gå att köra en frekvensanalys på ett upplägg likt detta?
Nåväl, var ett kul litet sidospår iaf^^

S joxXFåRbbwUUkSEådKöÅiSoWÄFJn

Visa signatur

Bara gammalt skräp...

Permalänk
Medlem

@bardbard:
Det känns som du gör det mer komplicerat än vad det behöver vara för den givna uppgiften, men jag lider med dig som behöver ha det tråkigt på jobbet. Jag gissar att uppgiften gavs i en introduktionskurs där fokus är att lära sig vad append (svensk översättning?) är och vad en char är i relation till ASCII. Funktionerna behöver inte vara mer komplicerade än en for-loop styck för att fylla det syftet.

Permalänk
Medlem
Skrivet av willeykk:

@bardbard:
Det känns som du gör det mer komplicerat än vad det behöver vara för den givna uppgiften, men jag lider med dig som behöver ha det tråkigt på jobbet. Jag gissar att uppgiften gavs i en introduktionskurs där fokus är att lära sig vad append (svensk översättning?) är och vad en char är i relation till ASCII. Funktionerna behöver inte vara mer komplicerade än en for-loop styck för att fylla det syftet.

Syftet var inte att lösa uppgiften egentligen då den hår att lösa på betydligare enklare sätt.
Fick lite feeling bara av den att försöka komma på en hyfsad lösning på att kryptera/dekryptera text.
Utan att vara kodknäckare så tror jag att min senaste lösning på program är oknäckbart för gemene man(även om man skulle ha kryptonyckeln).
Uppgiften får han lösa själv men kanske lär han sig nått av min kod

Visa signatur

Bara gammalt skräp...