Ce %
într-un calcul? Pot't par să se rezolve ceea ce face.
Funcționează o sută de calcul, de exemplu: 4 % 2
este aparent egale cu 0. Cum?
% (modulo) operatorul dă restul la împărțirea primul argument de-al doilea. Numerice argumentele sunt în primul rând convertit la un tip comun. Un zero drept argument ridică ZeroDivisionError excepție. Argumentele pot fi numere în virgulă mobilă, de exemplu, de 3,14%0.7 este egală cu 0,34 (din 3.14 este egal cu 4*0.7 + 0.34.) Operatorul modulo întotdeauna dă un rezultat cu același semn ca al doilea operand (sau zero); valoarea absolută a rezultatului este strict mai mică decât valoarea absolută a celui de-al doilea operand [2].
Luate de la http://docs.python.org/reference/expressions.html
Exemplul 1:
6% 2
se evaluează la 0
pentru că's nici restul dacă 6 este împărțit de 2 ( 3 ori ).
Exemplu 2: 7% 2
se evaluează la 1
pentru că's un rest de " 1 " atunci când 7 este împărțit de 2 ( 3 ori ).
Deci, pentru a rezuma că, se întoarce restul împărțirii funcționare, sau " 0 " dacă nu există nici un rest. Deci 6% 2
înseamnă a găsi restul de 6 împărțit la 2.
Oarecum off topic, cea %
este de asemenea folosit în șirul de formatare operațiuni, cum ar fi %=
pentru a înlocui valori într-un șir:
>>> x = 'abc_%(key)s_'
>>> x %= {'key':'value'}
>>> x
'abc_value_'
Din nou, off topic, dar se pare a fi un pic documentat caracteristică care mi-a luat ceva timp pentru a urmări în jos, și am crezut că a fost legat de Pitoni modulo calcul pentru care acest lucru ATÂT de pagini rândurile extrem.
O expresie ca x % y
se evaluează la restul x ÷ y
- ei bine, din punct de vedere tehnic este "modulul" în loc de "memento" deci rezultatele pot fi diferite dacă sunteți compararea cu alte limbi în care %
e restul operator. Există unele diferențe subtile (dacă sunteți interesat în consecințele practice a se vedea, de asemenea, "de Ce Python's Integer Divizia de Pardoseli" de mai jos).
Prioritate este aceeași ca operatorii /
(divizia a) și *
(multiplicare).
>>> 9 / 2
4
>>> 9 % 2
1
%
este, de asemenea, (învechit) șir de interpolare operator, asa ca ai grija, dacă vin dintr-o limbă cu automate de turnare de tip (cum ar fi PHP sau JS) în cazul în care o astfel de expresie'12' % 2 + 3
este legal: în Python se va duce în TypeError: nu toate argumentele transformat în șirul de formatare
care, probabil, va fi destul de confuz pentru tine.
[update pentru Python 3]
Utilizator n00p comentarii: 9/2 este 4.5 în python. Ce trebuie să faci integer division astfel: 9//2 dacă doriți python să-ți spun cât de multe obiecte întregi este lăsat după divizare(4). Pentru a fi precis, integer division folosit pentru a fi implicit în Python 2 (tine minte, acest răspuns este mai mare decât băiatul meu care este deja în școală și la timp 2.x au fost mainstream):
$ python2.7
Python 2.7.10 (default, Oct 6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 9 / 2
4
>>> 9 // 2
4
>>> 9 % 2
1
În moderne de Python 9 / 2 "rezultate" 4.5
într-adevăr:
$ python3.6
Python 3.6.1 (default, Apr 27 2017, 00:15:59)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 9 / 2
4.5
>>> 9 // 2
4
>>> 9 % 2
1
[update] Utilizator dahiya_boy cerut în comentariu sesiune:
Î Poți să-mi explici de ce
-11 % 5 = 4
- dahiya_boy Acest lucru este ciudat, nu? Dacă încercați acest lucru în JavaScript:
> -11 % 5
-1
%
este "restul" operator în timp ce în Python este "modulul" (ceas matematica) operator.
Puteți obține explicația direct din GvR: Edit - dahiya_boy În Java și iOS
-11 % 5 = -1
întrucât în python și ruby-11 % 5 = 4
. Ei bine de jumătate din motivul este explicat de Paulo Scardine, iar restul de explicație este mai jos aici În Java și iOS,%
dă restul asta înseamnă că dacă împărțiți 11 % 5 dăCoeficient = 2 și restul = 1
și -11 % 5 dă Câtul = -2 și restul = -1. **Mostre de cod în swift iOS.** [![introduceți descrierea imaginii aici][1]][1] Dar când ne-am vorbesc despre în python își dă ceasul modulului. Și lucrările sale cu formula de mai jos
mod(a,n) = a - {n Floor(o/n)}Asta înseamnă,
mod(11,5) = 11 - {5 Podea(11/5)} => 11 - {5 2}Deci,
mod(11,5) = 1Și
mod(-11,5) = -11 - 5 Podea(11/5) => -11 - {5 * (-3)}Deci,
mod(-11,5) = 4` Mostre de cod în python 3.0. [![introduceți descrierea imaginii aici][2]][2]de Ce Python's Divizie Întreg Etaje
am fost întrebat (din nou) astăzi pentru a explica de ce divizie întreg în Python se întoarce podea de rezultat, în loc de trunchiere spre zero ca C.
Pentru numere pozitive, nu's nici o surpriză:
>>> 5//2
2
Dar dacă unul dintre operanzi este negativ, rezultatul este, de podea, de exemplu, rotunjite de zero (spre minus infinit):
>>> -5//2
-3
>>> 5//-2
-3
Acest lucru perturbă unii oameni, dar există un bun motiv matematic. Împărțirii întregi funcționare (//) și de fratele ei, la operație modulo (%), du-te împreună și să satisfacă o frumoasă relație matematică (toate variabilele sunt numere întregi):
a/b = q with remainder r
astfel că
b*q + r = a and 0 <= r < b
(presupunând că a și b sunt >= 0).
Dacă vrei ca relația să se extindă negativ pentru o (ținerea b pozitiv), aveți două opțiuni: dacă trunchiați q spre zero, r va deveni negativ, astfel încât invariante modificări la 0 <= abs(r) < în caz contrar, puteți podea q spre minus infinit, și rămâne invariant 0 <= r < b. [update: fix acest para]
În matematică teoria numerelor, matematicieni prefera întotdeauna alegerea din urmă (a se vedea de exemplu [Wikipedia][3]). Pentru Python, am făcut aceeași alegere, deoarece există unele aplicații interesante de operație modulo în cazul în care semnul este neinteresant. Ia în considerare a lua un POSIX amprentă de timp (câteva secunde de la începutul anului 1970) și transformându-l în timp de zi. Deoarece există 24*3600 = 86400 de secunde într-o zi, acest calcul este pur și simplu t % 86400. Dar dacă ar fi să-și exprime ori înainte de 1970, folosind numere negative, "trunchia spre zero" regula ar da un sens rezultatul! Folosind podea regula totul funcționează bine.
Alte aplicații de am'am crezut că sunt calcule de pixel poziții în grafica pe calculator. Am'm sigur sunt mai multe.
Pentru b negativ, de altfel, totul se răstoarnă, și invariante devine:
0 >= r > b.
Deci, de ce nu't C face în acest fel? Probabil că hardware-ul nu - 't face acest lucru la momentul C a fost proiectat. Și hardware-ul, probabil, n't aceasta din cauză că în cele mai vechi hardware, numerele negative au fost reprezentate ca "semn + magnitudinea" mai degrabă decât doi's a completa reprezentare utilizate în aceste zile (cel puțin pentru numere întregi). Primul meu calculator a fost un Control de Date mainframe și a folosit-o's completa pentru numere întregi precum și plutește. Un model de 60 cele negative, zero!
Tim Peters, cine știe unde toate Python's virgulă mobilă schelete îngropate, și-a exprimat unele vă faceți griji despre dorința mea de a extinde aceste reguli în virgulă mobilă modulo. El's, probabil, dreptate; a trunchia-spre-negativ-infinity regula poate provoca pierderea de precizie pentru x%1.0 când x este un foarte mic număr negativ. Dar asta's nu este suficient pentru mine pentru a rupe întregi modulo, și // este strâns cuplat la asta.
PS. Rețineți că eu sunt, folosind // în loc de / -- aceasta este sintaxa Python 3, și, de asemenea, permise în Python 2 pentru a sublinia faptul că știi că ești invocarea împărțirii întregi. / Operatorul în Python 2 este ambiguu, deoarece se întoarce un rezultat diferit pentru doi operanzi întregi decât pentru un int și float sau două flotoare. Dar asta's o cu totul altă poveste; vezi PEP 238.
Postat de Guido van Rossum la 9:49 AM
Modulul este o operație matematică, uneori descris ca "ceas aritmetică." mi se pare că, descriindu-l ca pe un simplu restul este înșelătoare și confuz pentru că maschează adevăratul motiv pentru care este folosit atât de mult în informatică. Este într-adevăr este folosit să-și încheie în jurul valorii de cicluri.
Cred că de un ceas: să Presupunem că te uiți la ceas în "armata" de timp, în cazul în care intervalul de ori merge de la 0:00 - ora 23.59. Acum, dacă ai vrut să se întâmple ceva în fiecare zi, la miezul nopții, ce-ar vrea la ora actuală mod 24 să fie zero:
dacă (ore % 24 == 0):
Vă puteți gândi la toate orele din istorie ambalaj în jurul valorii de un cerc de 24 de ore de peste si peste și ora curentă a zilei este că infinit de mult numarul mod 24. Este o mult mai profundă concept decât doar un rest, este o modalitate matematică de a face cu cicluri și este foarte important în informatică. Este folosit, de asemenea, să-și încheie în jurul valorii de rețele, permițându-vă pentru a crește indicele și de a folosi modul de a încheia înapoi la începutul după ce ajunge la sfârșitul șirului.
% Operatorul Modulo poate fi, de asemenea, utilizat pentru siruri de caractere de imprimare (la fel ca în C) definită pe Google https://developers.google.com/edu/python/strings.
# % operator
text = "%d little pigs come out or I'll %s and %s and %s" % (3, 'huff', 'puff', 'blow down')
Acest lucru pare să pic off topic, dar va ajuta cu siguranță pe cineva.
x % y
se calculează restul diviziei " x "împărțită" y " în cazul în care coeficientul este un număr întreg. Restul are semnul de "y".
Pe Python 3 calculul randamentelor 6.75
; acest lucru este pentru că /
are o adevărată diviziune, nu împărțirii întregi ca (implicit) pe Python 2. Pe Python 2 1 / 4
dă 0, ca rezultat se rotunjește în jos.
Împărțirii întregi se poate face pe Python 3, cu //
operator, astfel, pentru a ajunge la 7, ca urmare, le poate executa:
3 + 2 + 1 - 5 + 4 % 2 - 1 // 4 + 6
De asemenea, puteți obține Python stil divizia pe Python 2, doar prin adăugarea de linie
from __future__ import division
ca prima sursa o linie de cod în fiecare fișier sursă.
Modul operator, este folosit pentru restul divizia de numere întregi, de obicei, dar în Python poate fi folosit pentru numere în virgulă mobilă.
http://docs.python.org/reference/expressions.html
% (modulo) operatorul dă restul la împărțirea primul argument de-al doilea. Numerice argumentele sunt în primul rând convertit la un tip comun. Un zero drept argument ridică ZeroDivisionError excepție. Argumentele pot fi numere în virgulă mobilă, de exemplu, de 3,14%0.7 este egală cu 0,34 (din 3.14 este egal cu 4*0.7 + 0.34.) Operatorul modulo întotdeauna dă un rezultat cu același semn ca al doilea operand (sau zero); valoarea absolută a rezultatului este strict mai mică decât valoarea absolută a celui de-al doilea operand [2].
Fi conștienți de faptul că
(3+2+1-5) + (4%2) - (1/4) + 6
chiar și cu paranteze rezultate în 6.75 în loc de 7, dacă calculate în Python 3.4.
Și '/' operatorul nu este atât de ușor de înțeles, prea (python2.7): a încerca...
- 1/4
1 - 1/4
Acest lucru este un pic off-topic aici, dar ar trebui să fie luate în considerare atunci când evaluează expresia de mai sus :)
de obicei , dacă împărțim două numere , se va reveni restul de ea:
Ia acest exemplu:===> 10 % 3 = ?..... da, aceasta este de 1, de Ce ?
10 / 3 = 3 ===> 3 * 3 = 9 ==> 10 - 9 = 1
Este, ca și în multe C-cum ar fi limbi străine, restul sau operație modulo. Vezi documentația pentru tipuri numerice — int, float, long, complex.
A fost greu pentru mine pentru a găsi cu ușurință cazuri de utilizare specifice pentru utilizarea de % on-line ,de exemplu, de ce nu faci fracționată modul de diviziune sau negativ modul divizia rezultat în răspunsul pe care-l are. Sper că acest lucru ajută la clarificarea întrebări ca aceasta:
Modul De Diviziune În General:
Modulul divizia returnează restul de matematică divizia operațiuni. Aceasta se face după cum urmează:
Spunem că avem un dividend de 5 și divizor al lui 2, următoarele divizia operațiune ar fi (echivalată cu x):
dividend = 5
divisor = 2
x = 5/2
x_int = 5 // 2 ( integer division în python folosește bară oblică dublă)
x_int = 2
x_mult = x_int * divizor x_mult = 4
dividend - x_mult = 1
5 % 2 = 1
Aplicația pentru a aplica modul de a o fracțiune
Example: 2 % 5
Calculul modul atunci când este aplicat la o fracțiune este același ca mai sus; cu toate acestea, este important să rețineți că integer division va duce la o valoare de zero atunci când divizor este mai mare decât dividendul:
dividend = 2
divisor = 5
Împărțirii întregi rezultate din 0 întrucât, prin urmare, atunci când pasul 3 de mai sus este realizată, valoarea dividendului se realizează prin (scade de la zero):
dividend - 0 = 2 —> 2 % 5 = 2
Aplicația pentru a aplica modul de a negativ
Etaj diviziunea are loc în cadrul căreia valoarea împărțirii întregi este rotunjită până la cea mai mică valoare întreagă:
import math
x = -1.1
math.floor(-1.1) = -2
y = 1.1
math.floor = 1
Prin urmare, atunci când faci integer division s-ar putea obține un rezultat diferit decât vă așteptați!
Aplicarea pașii de mai sus de pe urma dividendelor și divizor ilustrează modul concept:
dividend: -5
divisor: 2
Pasul 1: Aplica integer division
x_int = -5 // 2 = -3
Pasul 2: se Înmulțește rezultatul împărțirii întregi de divizor
x_mult = x_int * 2 = -6
Pasul 3: se Scade din dividende de la înmulțit variabilă, observa dublu negativ.
dividend - x_mult = -5 -(-6) = 1
Prin urmare:
-5 % 2 = 1
L's o operație modulo http://en.wikipedia.org/wiki/Modulo_operation
http://docs.python.org/reference/expressions.html
Deci, cu ordinul de operațiuni, care funcționează la
(3+2+1-5) + (4%2) - (1/4) + 6
(1) + (0) - (0) + 6
Șapte
1/4=0 pentru că ne-am're face integer math aici.
A % (modulo) operatorul dă restul la împărțirea primul argument de-al doilea. Numerice argumentele sunt în primul rând convertit la un tip comun.
3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6 = 7
Aceasta se bazează pe operator de prioritate.
Am găsit că cel mai simplu mod de a înțelege modul operator (%) este prin diviziune lung. Este restul și pot fi utile în determinarea unui număr să fie par sau impar:
4%2 = 0
2
2|4
-4
0
11%3 = 2
3
3|11
-9
2