Fondamentalement, j'ai besoin d'une fonction qui divisera N par deux et retournera le nombre de fois que cela peut être fait.
codage jusqu'à présent: p>
>>> div(4) 2 >>> div(7) 2
8 Réponses :
/ n'effectue pas d'affectation. Puisque vous retournez n et ne changeez pas sa valeur, je pense que vous devriez commencer là. Vos autres astuces sont = et%. P>
Un entier plancher (log (n) / journal (2)) p >
Ou plus court: plancher (log (n, 2)) code>?
Je vois au moins deux façons de le faire:
opération bitwise ( Shift a>): p> et p>
(Notez que je prends vos exemples comme définissant le comportement attendu de la fonction. Comme Tomas et Carl notait, la description n'est pas particulièrement claire.)
Les versions récentes de Python fournissent en fait un bit_length () code> méthode sur des entiers qui facilitent la recherche de la réponse. P>
Bien que cela ne vous aide pas vraiment avec votre question de devoirs (cela vous donne la réponse, mais cela ne vous aide pas à comprendre pourquoi em> C'est la réponse), vous pouvez l'utiliser pour créer une fonction de référence à comparer avec votre réponse réelle: P> def expected(n):
return n.bit_length() - 1
>>> expected(4)
2
>>> expected(7)
2
>>> expected(33)
5
0 code>, 1 code> ou 2 code>. Li>.
n code> sur chaque passage à travers la boucle. Sinon, votre boucle ne finira jamais. Li>
n code> vraiment la valeur que vous voulez retourner? Peut-être que vous devriez faire quelque chose d'autre que vous devriez suivre lorsque vous allez autour de la boucle qui deviendra votre valeur de retour (un regard plus étroit sur certaines des autres réponses suggérées devrait aider à ce point). Li>
ul> p>
L'interprétation est la suivante: combien de fois pouvez-vous la réduire de moitié (jeter le reste) jusqu'à 0; suppose des entiers 32 bits?
>>>print div(100) 6 >>>print div(1000) 9 >>>print div(1025) 10
Voici une fonction qui compte le nombre de fois qu'un chiffre N peut être divisé par un autre numéro P (2 dans ce cas) à l'aide du modulo:
La fonction interne divmod em> est la clé:
En fait, la réponse devrait être 2.
La divisibilité est définie comme suit: Un entier est divisible par un autre entier uniquement si le résultat de cette division est également un entier (pas une fraction, pas de reste). P>
Voir le Définition mathématique . P>
Par exemple, 15 est divisible par 3 et 5 mais pas divisible par 2. Par exemple:
Compte tenu de cette définition, la réponse hautement notée ci-dessus, plancher (log (n) / journal (2) code> est complètement faux. P>
3 ^ 10 = 59,049 Code>
Ce nombre est impair et seulement divisible par 3.
Donc compte-2-divisions (3 ^ 10) = 0 code>
L'expression plancher (journal (3 ^ 10) / journal (2) = 15 code>. P>
Clarifier, étant donné la définition de l'exemple de fonction div (7) = 2, cette réponse est correcte, mais ce n'est pas une divisibilité, c'est autre chose. En fait, c'est exactement cela, le logarithme, la base 2, d'un numéro. En termes d'arithmétique entier, vous informez réellement la puissance de deux qui est la plus proche, mais moins que le numéro d'entrée. Dans l'exemple que j'ai donné ci-dessus, c'est 2 ^ 15, ou 32 768.
Lorsque vous dites que "N peut être divisé en deux", voulez-vous dire que n / 2 est un entier, ou que N / 2> = 1? Votre code actuel vérifie ce dernier, je crois.
Vous devez clarifier si
n code> est un entier, comme autrementn code> peut être divisé à moitié infini.