Seite 1 von 1

zufall!

Verfasst: Montag 15. September 2008, 14:44
von Basti91
Hi hab als Hausaufgabe folgende aufgabe:

2) Verschlüsselung:
Schreibe eine Funktion „Verstecke“ mit 2 Argumenten „s“ und „n“, die einen Klartext auf folgende Weise unleserlich macht:
a) Die Zeichenkette wird in Großbuchstaben umgewandelt.
b) Hinter diese Zeichen werden n zufällige Großbuchstaben eingefügt.
c) Das Argument ist optional. Defaultwert: n=1
Eine Entschlüsselung soll auch enthalten sein!

nun hab ich ein problem bei der b) nämlich bei dem Wörtchen "zufällig"
hab schon ein paar wörter wie "random" ausprobiert aber niochts hat funktioniert. hat jemand ne idee wie man das in Python "dem Zufall überlässt". Ich dneke mal ich muss ne Liste mit allen Buchstaben machn und dann iwie zufällig auf diese zugreifen.

Verfasst: Montag 15. September 2008, 14:47
von DasIch
Schau dir mal die Module random und string an.

Verfasst: Montag 15. September 2008, 14:51
von Basti91
wo sol ich mir die anschauen gibts da beschreibungen :oops:

Verfasst: Montag 15. September 2008, 14:54
von Lonestar
Basti91 hat geschrieben:wo sol ich mir die anschauen gibts da beschreibungen :oops:
ja gibt es:

einfach suchen

Verfasst: Montag 15. September 2008, 15:03
von Basti91
hab jetzt ein bisschen rumexprimentiert aber iwie will das nicht funzen weil er mir immer ausgibt das es den befel "random()" nicht gibt.


Code: Alles auswählen

>>> Alphabeth= ["A","B","C","D","E","F","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
>>> random(Alphabeth)

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    random(Alphabeth)
NameError: name 'random' is not defined

Verfasst: Montag 15. September 2008, 15:10
von DasIch

Verfasst: Montag 15. September 2008, 15:11
von n4p
Du hast ihn wohl nicht importiert?!

Probiers mal so und lies noch ein bisschen Tutorial nebenher.

Code: Alles auswählen

import random

random.choice(Alphabeth)

Verfasst: Montag 15. September 2008, 16:21
von BlackJack
Ich konnte nicht widerstehen. :-)

Code: Alles auswählen

from itertools import islice
from random import choice
from string import ascii_uppercase


def iter_random_uppercase():
    while True:
        yield choice(ascii_uppercase)


def encode(text, n=1):
    random_uppercase = iter_random_uppercase()
    for character in (c.upper() for c in text):
        yield character
        for character in islice(random_uppercase, n):
            yield character


def decode(text, n=1):
    return islice(text, None, None, n + 1)

Verfasst: Montag 15. September 2008, 16:36
von numerix
Da wird der Lehrer bestimmt ganz aus dem Häuschen sein ... :lol:

Verfasst: Montag 15. September 2008, 16:55
von Basti91
was bewirkt denn das yield und das islice ...sry aber hab ich noch nie gesehen

Verfasst: Montag 15. September 2008, 17:00
von EyDu
Wirf doch einen Blick in die Dokumentation. Dann sparst du auch gleich das Raten von irgendwelchen Befehlen. Den Vorschlag von BlackJack solltest du nicht allzu ernst nehmen ;-) . Mit den Dir bekannten Mitteln bekommst du es sicher auch hin.

Edit: Typo-Tag :lol:! War ja echt grausam :roll:

Verfasst: Montag 15. September 2008, 17:14
von DasIch
Basti91 hat geschrieben:was bewirkt denn das yield und das islice ...sry aber hab ich noch nie gesehen
Wenn yield aufgerufen wird, wird der Wert "return"ed und die funktion(generator) angehalten. Man kann den nächsten Wert dann mit .next() bekommen.

islice liefert ein slice Object über das man iterieren kann. Du kennst vielleicht ["foo", "bar"][0:2] um bestimmte Elemente aus Sequenzen zu bekommen, im Prinzip ist dass das gleiche.

Verfasst: Montag 15. September 2008, 17:38
von Basti91
danke für die infos

Verfasst: Montag 15. September 2008, 17:40
von name

Verfasst: Montag 15. September 2008, 18:45
von Leonidas
Ist denn heute Typo-Tag? Erst les ich Schwirigkeiten bei Python und dann kommen hier "Befhele". Heute haben es wohl einige erst genommen, noch mehr Tippfehler zu machen als ich normalerweise 8)

Letzten Endes kann man natürlich auch BlackJacks Lösung nehmen, sofern man weiß wie sie geht und dem Lehrer auf Anfrage auch erklären und modifizieren kann (falls er glaubt dass man die Erklärung auswendig kann). Allerdings ist es wohl einfacher, das Problem selbst zu lösen, dann gibt es auch keine Verdachtsmomente.