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))
4 Réponses :
Voici une option possible pour obtenir le résultat attendu: p> sortie: p> Si vous devez imprimer en dehors de la fonction, vous pouvez utiliser un générateur : p> plage code> Démarre sur
0 code> et
retour code> termine une fonction, de sorte que signifie "code> chaîne code> retournera toujours un String vide.
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 CODE> Imprime les choses, peu importe l'endroit où il est appelé. En fait,
impression code> est lui-même une fonction et faire
impression (impression (rien)) code> est inutile. Peut-être que vous êtes habitué à Shell Scripting, où la sortie est imprimée au lieu d'être renvoyée?
Utilisation de retour n'imprimera pas une sortie, utilisez quelque chose comme ceci:
for i in range(inp + 1):
"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 code> commence à partir de 0 par défaut, vous allez donc obtenir une ligne vide. Utilisez plutôt la plage
(1, INP + 1) code>.
Merci pour la suggestion, mais j'ai essayé d'obtenir la sortie attendue en écriture (1, INP + 1). Néanmoins, ça ne fait rien.
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é appelant cette version de à imprimer: p> à imprimer tout à la fois: p> retour code> à
Rendement code>:
chaîne code> retournera un générateur qui donne une nouvelle ligne de votre sortie souhaitée à chaque itération. p>
Je traduirai le code en anglais clair, comme je peux explicitement que possible: espérons que le problème est évident: nous ne pouvons être effectués que avec une tâche une fois et Quand j'écris du comportement décrit, je suppose que vous voulez dire que vous avez essayé de remplacer le mot qui produit le triangle, bien sûr, sauf que p> en python, chaque appel à une fonction retournera une valeur lorsqu'il retourne, que vous utilisiez ou non Puisse-je savoir pourquoi Ils travaillent exactement comme conçu. si vous souhaitez i code> est égal à 0 à ce point, notre valeur calculée est donc une chaîne vide. P>
impression code>, il me donne la sortie étoile mais me donnant également
Aucun code> p> p>
BlockQuote>
retour code> dans votre code avec
Imprimer code>, donnant: p >
i code> sera égal à 0 la première fois par la boucle, une ligne vide est imprimée; Et puisque
i code> sera égal à
***** code > Ligne. LI>
Aucun code> est imprimé, comme vous le décrivez. Cela se produit car la valeur calculée par
string code> est la valeur spéciale
nucle code>, qui est alors
imprimer code> éd car vous avez demandé qu'il soit imprimé (< Code> Imprimer (String (5)) Code>). LI>
ul>
retour code> et si vous spécifiez ou non une valeur à
retour < / code>. La valeur par défaut est cette valeur spéciale
Aucun code>, qui est un objet unique de son propre type. Il s'affiche avec le texte
Aucun code> 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 code> est différent de la chaîne
" 5 " code>). P>
retour code> ou
impression code> ne fonctionne pas correctement? p>
blockQuote>
Retour CODE> 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 code> affiche ce qu'il est donné. p>
retourner code> plusieurs valeurs d'un appel, vous devez contourner cette restriction - soit par Utilisation d'un générateur em> à 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). P > p>
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 code> impression code> mais non
retour code>, qui est transmis à
Imprimer (FUNC ()) Code>
Il imprime un blanc car votre gamme commence de zéro