2017-06-06 3 views
3

J'ai un code écrit qui détermine quels nombres naturels inférieurs ou égaux à 1 000 000 sont des invariants numériques parfaits (ils peuvent être écrits comme la somme de leurs chiffres tous élevés à une puissance égale au chiffre, voir https://en.wikipedia.org/wiki/Perfect_digit-to-digit_invariant) et les exprime comme dans ce formulaire.Code Python pour les invariants chiffres-à-chiffres

def f(n): 
    y = str(n) 
    l = len(y) 
    list = [] 
    for i in range(0,l): 
     list.append(int(y[i])) 
    list2 = [] 
    for i in list: 
     list2.append(i**i) 
    return sum(list2) 

N = 10**6 
n = np.linspace(1,N,N,dtype=int) 
list = [] 
for i in n: 
    if i == f(i): 
     list.append(i) 

list = np.array(list) 

list2 = [] 
for i in list: 
    list2.append(str(i)) 

for i in list2: 
    for j in range(0,len(i)-1): 
     print(i[j],'^',i[j],'+') 
    print(i[-1],'^',i[-1],'=',int(i)) 
    print('----------') 

La sortie que l'exécution de ce code donne est:

1^1 = 1 
---------- 
3^3 + 
4^4 + 
3^3 + 
5^5 = 3435 
---------- 

Le code donne la bonne réponse, mais je veux l'expression 3^3 + 4^4 + 3^3 + 5^5 = 3435 pour apparaître sur une ligne. Y a-t-il un moyen de faire cela? Les instructions par défaut impriment également un retour à la ligne par les instructions

+4

'impression (i [j], '^', i [j], '+', end = '')' –

Répondre

2

. Pour supprimer ce comportement et continuer à imprimer sur la même ligne, ajoutez le paramètre end='' comme ceci:

for i in list2: 
    for j in range(0, len(i)-1): 
     print(i[j],'^',i[j],'+', end='') 
    print(i[-1],'^',i[-1],'=',int(i)) 
    print('----------') 

Alternativement, et plus vous pouvez pythonically remplacer la boucle interne par join() ing la chaîne componets et le formatage de la sortie comme suit:

for i in list2: 
    print(' + '.join(['{0:}^{0:}'.format(x) for x in i]) + ' = {}'.format(i)) 
    print('----------') 
0

essayez l'option end=" " imprimée

for j in range(0,len(i)-1): 
    print(i[j],'^',i[j],'+', end=" ")