namen generator erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Max22
User
Beiträge: 6
Registriert: Donnerstag 26. Mai 2022, 14:36

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
Max22
User
Beiträge: 6
Registriert: Donnerstag 26. Mai 2022, 14:36

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))
karolus
User
Beiträge: 140
Registriert: Samstag 22. August 2009, 22:34

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}')
gerpark
User
Beiträge: 7
Registriert: Montag 19. Januar 2015, 20:58

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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']
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
imonbln
User
Beiträge: 149
Registriert: Freitag 3. Dezember 2021, 17:07

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)]
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@imonbln: Das ist eine Super-Idee! 😎
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten