Modul Randstr

Code-Stücke können hier veröffentlicht werden.
Antworten
Gast

Hi @ll!

Mich hats einfach generft, dass Random keine zufälligen Strigzeichen ausgeben kann. Deswegen hab ich nen Modul dafür geschrieben.
Is zwar nen bischen einfach geschrieben, erfüllt aber seine Funktion.
Es hiflt, wenn ihr z.B. Bruteforcedictionarys erstellen wollt *hack*:twisted:

Hier ist der Code:

Code: Alles auswählen


from random import*

class randomize:
    def __init__(self):        
        
        self.alls=['!','"','#','$','%','&',"'",'(',')','*','+',',','-',\
                   '.','/','0','1','2','3','4','5','6','7','8','9',':',\
                   ';','<','=','>','?','@','A','B','C','D','E','F','G',\
                   'H','I','J','K','L','M','N','O','P','Q','R','S','T',\
                   'U','V','W','X','Y','Z','[','\\',']','^','_','`','a',\
                   'b','c','d','e','f','g','h','i','j','k','l','m','n',\
                   'o','p','q','r','s','t','u','v','w','x','y','z','{',\
                   '|', '}', '~', '']
        
        self.bigs=['A','B','C','D','E','F','G','H','I','J','K','L','M',\
                   'N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

        self.lits=['a','b','c','d','e','f','g','h','i','j','k','l','m',\
                   'n','o','p','q','r','s','t','u','v','w','x','y','z']

        self.sond=['!','"','#','$','%','&',"'",'(',')','*','+',',','-',\
                   '.','/',':',';','<','=','>','?','@','[','\\',']','^',\
                   '_','`','{','|', '}', '~', '']

        self.zahl=['0','1','2','3','4','5','6','7','8','9']

        
    def str_bigs(self, von, bis):
        '''Startvalue(min=0; max=24) and Endvalue (min=1; max=25)'''

        try:
            self.start = von
            self.end   = bis
        
            self.a=randint(self.start,self.end)
        
            return self.bigs[self.a]

        except:
            return 'Error in randstr.str_bigs'

    def str_lits(self, von, bis):
        '''Startvalue(min=0; max=24) and Endvalue (min=1; max=25)'''

        try:
            self.start = von
            self.end   = bis
        
            self.a=randint(self.start,self.end)

            return self.lits[self.a]

        except:
            return 'Error in randstr.str_lits'

    def str_alls(self, von, bis):
        '''Startvalue(min=0; max=93) and Endvalue (min=1; max=94)'''

        try:
            self.start = von
            self.end   = bis
        
            self.a=randint(self.start,self.end)

            return self.alls[self.a]

        except:
            return 'Error in randstr.str_alls'

    def str_sond(self, von, bis):
        '''Startvalue(min=0; max=31) and Endvalue (min=1; max=32)'''

        try:
            self.start = von
            self.end   = bis
        
            self.a=randint(self.start,self.end)

            return self.sond[self.a]
        
        except:
            return 'Error in randstr.str_sond'






randstr=randomize()
MFG,
Floh*
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Anonymous hat geschrieben:Mich hats einfach generft, dass Random keine zufälligen Strigzeichen ausgeben kann.
choice() übersehen?

Code: Alles auswählen

    def str_sond(self, von, bis):
        '''Startvalue(min=0; max=31) and Endvalue (min=1; max=32)'''

        try:
            return choice('!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'[von:bis])            
        except:
            return 'Error in randstr.str_sond'
Jan
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Voges,

Code: Alles auswählen

>>> choice('!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~?'[:])
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'choice' is not defined
>>>
Python 2.1 und 2.2 selbes ergebnis

ich hab für ein ähnliches Problem mal ein Modul geschrieben

Code: Alles auswählen

#!/usr/bin/env python
""" 
    rndList.py
    erzeugt Zufallszahlenreihen und durchmischte
    Listen/Tuples/Strings

    (c) 2002 by Fritz Cizmarov, Opensource
"""
import sys, random, types
_minint = -sys.maxint-1

def randList(num, min=0, max=_minint, func=random.randrange, data=1):
    """ erzeuge Liste mit "num" Integerwerten zwischen
    "min" und "max-1", wobei jeder Wert nur einmal vokommen
    darf! Zusätzlich kann noch eine random-Funktion "func", der beim
    Aufruf ausser "min" und "max" noch "data" mitgegeben wird angegeben
    werden. """
    
    if max == _minint: # wenn "max" nich angegeben wurde
        max = min + num
        
    assert num > 0, 'Parameter "num" muß >= 1 sein!' 
    assert (max-min)/data >= num, "Wertebereich zu klein!"
    
    values = range(min,max) # Werteliste
    erg = [] # Ergebnisliste
    for i in range(num):
        r = func(0, len(values), data)
        erg.append(values[r]) # Wert aus Werteliste hinzufügen
        del values[r] # Wert aus Werteliste löschen
    return erg


def shuffle(data):
    """ erzeuge Kopie der Liste bzw. des Tuple "data" deren Elemente
    durcheinandergemischt sind. Geht auch mit Strings """
    erg = []
    for i in randList(len(data)): # Liste zufällig durchlaufen
        erg.append(data[i]) # zufälliges Item aus Liste an Ergebnis anhängen

    if isinstance(data, types.TupleType):
        erg = tuple(erg)
    elif isinstance(data, types.StringType):
        if erg == []:
            erg = ""
        else:
            erg = reduce(lambda x, y: x+y, erg)
    return erg


# Demonstration der Funktionen

if __name__ == '__main__':
    print "Teste rndList.randList"
    print "randList(6, 1, 50) ->", randList(6, 1, 50)
    print "randList(10, 1) ->", randList(10, 1)
    print "randList(16) ->", randList(16)
    print
    print "Teste rndList.shuffle"
    myListe = ['eins', 'zwei', 'drei', 'vier']
    print "myListe =", myListe
    print "rndList.shuffle(myListe) ->", shuffle(myListe)
    print
    print "Geht natürlich auch mit einem Tuple"
    myTuple = ('alpha', 'beta', 'gamma', 'delta', 'omega')
    print "myTuple =", myTuple
    print "rndList.shuffle(myTuple) ->", shuffle(myTuple)
    print
    print "Und auch mit Strings"
    myString = "abcdefghijklmnopqrstuvwxyz"
    print "myString =", myString
    print "rndList.shuffle(myString) ->", shuffle(myString)
    myString = "Python"
    print "myString =", myString
    print "rndList.shuffle(myString) ->", shuffle(myString)
Gruß

Dookie
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!
Dookie hat geschrieben:

Code: Alles auswählen

>>> choice('!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~?'[:])
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'choice' is not defined
>>>
Python 2.1 und 2.2 selbes ergebnis
Mein Code sollte lediglich Flo*s Code für str_sond() ersetzen. Ich wollte nicht seinen gesamten Code inkl. from random import* wiederholen. random.choice() gab es schon bei Version 1.5.2.

Jan
Gast

uups stimmt :oops:

from random import * davor und schon gehts :)


