[! [entrez la description de l'image ici] [1]] [1]
La première fonction renvoie la somme des chiffres récursifs de ce nombre. La deuxième fonction renvoie le dictionnaire où la clé est reg_dig_sum et la valeur est le décompte de ce nombre. quand je l'ai testé, il a échoué en me donnant ceci
elf.assertEqual (sum_dict [0], 1)
AssertionError: 0! = 1
Comment puis-je résoudre ce problème?
def reg_dig_sum(n):
x = sum(int(digit) for digit in str(n))
if x < 10:
return x
else:
return reg_dig_sum(x)
def distr_of_rec_digit_sums(low=0, high=1500):
distr = {}
for x in range(low, high):
if reg_dig_sum(x) not in distr:
distr[reg_dig_sum(x)] = 0
else:
distr[reg_dig_sum(x)] += 1
return distr
3 Réponses :
1 ou en supprimant la condition else . defaultdict pour prendre en charge l'initialisation pour vous. from collections import defaultdict
def distr_of_rec_digit_sums(low=0, high=1500):
distr = defaultdict(int)
for x in range(low, high):
distr[reg_dig_sum(x)] += 1
return distr
defaultdict def distr_of_rec_digit_sums(low=0, high=1500):
distr = {}
for x in range(low, high):
if reg_dig_sum(x) not in distr:
distr[reg_dig_sum(x)] = 1 # this should be initialized to 1 for first occurance.
else:
distr[reg_dig_sum(x)] += 1
return distr
@Chris Question est déjà incomplète.J'ai fourni une description en une ligne, mais sans plus de précision de OP, c'est difficile à expliquer.
Je suis d'accord: la question n'est pas claire. Il est donc très difficile d’apporter une réponse utile. Et cela ne change rien au fait que le code doit être accompagné d'une explication.
@Chris a mis à jour et expliqué ma solution actuelle
@Poojan Merci de votre aide. Ma question est que je ne sais pas ce qui ne va pas avec mes codes. Il échoue aux tests. J'ai donc changé mon code comme vous le suggérez mais il a toujours échoué. Désespéré ici
ok les gars j'ai manqué de lire que le haut est inclusif: (donc je viens de changer pour x dans la gamme (bas, haut + 1) et ça marche très bien! Merci à tous !!!!
Voir les commentaires et réponses précédents concernant le changement de 0 en 1
Essayez également d'utiliser un code beaucoup plus simple pour reg_dig_sum avec le même résultat:
def reg_dig_sum(n):
return (n - 1) % 9 + 1
oui mais alors je ne peux pas utiliser la fonction reg_dig_sum () dans une autre fonction pour être une clé de dictionnaire ..
Je ne suis pas sûr de bien comprendre votre question, mais je ne vois aucune différence pour l'utilisation de reg_dig_sum () à partir d'autres fonctions ou de la portée globale - entre votre code et mon code. Mais ma version est beaucoup plus rapide et le résultat est le même. La seule différence si vous utilisez zéro comme argument - alors vous devez spécifier le résultat explicitement
J'ai utilisé une fonction simple pour faire cela pendant longtemps:
def sum_digits(num):
if num <= 9:
return num
num = int(num / 10) + num - int(num / 10) * 10
''' takes the last digit of num off, and adds it to num. '''
return sum_digits(num)
Il y a beaucoup de choses que vous pouvez trouver avec cette fonction. Essayez ceci sur la série Power, et vous verrez ce que je veux dire. En fait, toute fonction mathématique que vous pourriez utiliser sur une droite numérique renverra des motifs intéressants; cette fonction vous aide à en voir une partie.
D'après ce que j'ai compris, cette ligne
distr [reg_dig_sum (x)] = 0devrait êtredistr [reg_dig_sum (x)] = 1.Merci j'ai accepté!
@KateKiatsiri, vos questions trouveront une réponse plus facile si vous les formatez correctement, comme Chris l'a indiqué ci-dessus. Cela aide vraiment; il peut être difficile pour les nouveaux arrivants dans la communauté de s'implanter.