Adressen generator?

2 Antworten

Schau mal hier

from random import randint
bundeslaender = open('./bundeslaender.txt', encoding="utf8")
bundesland = bundeslaender.readlines()[randint(0,len(bundeslaender.readlines()))].replace('\n', '')
strassen = open('./strassen.txt', encoding="utf8")
strasse = strassen.readlines()[randint(0,len(strassen.readlines()))].replace('\n', '').replace('"', '')
staedte = open('./staedte.txt', encoding="utf8")
stadt = staedte.readlines()[randint(0,len(staedte.readlines()))].replace('\n', '').replace('"', '')
hausnummer = randint(1,100)
i = randint(0,1)
if(i == 0):
    zusatz = chr(randint(97,106))
    adresse = bundesland + ', ' + stadt + ', ' + strasse + ' ' + str(hausnummer) + zusatz
else:
    adresse = bundesland + ', ' + stadt + ', ' + strasse + ' ' + str(hausnummer)
print(adresse)

Hier das fertige Ding mit allen Dateien ;)

https://ufile.io/2aushy9e

Woher ich das weiß:Studium / Ausbildung – Informatikstudent
Isendrak  01.07.2020, 16:17

Das lässt sich aber noch ein ganzes Stück optimieren:

import random, itertools
bundesland = random.choice(open('./bundeslaender.txt', encoding='utf8').readlines()).strip()
strasse = random.choice(open('./strassen.txt', encoding='utf8').readlines()).strip()
stadt = random.choice(open('./staedte.txt', encoding='utf8').readlines()).strip()
hausnummer = randint(1,100)
zusatz = random.choice(list(itertools.chain.from_iterable([['','',c] for c in 'abcdefghi'])))
adresse = '{0}, {1}\r\n{2} {3}{4}'.format(bundesland, stadt, strasse, hausnummer, zusatz)
print(adresse)
1
Isendrak  01.07.2020, 16:28
@whgoffline

War ja auch kein "Is ja kagge..." sondern mehr ein "Hallo, ich bin der Nerd/Perfektionist." ^^

P.S.: Ich hätt noch n paar Ideen für Version 2.0:

  1. Name und Vorname
  2. E-Mail-Adresse
  3. Personalausweisnummer (Mindestalter: 18 Jahre)
  4. Name des ersten Haustiers
  5. Mädchenname der Mutter
1
whgoffline  01.07.2020, 16:45
@Isendrak

Eine Anmerkung noch. Es muss

hausnummer = random.randint(1,100) 

heißen.

Zudem kann man doch bei Zusatz einfach

zusatz = random.choice('abcdefghi')

machen, oder sehe ich das falsch. Würde ja eine ganzen import sparen.

1
Isendrak  01.07.2020, 16:57
@whgoffline

Okay, das bei hausnummer hab ich übersehen. ^^;;

Aber bei zusatz ist's nicht ganz so einfach: Nicht jede Hausnummer (eher die wenigsten) hat (bzw. haben) einen Buchstaben mit drin.

Gut, man könnte die Liste auch als Literal schreiben (wär vermutlich sogar kürzer), aber ohne die Leerstrings wird das Ergebnis statistisch unplausibel (bzw. noch unplausibler ^^).

1
Isendrak  01.07.2020, 18:25
@whgoffline

Die, die mit

['','',c]

in die Liste gepackt werden.

Das Resultat folgt dabei dem Muster "Leerstring, Leerstring, Buchstabe, Leerstring, Leerstring, Buchstabe, ..."

Wobei natürlich auch das ginge:

zusatz = ['',random.choice('abcdefghi')][int(random.randint(0,101)>95)]

Dabei wird mit einer Wahrscheinlichkeit von 5% einer von 9 Buchstaben ausgewählt.

1
whgoffline  01.07.2020, 18:29
@Isendrak

Du meinst also als Komplette Straße mi Hausnummer dann Musterweg 10 a b???

0
Isendrak  01.07.2020, 18:35
@whgoffline

WTF? Nein.

Bei meiner ersten Variante gibt es 9 Buchstaben und 18 Leerstrings.

Damit hat von 3 generierten Adressen statistisch betrachtet eine einen Buchstaben hinter der Hausnummer und zwei haben nur die Nummer.

Bei meiner zweiten Variante wird mit einer Wahrscheinlichkeit von 5% ein Buchstabe an die Hausnummer angehängt, ansonsten nur ein Leerstring.

Statistisch betrachtet also 19 ohne und eine mit Buchstabe je 20 generierten Adressen.

1
whgoffline  01.07.2020, 18:38
@Isendrak

Achso, dann hätte ich viellecht

zusatz = random.choice(' '*18+'abcdefghi') 

versucht

0
Isendrak  01.07.2020, 18:41
@whgoffline

Dann hättest du aber Leerzeichen mit drin.

Gut, für die Darstellung ist das kein besonders großes (bzw. eigentlich gar kein) Problem, aber ich finds mit Leerstrings etwas "sauberer". ^^

0
whgoffline  01.07.2020, 18:43
@Isendrak

Stimmt, dann vielleicht

zusatz = random.choice(''*18+'abcdefghi') 

0
Isendrak  01.07.2020, 18:54
@whgoffline

Das wird nicht funktionieren. Ist im Grunde das gleiche Prinzip wie n*0.

0