J'essaie de faire un script facile dans Python qui prend un numéro et enregistre dans une variable, triant les chiffres dans les commandes ascendant et décroissante et enregistre les deux variables distinctes. Mise en œuvre Constante de Kaprekar . P>
C'est probablement une question jolie noobaine. Mais je suis nouveau à cela et je n'ai rien trouvé sur Google qui pourrait m'aider. Un site que j'ai trouvé a essayé d'expliquer un moyen d'utiliser des listes, mais cela n'a pas très bien fonctionné. P>
5 Réponses :
>>> y = int(''.join(sorted(str(2314)))) >>> y 1234 >>> int(str(y)[::-1]) 4321
+1. Pour la commande descendante, utilisez l'argument de mots-clés 'inverse': x.sort (inversé = true), trié (..., inverse = true)
Le seul problème est que j'ai un grand nombre, F.ex.: 5896, qui doit être trié comme 5689 et 9865. Son un seul grand nombre.
Vous voulez trier les chiffres des chiffres?
Oui, désolé de ne pas être trop spécifique = /
ascendance = "" .Join (tri) (STR (numéro))); descendre = "" .join (tri) (Str (numéro), Reverse = TRUE));
Trier les chiffres dans les commandes ascendantes et décroissantes: comme ceci: p> et si vous en avez besoin d'être des chiffres à nouveau (pas seulement des cordes), appelez 2020-01-30 p> int () code> sur eux: p>
>>> def kaprekar(number):
... diff = None
... while diff != 0:
... ascending = "".join(sorted(str(number)))
... descending = "".join(sorted(str(number), reverse=True))
... print(ascending, descending)
... next_number = int(descending) - int(ascending)
... diff = number - next_number
... number = next_number
...
>>> kaprekar(2777)
2777 7772
4599 9954
3555 5553
1899 9981
0288 8820
2358 8532
1467 7641
descendant = ascendant [:: - 1] code>
Incidemment, Timsort est O (n) pour des cas comme ceux-ci
Ne fonctionne pas correctement pour ce cas parce que vous devez ajouter des zéros principaux
Je ne sais pas ce que tu veux dire @Mike. Le code donné en 2009 est parfaitement bon pour la mise en œuvre de la fonction Kaprekar, comme indiqué dans la modification 2020-01-30.
@HUGHDBROWN pour 1112 Il convergera à 0 car vous n'ajoutez pas les zéros les plus grands. Ajouter .Zfill (4) fixe cela.
Je ne connais pas la syntaxe Python, mais en pensant le générique, je convertirai la chaîne d'entrée en une matrice de caractères, elles tricent sur le tableau de caractères et le tuydrez enfin. P>
Comme Mark Rushakoff déjà mentionné (mais n'a pas résolu) dans sa réponse, Un moyen de vous assurer que vous avez une chaîne de quatre caractères consiste à utiliser la méthode de la chaîne code> zfill code>. Par exemple: P> str (n) code> ne gère pas numérique
n code> avec des zéros de premier plan, dont vous avez besoin. Pour Opération de Kaprekar . La réponse de HughdBrown de la même manière ne fonctionne pas avec des zéros de premier plan.
>>> str(0043)
'35'
>>> str(0378)
File "<stdin>", line 1
str(0378)
^
SyntaxError: invalid token
Voici une réponse à la question du titre à Perl, avec un parti pris pour trier des nombres à 4 chiffres pour l'algorithme Kaprekar. Dans l'exemple, remplacez «Shift» avec le numéro pour trier. Il trie des chiffres dans un numéro à 4 chiffres avec des cadres supérieurs ($ ASC est trié par ordre croissant, $ DEC est décroissant) et génère un numéro avec des cadres principaux:
my $num = sprintf("%04d", shift); my $asc = sprintf("%04d", join('', sort {$a <=> $b} split('', $num))); my $dec = sprintf("%04d", join('', sort {$b <=> $a} split('', $num)));
S'il s'agit d'une question de devoirs (que cela ressemble à), vous devriez être assez honnête pour l'étiqueter comme tel, et aussi expliquer ce que vous avez essayé jusqu'à présent et où vous avez échoué.
Ce n'est pas un projet de devoirs. J'ai trouvé un article sur Wikipedia: en.wikipedia.org/wiki/6174 et je veux Faites un petit script qui le calcule automatiquement. J'aimerais avoir une école où je pouvais apprendre de python ou d'au moins la programmation plus efficace, mais je suis coincé avec Google (pas que je me plaint) et tout ce que je peux parvenir à sortir de la documentation Python. Si c'était un projet de devoirs, je l'étiqueterais comme un. Mais ce n'est pas.
@Deampoder: assez juste, s'il vous plaît ne pas vous offenser.
La citation de l'article Wikipedia aurait aidé à avoir l'idée que nous trions des chiffres de chiffres, sans trier des listes de chiffres.
@balpha: Aucune infraction prise :) @ hugghdbrown: Cela ne m'avait vraiment pas arrivé depuis dans ma tête, c'était toujours des chiffres et non des listes, aurait dû le rendre plus clair. Merci pour votre aide quand même :)