0
votes

Pourquoi mon relevé de retour ne montre aucune sortie?

J'essayais de résoudre le problème suivant: Dessinez un modèle d'étoile qui augmente à chaque étape (1ère étape: 1 étoile, 2ème étape: 2 étoiles). E.G.

def string(inp):
    for i in range (inp):
        return  i*"*"

print (string(5))


3 commentaires

Le retour n'imprime rien. Vous retournez à la première itération de la boucle au lieu d'imprimer tous les éléments ou de les concaténer


Ce que vous décrivez ne correspond pas au code. "Il donne la production mais imprime aucun" est le comportement d'une fonction impression mais non retour , qui est transmis à Imprimer (FUNC ())


Il imprime un blanc car votre gamme commence de zéro


4 Réponses :


1
votes

plage Démarre sur 0 et retour termine une fonction, de sorte que signifie "code> chaîne retournera toujours un String vide.

Voici une option possible pour obtenir le résultat attendu: xxx

sortie: xxx

Si vous devez imprimer en dehors de la fonction, vous pouvez utiliser un générateur : xxx


2 commentaires

Merci. J'ai essayé le premier bloc de code que vous avez montré. Mais puis-je savoir, pourquoi imprime-t-il le résultat, même si vous n'appelez pas la fonction comme ceci: "Imprimer (Stars (2))"? N'est-il pas obligatoire d'écrire "Imprimer" avant d'appeler une fonction?


@ktas non, pas du tout. Imprimer Imprime les choses, peu importe l'endroit où il est appelé. En fait, impression est lui-même une fonction et faire impression (impression (rien)) est inutile. Peut-être que vous êtes habitué à Shell Scripting, où la sortie est imprimée au lieu d'être renvoyée?



1
votes

Utilisation de retour n'imprimera pas une sortie, utilisez quelque chose comme ceci:

for i in range(inp + 1):


2 commentaires

"Utiliser le retour n'imprimera pas de sortie" - c'est un moyen déroutant de la mettre, car l'op l'a écrit afin que la valeur de retour de la fonction soit imprimée. De plus, plage commence à partir de 0 par défaut, vous allez donc obtenir une ligne vide. Utilisez plutôt la plage (1, INP + 1) .


Merci pour la suggestion, mais j'ai essayé d'obtenir la sortie attendue en écriture (1, INP + 1). Néanmoins, ça ne fait rien.



-1
votes

Une fonction de re-entrant qui conserve l'état entre les appels est un générateur. Pour faire une fonction de générateur, modifiez le mot-clé retour à Rendement : xxx

appelant cette version de chaîne retournera un générateur qui donne une nouvelle ligne de votre sortie souhaitée à chaque itération.

à imprimer: xxx

à imprimer tout à la fois: xxx


0 commentaires

1
votes

Je traduirai le code en anglais clair, comme je peux explicitement que possible: xxx

espérons que le problème est évident: nous ne pouvons être effectués que avec une tâche une fois et i est égal à 0 à ce point, notre valeur calculée est donc une chaîne vide.

Quand j'écris impression , il me donne la sortie étoile mais me donnant également Aucun

du comportement décrit, je suppose que vous voulez dire que vous avez essayé de remplacer le mot retour dans votre code avec Imprimer , donnant: xxx

qui produit le triangle, bien sûr, sauf que

  • car i sera égal à 0 la première fois par la boucle, une ligne vide est imprimée; Et puisque i sera égal à 4 le dernier temps de la dernière à travers la boucle, il n'y a pas de ***** Ligne.
  • à la fin, Aucun est imprimé, comme vous le décrivez. Cela se produit car la valeur calculée par string est la valeur spéciale nucle , qui est alors imprimer éd car vous avez demandé qu'il soit imprimé (< Code> Imprimer (String (5)) ).

    en python, chaque appel à une fonction retournera une valeur lorsqu'il retourne, que vous utilisiez ou non retour et si vous spécifiez ou non une valeur à retour < / code>. La valeur par défaut est cette valeur spéciale Aucun , qui est un objet unique de son propre type. Il s'affiche avec le texte Aucun lorsqu'il est imprimé, mais est différent d'une chaîne avec ce texte (de la même manière que l'entier 5 est différent de la chaîne " 5 ").

    Puisse-je savoir pourquoi retour ou impression ne fonctionne pas correctement?

    Ils travaillent exactement comme conçu. Retour Spécifie le résultat de l'appelant la fonction et ne peut arriver qu'une fois par fonction, et ne provoque rien à afficher. impression affiche ce qu'il est donné.

    si vous souhaitez retourner plusieurs valeurs d'un appel, vous devez contourner cette restriction - soit par Utilisation d'un générateur à la place (comme dans les réponses de Madphysicist ou @ Wjandrea), ou en utilisant une seule donnée structurée contenant toutes ces valeurs (par exemple, une liste ou une tuple).


0 commentaires