String return funktioniert nicht (anfänger)

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
MaxCodes
User
Beiträge: 1
Registriert: Freitag 21. September 2018, 11:52

Moin,
Python 3 gibt mir bei

Code: Alles auswählen

nameinput = “est“
player_name = „test“
def get_name ():
	nameinput = str(input("Hallo, wie möchtest du genannt werden? >"))	
	return nameinput;
	
def char_creation (nameinput):
	player_name = nameinput
	return player_name;
#Ablauf

get_name ()
print ("%s" % nameinput)
char_creation()
Der code gibt mir nur die definierten strings am anfang aber nicht den input, also an keiner der drei abfragen. Print die erste var und charcreation die zweite.

Wo liegt mein Denk/syntaxfehler?
Googlen hat bisher nicht geholfen :(

Danke im Voraus für das beantworten solch simpler Fragen!


Tippfehler dank tablet ;)
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich würde dir wirklich empfehlen, ein Grundlagentutorial durchzuarbeiten. Das berührt alle deine Problemstellen:

- Semikolon in Python benutzt man selten bis gar nicht, und nie so wie du. Lass das einfach weg.
- Funktionen müssen mit den Parametern, die sie erklären, auch aufgerufen werden.
- Rückgabewerte sind nicht magisch eingaben an andere Codestellen. Sie müssen Namen zugewiesen werden, und die dann an die anderen Funktionen übergeben werden.

Code: Alles auswählen

def lies_was():
       ....
       return ergebnis 

def verarbeite_was(parameter):
        ... # tu was mit Parameter 

wert = lies_was()
verarbeite_was(wert)
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@MaxCodes: Es gibt die Namen `nameinput` und `player_name` auf Modulebene und noch mal lokal jeweils einer der Namen in den beiden Funktionen. Das sind *unterschiedliche* Namen. Eine Zuweisung an `nameinput` in `get_name()` hat nichts mit `nameinput` auf Modulebene zu tun, und genau so verhält sich das mit `player_name` in der anderen Funktion. Das ist ja gerade der Sinn von Funktionen, dass die in sich geschlossen sind, und man da Namen verwenden kann ohne sich Sorgen machen zu müssen ob man diesen Namen schon irgendwo anders verwendet hat. Werte die innerhalb von Funktionen verwendet werden (ausser Konstanten) werden als Argumente übergeben, und wenn eine Funktion ein Ergebnis hat, dann wird das an den Aufrufer zurück gegeben.

Du hast da auch ``return``-Anweisungen, machst aber mit den Rückgabewerten dann gar nichts.

Die Variablen auf Modulebene haben da auch nichts zu suchen. Auf Modulebene sollte nur Code stehen, der Konstanten, Funktionen, und Klassen definiert. Alles andere gehört in Funktionen/Methoden. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.

Die Semikolons sind überflüssig und sollten weggelassen werden. Die Zeichenkettenformatierung einer Zeichenkette macht auch keinen Sinn. Zwischen Funktionsnamen und öffnende Klammer der Argumente gehört kein Leerzeichen. Falls das Python 2 ist, sollte `input()` nicht verwendet werden sondern `raw_input()`. Falls es dagegen Python 3 ist, macht der `str()`-Aufruf an der Stelle keinen Sinn. `nameinput` ist kein passender Name für einen (Personen)namen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten