0
votes

Quelle devrait être la sortie ci-dessous du code Python? Ce code provient d'un quiz en ligne et il y a sa réponse donnée est 0

Ce code provient d'un quiz en ligne pour Python. La réponse sur le site Web est donnée sous forme de 0. Je ne comprends pas la réponse donnée dans le quiz. Selon ma compréhension, la réponse devrait être (1,1).

def func(x, ans):
   if(x==0):
      return 0
   else: 
      return func(x-1, x+ans) 

print(func(2,0))


4 commentaires

La réponse est 0. Temps pour que vous fassiez la raison pour laquelle. (PS, un bon moyen de valider les réponses, il suffit de l'exécuter!)


Retour 0 CARE FUNC Retourne toujours 0 . En outre, cette fonction ne peut pas retourner (1,1) , son type de retour est numéro.


Pourriez-vous donner le raisonnement pourquoi vous pensez que cela revient (1,1)?


Vous avez probablement manqué l'appel de func récursif


4 Réponses :


0
votes

Retour 0 CODE> CARE FUNC CODE> Retourne toujours 0 code>.
En outre, cette fonction ne peut pas retourner (1,1) code>, son type de retour est numéro


comment diriez-vous ci-dessous le code? P>

def func(x, ans): 
    print(x, ans)
    if(x==0): 
        return 0
    else: 
        return (x-1, x+ans) #updated
print(func(2,0))
#Output: (1, 2)


0 commentaires

1
votes

Itération 0: x = 2, ans = 0; Va à la déclaration "sinon", maintenant, x = 1, ans = 2.

itération 1: x = 1, ans = 1; Va à la déclaration "sinon", maintenant, x = 0, ans = 3.

itération 2: x = 0, ans = 3; Va à la déclaration 'Si', retourne de la fonction donnant la sortie '0'


0 commentaires

0
votes

Un moyen de suivre ce qui se passe est d'ajouter quelques instructions imprimer dans votre définition de fonction - xxx

puis exécutez la fonction imprimer (func (2,0)) et voir quelles valeurs sont imprimées


0 commentaires

0
votes

Si vous voulez savoir comment fonctionne du code, une bonne pratique consiste à simplement passer à travers la ligne de la ligne. Donc, avec cette fonction qui serait:

Que fonctionne cette fonction

en premier, la fonction vérifie si son entrée x est égale à 0 . Si c'est le cas, il renvoie 0 et en revenant également que la fonction est terminée. xxx

si x x n'est pas égal à 0 , l'instruction IFR renvoie false , résultant dans la fonction pour passer aux lignes suivantes: xxx

La fonction s'appelle elle-même avec la valeur x diminuée par 1 . Nous voyons donc que cette fonction est en fait une fonction récursive (plus sur les fonctions récursives ici et ici ). Le deuxième paramètre de FUNC est la valeur ANS donnée à la fonction d'origine ajoutée à la valeur x . C'est la seule survenue de la variable ans , ce qui signifie qu'il n'a aucune signification dans la fonction elle-même.
Maintenant, en appelant la fonction avec la valeur réduite x , il vérifiera à nouveau si cette valeur est égale à 0 . S'il s'agit, il retournera 0 , ce qui signifie que la fonction func appelée cette nouvelle fonction FUNC retournera également 0 . Ou il appellera à nouveau la fonction Func avec une valeur réduite x . Il le fera jusqu'à ce que la valeur x devienne 0 .
Cela signifie alors que la seule valeur qui sera jamais renvoyée à partir de cette fonction est 0 .

Donc, en bref, la fonction ne pourra peut-être pas retourner 0 < /code.com.

Pourquoi pas (1,1)

Donc, vous pensez que la valeur retournée du Func sera (1 , 1) . Si vous ne savez pas quelle est la fonction, je pense que je comprends pourquoi vous pensez que cela se produira. Je suppose que avec ces paramètres dans la déclaration de retour de la fonction: xxx

x sera diminué par un, ce qui le fait 1 (lorsque l'entrée est (2, 0) ), car 2 - 1 = 1 . Et en utilisant ce x dans x + ans , fait 1 + 0 = 1 . Entraînant une valeur retournée de (1,1) .

mais comme dit, ce n'est pas vrai. Les valeurs ne sont pas calculées de cette façon, ce ne sont que des paramètres donnés à la fonction afin de pouvoir les traiter à l'intérieur.
De plus, comme dit, la fonction ne retournera que 0 , qui est un entier. Cela rend impossible de renvoyer un type de tuple comme (1,1) .


0 commentaires