Seite 1 von 1

def, input, define ""

Verfasst: Montag 26. März 2018, 23:32
von ilepix
Hey ich hab ne kleine Frage, wie kann ich mein "GamerTag" in verschiedenen defs definieren


Bin neu


PS : Programm ist neu und nicht fertig


Gruß Elias

Code: Alles auswählen




def EnterGamerTag():
    
    print("===================================")
    print("Please enter your gamer tag here : ")
    print("===================================")
    GamerTag = input("")
    print("Your registered gamer tag is", GamerTag, "Is that right")
    answer1 = input("")
    if "Yes" in answer1:
        EnterResults()
    elif "No" in answer1:
        print ("LOLO")
    elif answer1 != "Yes" and answer1 !="No":
        g = input("Press any key to retry")
        EnterGamerTag()





    


#def AccessResults():
    


def EnterResults():
    print("===================================")
    print("Hey, to make a statistic, we need")
    print("you to enter your game results")
    print("===================================")
    hits = input("Please enter your hits")
    misses = input("Please enter your misses")
    Qoute = (int(hits) / int(misses));
    Points = (int(hits) * 10)
    if (int(hits) > 25):
        Points = (int(Points) + 75)
    print("Calculating...")
    print("Your hits and misses are", hits, "/", misses)
    print("So your hits and misses quote is", Qoute)
    print ("You earned", Points, "experience points in this game")
    SaveResults()



def SaveResults():

    print("Do you want to save your stats for ", GamerTag, "?" )
    answer2 = input("")
    if "Yes" in answer2:
        print("Ok, we will safe your stats for", GamerTag)
        file = open("{}.txt".format(GamerTag), "w+")
        file.write("{}".format(GamerTag))
        file.write("{}".format(hits))
        file.write("{}".format(misses))
        
         




        
    elif "No" in answer2:
        print ("LOLO")
    elif answer2 != "Yes" and answer2 !="No":
        g = input("Invalid answer, press any key to retry")
        SaveResults(GamerTag, hits, misses)
        
       

def menu():
    print("PRESS ONE")
    choice = input()

    if choice == "1":
            EnterGamerTag()

    if choice =="2":
            EnterResults()



menu()

Re: def, input, define ""

Verfasst: Dienstag 27. März 2018, 00:06
von __deets__
Die ‚defs‘ heißen Funktionen. Und dein GamerTag solltest du mit return zurückgeben, und dann als Argument in EnterResults reinreichen.

Außerdem bitte deinen Code mt Code Tags markieren, und ein Blick auf PEP8 zu Konventionen für Namen wäre auch eine hütender.

Re: def, input, define ""

Verfasst: Dienstag 27. März 2018, 01:33
von ilepix
Danke,

ich habe jetzt unter die Funktion "EnterGamerTag" "return GamerTag" gesetzt und GamerTag als Argument in "SaveResults" gekennzeichnet...
funktioniert aber immernoch nicht...




Gruß
Elias

Re: def, input, define ""

Verfasst: Dienstag 27. März 2018, 07:46
von __deets__
Bitte den Code zeigen. Denn gegen tut das ganz bestimmt.

Code: Alles auswählen

def foo():
      return "tag"


der bar(dings):
      print(dings)


def main():
      tag = foo()
      bar(tag)

Re: def, input, define ""

Verfasst: Dienstag 27. März 2018, 10:08
von Sirius3
@ilepix: alles, was eine Funktion an Variablen braucht, bekommt sie über ihre Argumente und Ergebnisse werden per `return` zurückgegeben. Der Aufrufer muß dann mit den Rückgabewerten auch was machen, also z.B. einer Variable zuweisen.

Dein Programmfluß ist nicht optimal. Funktionen machen eine Aufgabe und geben den Kontrollfluß wieder an den Aufrufer zurück. Du rufst aber immer wieder eine weitere Funktion auf: Funktionen sind keine Sprungmarken.

Re: def, input, define ""

Verfasst: Dienstag 27. März 2018, 12:39
von snafu
Die Abfrage der Benutzereingaben ist nicht so schön gelöst. Was machst du, wenn der Benutzer beim zweiten Versuch auch wieder etwas anderes als Yes oder No eingibt? Was passiert bei den Spielergebnissen, wenn sie keine Zahlen sind?

Ich habe hier mal ein kleines Modul vorgestellt, das diese Thematik behandelt und an dem du dich gern orientieren kannst. Du darfst von mir aus auch Codestellen kopieren oder gleich das Modul als Ganzes verwenden (dann aber bitte den Copyright Vermerk drin lassen).

EDIT:
Okay, bei der Yes-No-Abfrage ruft die Funktion sich nochmal auf. Kann theoretisch irgendwann zum Abbruch wegen zu hoher Rekursionstiefe führen, ist praktisch gesehen aber eher unwahrscheinlich. Die alternative Lösung wäre halt eine while-True-Schleife, die verlassen wird, sobald die Eingabe korrekt war.