2 votes

renvoie soit None, soit dit "profondeur de récursion maximale dépassée"

J'essaie de créer un programme qui prendra deux ensembles d'entiers aléatoires et imprimera une déclaration basée sur les résultats de ces deux ensembles d'entiers. Cependant, lorsque j'appelle la méthode, je reçois soit "None", soit une erreur indiquant "maximum recursion depth exceeded". Je n'arrive pas à comprendre comment structurer mes instructions de retour dans ces méthodes pour que cela fonctionne correctement.

def genre(a,b):
    genreType = random.randint(a,b)

    if genreType == '1':
        genreType = "Fantasy"
        return genre()
    elif genreType == '2':
        genreType = "Sci-Fi"
        return genre()

def medium():
    mediumType = random.randint(1,2)

    if mediumType == '1':
        genre = genre(1,2)
        print("Play a " + genre + "game")
        return medium()
    elif mediumType == '2':
        genre = genre(1,2)
        print("Watch a " + genre + "anime")
        return medium()

2voto

Oleg Pyzhcov Points 4600

Tout d'abord, si une fonction a une branche sans return il renverra None , par exemple :

def something():
    if False:
        return "Thing"
    # There is no return in "else"

print(something()) # None

Deuxièmement, comparer des nombres à des chaînes de caractères n'aboutit jamais :

print(1 == 1) # True
print(1 == '1') # False

L'exemple que vous avez fourni ne peut donc toujours renvoyer que None


Troisièmement, vos fonctions ne renvoient rien de significatif :

def genre(a,b):
    genreType = random.randint(a,b)

    if genreType == '1':
        genreType = "Fantasy"
        return genre() # call this function again, but with no parameters, why?!

Si la condition avait une chance d'être vraie, vous obtiendriez

TypeError: genre() missing 2 required positional arguments: 'a' and 'b'

Je ne peux que deviner que c'est ce que vous vouliez faire :

    if genreType == 1:
        genreType = "Fantasy"
        return genreType

Ou, plus court et sans doute plus lisible :

def genre(a,b):
    genreType = random.randint(a,b)

    if genreType == 1:
        return "Fantasy"
    elif genreType == 2:
        return "Sci-Fi"
    # And you can add your own error to know what exactly went wrong
    else:
       raise Exception("Genre bounds must be between 1 and 2")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X