2017-08-24 3 views
1

J'ai créé cette ligne de code aujourd'hui qui détermine si un nombre divise uniformémentUn moyen de raccourcir ce code?

if (numerator/denominator * denominator) == numerator: 
    print "Divides evenly!" 
else: 
    print "Doesn't divide evenly." 

Pourtant, je suis tombé sur un problème lors de la division par 0 comme je le voulais encore me dire si elle diviserait même si le dénominateur était 0 en regardant le numérateur et en voyant si c'était pair ou impair. Je suis venu avec ceci:

if denominator != 0 and (numerator/denominator * denominator) == 
numerator: 
    print "Divides evenly!" 
elif denominator == 0 and numerator % 2 == 0: 
    print "Divides evenly!" 
else: 
    print "Doesn't divide evenly." 

Y at-il un moyen de raccourcir cela? Aussi, est-il possible de ne pas avoir à ajouter la nouvelle déclaration 'elif'?

+1

ne sera pas denominater annuler ici? – Joe

+3

Je pense que ce serait mieux adapté sur https://codereview.stackexchange.com/ – bummi

+1

Je suppose que vous comptez sur la division entière '//', qui est nécessaire dans Py3. 'numérateur/dénominateur * dénominateur) == numérateur' est équivalent à' numérateur% dénominateur == 0'. Diviser par «0» est indéfini et il est inutile de dire que cela divise uniformément. – AChampion

Répondre

3

En bref, si le denominator est 0, vous voulez qu'il soit 2:

if denominator == 0: 
    denominator = 2 

if numerator % denominator == 0: 
    print "Divides evenly!" 
else: 
    print "Doesn't divide evenly." 

ou encore plus court:

if numerator % (denominator or 2) == 0: 
    print "Divides evenly!" 
else: 
    print "Doesn't divide evenly." 
+0

Merci! Je vais certainement utiliser ça! – ThatOneGenie

0
def fun(n,d): 
    return (d==0 and n%2==0) or (d!=0 and n%d==0) 
+1

Utilisez True et False au lieu de 1 et 0. Utilisez des noms significatifs. Vous pouvez renvoyer le résultat des conditions directement. – Daniel

+0

Merci. Edité. – akp

+0

Bien que cet extrait de code puisse résoudre le problème, il n'explique ni pourquoi ni comment il répond à la question. S'il vous plaît [inclure une explication pour votre code] (// meta.stackexchange.com/q/114762/269535), car cela aide vraiment à améliorer la qualité de votre message. Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. ** Flaggers/reviewers: ** [Pour les réponses au code comme celui-ci, downvote, ne pas supprimer!] (// meta.stackoverflow.com/a/260413/2747593) – Patrick