Seite 1 von 1

namen generator erstellen

Verfasst: Donnerstag 26. Mai 2022, 14:46
von Max22
Hi,

ich brauche Hilfe. Ich komme nicht weiter.

Wir sollen eine Funktion mit 2 Parametern, Vor und Nachname. In der Funktion sollen wir eine leere Liste erstellen und dann 2 Listen mit vor und Nachnamen kombinieren. Diese sollen im Output dann in die neue Liste eingetragen werden.

Ich hatte zwei Lösungsansätze.

Code: Alles auswählen

import random

first_names = ["Gabriel", "Reinhard", "Siebren"]
last_names = ["Colomar", "Chase", "Vaswani"]
full_names = []

for _ in range(9):
    new_name= random.choice(first_names)+" "+random.choice(last_names)
    full_names.append(new_name)
group_string = ", ".join(full_names)

print(full_names)
Problem hier: 1. Es ist keine Funktion und ich scheitere andauernd, diesen Code in eine Funktion einzubauen. Ich hab ihr ne Wissenslücke. Jedoch schaffe ich es nicht, diese zu schließen, egal was ich mir im Internet anschaue.

des Weiteren kann mit diesem Code das Ergebnis 2x die selben Namen erhalten. Wie kann ich das verhindern?

Mein zweiter Lösungsansatz wäre sowas:

Code: Alles auswählen

list1 = ['Gabriel', 'Reinhardt', 'Siebren']
list2 = [' Colomar', ' Chase', ' Vaswani']

print(list1[0] + list2[0])
print(list1[1] + list2[1])
print(list1[2] + list2[2])

# und so weiter
aber ich finde das sieht nicht so schön aus und hier scheitert es ebenfalls an dem Aufbau einer Funktion.

In unserem Lehrbuch werden Funktionen leider nur folgendermaßen erklärt:

Code: Alles auswählen

def test():
	print("Hallo")
jedoch hilft mir das irgendwie nicht weiter.

Kann mir jemand erklären, wie ich meine Probleme lösen kann?

Vielen Dank!

LG

Re: namen generator erstellen

Verfasst: Donnerstag 26. Mai 2022, 16:17
von Max22
ich habe jetzt folgendes gemacht. Ich hab irgendwie das Gefühl, dass ich Funktionen ein bisschen besser verstehe.

Leider habe ich den remaining Teil aus dem Internet. Könnte mir das jemand erklären, bitte?

Code: Alles auswählen

import random

first_names = ["Gabriel", "Reinhard", "Siebren"]
last_names = ["Colomar", "Chase", "Vaswani"]


def name_generator(first_names, last_names):
    full_names = []
    remaining = [(a,b) for a in range(len(first_names)) for b in range(len(last_names))]
    while len(remaining)>0:
        (a,b) = random.choice(remaining)
        full_names.append(first_names[a] + " " + last_names[b])
        remaining.remove((a,b))
    return full_names
        

print(name_generator(first_names, last_names))

Re: namen generator erstellen

Verfasst: Donnerstag 26. Mai 2022, 17:28
von karolus

Code: Alles auswählen

first_names = ["Gabriel", "Reinhard", "Siebren"]
last_names = ["Colomar", "Chase", "Vaswani"]

for firstname in first_names:
    for lastname in last_names:
        print(f'{firstname} {lastname}')

Re: namen generator erstellen

Verfasst: Donnerstag 26. Mai 2022, 17:56
von gerpark
Die Fragestellung ist leider nicht sehr genau.

Aber wenn Du eine Funktion schreiben sollst, in der eine Ergebnisliste erstellt wird,
wirst Du die beiden Listen an die Funktion übergeben müssen.
Innerhalb der Funktion kannst Du dann die Vornamen und Nachnamen
irgendwie kombinieren und in die neue Liste übertragen.
Danach gibts Du die neue Liste in einer return - Anweisung zurück.

Re: namen generator erstellen

Verfasst: Donnerstag 26. Mai 2022, 22:03
von __blackjack__
@Max22: Du beschreibst leider nicht wirklich wie die Ergebnisliste beschaffen sein soll, ausser das offenbar keine Namen doppelt vorkommen sollen. Sollen zufällig Namen ohne Doppelungen generiert werden? Falls ja, wie viele? Oder sollen alle Kombinationen gebildet werden?

Edit:

Code: Alles auswählen

#!/usr/bin/env python3
from itertools import product
from pprint import pprint


def combine_names(first_names, last_names):
    return [
        f"{first_name} {last_name}"
        for first_name, last_name in product(first_names, last_names)
    ]


def main():
    first_names = ["Gabriel", "Reinhard", "Siebren"]
    last_names = ["Colomar", "Chase", "Vaswani"]
    full_names = combine_names(first_names, last_names)
    pprint(full_names)


if __name__ == "__main__":
    main()
Ausgabe:

Code: Alles auswählen

['Gabriel Colomar',
 'Gabriel Chase',
 'Gabriel Vaswani',
 'Reinhard Colomar',
 'Reinhard Chase',
 'Reinhard Vaswani',
 'Siebren Colomar',
 'Siebren Chase',
 'Siebren Vaswani']

Re: namen generator erstellen

Verfasst: Freitag 27. Mai 2022, 07:55
von ThomasL
Ich könnte mir vorstellen, dass das gar nicht so komplex gefordert ist. Hier eine ganz simple Lösung:

Code: Alles auswählen

first_names = ["Gabriel", "Reinhard", "Siebren"]
last_names = ["Colomar", "Chase", "Vaswani"]

def combine(names, surnames):
    return [f"{name} {surname}" for name, surname in zip(names, surnames)]

full_names = combine(first_names, last_names)
print(full_names)

Re: namen generator erstellen

Verfasst: Freitag 27. Mai 2022, 11:45
von imonbln
Wie wäre es itertools die Aufgabe lösen zu lassen?

Code: Alles auswählen

import itertools

def gennames(names, surnames):
       return [ f"{name} {surname}" for name, surname in itertools.product(names, surnames)]

Re: namen generator erstellen

Verfasst: Freitag 27. Mai 2022, 14:16
von __blackjack__
@imonbln: Das ist eine Super-Idee! 😎