8
votes

Modulo et ordre de fonctionnement en python

dans Zed Shaw's Apprenez Python la voie difficile (page 15-16), il a un exemple d'exercice xxx

Le résultat est 97 (essayez-le!)

Je ne peux pas voir l'ordre des opérations pouvant faire cela.

100 - 25 = 75
3% 4 = 0
ou (100-25 * 3) = 225% 4 = ??? Mais de toute façon, pas 97, je ne pense pas ...

Un exemple similaire est 3 + 2 + 1 - 5 + 4% 2 - 1/4 + 6 quels rendements 7

Dans quel ordre les opérations sont-elles effectuées?


4 commentaires

Docs.python.org/reeference/expressions.html#smary


Vous avez même eu la multiplication et la soustraction incorrecte, ils utilisent le même ordre que dans les mathématiques de base.


Il aurait dû expliquer cela. Encore une fois, je suis triste de conclure qu'il y a de meilleurs tutoriels de Python. Essayez de «plonger dans Python».


WTF, 3% 4 == 0 ? n'a même pas de sens, 3% 4 == 3 ...


8 Réponses :


3
votes

multiplication >> MOD >> Soustraction

In [3]: 25 * 3
Out[3]: 75

In [4]: 75 % 4
Out[4]: 3

In [5]: 100 - 3
Out[5]: 97


1 commentaires

Ce n'est pas seulement une question de ce qui apparaît en premier. Par exemple, 2 ** 3 ** 4 == 2 ** (3 ** 4) , car l'associativité de ** est juste à gauche.



31
votes

Pour le premier exemple: * et % a priorité sur - , donc nous évaluons pour la première fois 25 * 3% 4 < / code>. * et % avoir la même priorité et la même associativité de gauche à droite, donc nous évaluons de gauche à droite, en commençant par 25 * 3 . Cela donne 75 . Nous évaluons maintenant 75% 4 , cédant 3 . Enfin, 100 - 3 est 97 .


3 commentaires

Merci à tout cela, votre réponse et ceux qui suivent sont très utiles, même les références, et j'ai la plupart ne font pas vraiment cela clair, et tout le concept de modulo est un peu étranger pour moi ..Bien que je reçois jamais eu le cas d'utilisation. (Pour le modulo, c'est ..)


Une horloge murale standard est "MODULO 60" car une fois que vous avez atteint 59 minutes et ajouter 1 minute, vous obtenez 0 (== 60)


Le modulo n'est que le reste de la division. Savoir quand nous pouvons être délicats, mais le concept est enraciné dans les mathématiques de base.



0
votes

Voici comment ça se passe:

'*' et '%' ont la même prégrése, alors évaluez ceux de gauche à droite.

  1. 25 * 3 = 75
  2. 75% 4 = 3 (4 * 18 = 72; reste est 3)
  3. 100 - 3 = 97

    q.e.d.


1 commentaires

Tout avec le même préséance n'est pas évalué de gauche à droite - par ex. 2 ** 3 ** 4 == 2 ** (3 ** 4) est évalué de droite à gauche.



0
votes

Problème d'origine: 100 - 25 * 3% 4

En réalité, évaluer 25 * 3 et 75% de 4 est incorrect et fonctionnant de manière commode pour ce problème.

Quel est le% en python est un opérateur de modulus où x% y donne le reste de x / y . Dans ce cas, ce qui s'est passé était que 75/4 est 18, avec un reste de 3, c'est pourquoi 100 - 3 = 97 .

N'essayez pas de multiplier les pourcentages, c'est une erreur courante.


0 commentaires

0
votes

Dans la seconde exampe,% a le même ordre que * donc nous obtenons 3 + 2 + 1-5 + 4% 2-1 / 4 + 6 = 3 + 2 + 1-5 + (4% 2) - (1/4) + 6 = 1 + (4% 2) - (1/4) +6 = 1 + 0- (1/4) + 6 = 1- (1/4) + 6 = 0,75 + 6 = 6,75 et c'est ce qu'il dit lorsque je l'essaie de la console, alors tout ce que vous avez fait, vous devez avoir fait quelque chose pour arrondir.


0 commentaires

0
votes

Mathématiques n'est pas mon point fort, alors oui cette question m'a également eu aussi, pour un moment. Mais j'espère que vous trouverez cela utile.

75 divisé par 4 est 18,75 p>

18 multiplié par 4 est 72 (laissant 3 restants à partir du 75) p>

Le calcul est 100- 25 * 3% 4 avec une réponse de 97. Voici comment je l'obtiendrais à l'aide de Pemdas en parlant de la section de la question: P>

#!/bin/python

A = 100
B = 25
C = 3
D = 4
E = B*C # 75
F = E%D # 3
G = A-F # 97
print("B * C ="), E
print("E % D ="), F
print("A - F ="), G


0 commentaires

2
votes

J'ai compris la réponse à votre deuxième question car elle me dérangeait aussi - la réponse de Zac est proche, mais la perte du résultat de 1/4 est à cause de Python 2.x est de tronquer des résultats de la division entier. Donc, c'est d'abord évaluer l'opération de modulo, puis la division (qui, étant donné qu'elle ne flottera pas, est renvoyé comme 0.

3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6
3 + 2 + 1 - 5 + (0) - (0) + 6 
6 - 5 + 6
1 + 6
7


0 commentaires

0
votes

Python évalue% après * mais avant + ou _.

SO, P>

(100 - 25 * 3 % 4)
(100 - 75 % 4)
(100 - 3) 
(97)


0 commentaires