2015-04-10 2 views
0

J'ai donc une tâche que j'ai terminée mais il y a une dernière étape où l'impression ne dit rien. Voici mon codeImpression Python aucune

#Copy the definition of function print_chars below 
def print_chars(multiples, char): 
    print_chars= multiples* char 
    print (print_chars) 

#Copy the definition of function sum_arithmetic_seq below 
def sum_arithmetic_seq(n): 
    return n* (n+1)//2 


#Copy the definition of function factorial below 
import math 
def factorial(n): 
    return math.factorial(n) 

#Here's my program 
for N in range(1,7,1): 
    print(N) 
    print('sum:', print_chars(sum_arithmetic_seq(N) ,'*')) 
    print('factorial:', print_chars(factorial(N),'#')) 

La sortie finirait comme ça (je vais juste faire partie parce qu'il est long.)

1 
* 
sum: None 
# 
factorial: None 

How it's supposed to be: 
1 
sum: * 
factorial: # 
+0

Cela signifie simplement que 'print_chars' renvoie' None'. Répare le. –

+0

@ davis-thuy Vous avez remarqué que l'astérisque et ## imprimé avant les étiquettes "somme:" et "factorielle" ... vérifier ma réponse pour comprendre ** pourquoi ** –

Répondre

1

Print_chars ne retourne rien. Faites-le retourner ce que vous imprimez afin que vous puissiez utiliser sa sortie. Dans votre dernière impression, il ne peut pas utiliser la valeur car il n'y a rien là. Changez l'impression pour revenir la réparer.

+0

Merci beaucoup! –

+0

Pas de problème! :) à tout moment! – Zizouz212

0

Solution de travail:
for N in range(1,7,1): print(N) print('sum:', end=" ") print_chars(sum_arithmetic_seq(N) ,'*')) print('factorial:', end=" ") print_chars(factorial(N),'#'))

Raison pour le format involontaire:
Le problème est, vous êtes la fonction print_chars déjà a une déclaration d'impression dans la fonction. Ce que cela signifie est,

lorsque vous faites la déclaration d'appel,

print('sum:', print_chars(sum_arithmetic_seq(N) ,'*'))

La fonction print_chars sera évaluée first qui imprimera * {n fois} puis après la fonction exécute « Somme: » est imprimé. Quelle est la raison pour laquelle le début * faire imprimer avant « somme »

Pour éviter cela,


1. Séparer la déclaration d'impression à « somme » et « factoriel » au préalable

2. Utilisez simplement print_chars(.....) ne le font pas avoir une impression (print_char)) alors vous demandez une valeur de retour à imprimer. qui n'est pas retourné
3. Ou simplement changer le print (print_chars) to a return(print_chars) à l'intérieur de la fonction

+0

Les valeurs écrites dans sys.stdout ne peuvent pas être utilisées ... Il n'y a rien de mal à imprimer, mais Python doit utiliser la valeur plus tard, d'où la nécessité d'une instruction return. – Zizouz212

+0

Vous pouvez avoir des instructions print et return dans la même fonction. – Zizouz212

+0

Oui, je suis d'accord avec vous. J'ai posté la solution de cette façon afin qu'il comprenne pourquoi le **** imprimé avant "somme" et le "AUCUN" était en train d'imprimer. Principalement, pour illustrer les fonctions à l'intérieur de la fonction, l'appel doit être exécuté en premier. –