Gruß

Dookie
Pythonaya
User
Beiträge: 90
Registriert: Sonntag 26. Januar 2003, 11:34
Wohnort: Großbeeren (nahe Berlin)

Son mist,
hab grad gesehn, dass ich mich garnicht eingeloggt habe, als ich das Modul oben vorgestellt habe. :oops:
Danke für die Tips, bzw. Verbesserungsvorschläge!
Mein Browser spinnt im Moment ein bischen, er loggt sich nicht selbst ein.
Manchmal vergesse ich das. :?

MFG,
Flo
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

Hallo,
dann gebe ich mal auch noch meinen Senf ab, um das Modul noch etwas zu vereinfachen:

Im Modul string sind folgende Sachen definiert: uppercase, lowercase, digits und punctuation, jeweils Strings, die alle entsprechenden Symbole beinhalten. Verwendet man die, spart man sich die explizite Aufzählung in __init__, das sieht viel übersichtlicher aus.

Jörg
Pythonaya
User
Beiträge: 90
Registriert: Sonntag 26. Januar 2003, 11:34
Wohnort: Großbeeren (nahe Berlin)

Say what?
Kannst du mir nen Beispiel geben??? :?

MFG,
Floh*
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo Joerg!
Und dann hat man verdrängt, dass man irgendwann vorher das Modul locale genutzt hat.

Code: Alles auswählen

>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
>>> print string.letters
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
>>> 
Nee, ein episches random.choice("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") ist mir dann doch sympathischer.;-)
Jan
Gast

Pythonaya hat geschrieben:Say what?
Kannst du mir nen Beispiel geben??? :?

Code: Alles auswählen

import string, random
print random.choice(string.uppercase)
sollte Dir einen zufälligen Großbuchstaben geben, da string.uppercase alle Großbuchstaben enthält, so wie string.lowercase alle kleinen, string.punctuation alle 'Sonderzeichen' und string.digits alle Ziffern.

ABER: Wie Jan bemerkte, enthalten diese Strings je nach Locale auch noch viel mehr, weshalb Du vielleicht lieber doch die entsprechenden Zeichen von Hand aufzählen möchtest...

Jörg
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Anonymous hat geschrieben:ABER: Wie Jan bemerkte, enthalten diese Strings je nach Locale auch noch viel mehr, weshalb Du vielleicht lieber doch die entsprechenden Zeichen von Hand aufzählen möchtest...
Und was finde ich eben beim Rumstöbern? Seit der Version 2.2 gibt es die string-Konstanten ascii_letters, ascii_lowercase und ascii_uppercase.

Code: Alles auswählen

>>> import locale,string
>>> locale.setlocale(locale.LC_ALL, '')
'German_Germany.1252'
>>> print string.letters
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
>>> print string.ascii_letters
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
>>>
Jan
Antworten