Co to %
w obliczeniach? Nie potrafię zrozumieć, co to robi.
Czy działa procent obliczeń, na przykład: 4 % 2
jest najwyraźniej równy 0. Jak?
Operator% (modulo) zwraca resztę z podziału pierwszego argumentu na drugi. Argumenty liczbowe są najpierw konwertowane na typ wspólny. Zerowy argument zerowy podnosi wyjątek ZeroDivisionError. Argumentami mogą być liczby zmiennoprzecinkowe, np. 3,14% 0,7 równa się 0,34 (ponieważ 3,14 równa się 4 * 0,7 + 0,34.) Operator modulo zawsze daje wynik o takim samym znaku jak drugi argument (lub zero); wartość bezwzględna wyniku jest ściśle mniejsza niż wartość bezwzględna drugiego argumentu [2].
Zaczerpnięte z http://docs.python.org/reference/expressions.html
Przykład 1:
6%2
ocenia na, 0
ponieważ nie ma reszty, jeśli 6 jest podzielone przez 2 (3 razy).
Przykład 2 : 7%2
ocenia na, 1
ponieważ pozostała część, 1
gdy 7 jest dzielone przez 2 (3 razy).
Podsumowując, zwraca pozostałą część operacji dzielenia lub 0
jeśli nie ma żadnej pozostałej części. Więc 6%2
pomocą znaleźć resztę 6 podzielonej przez 2.
- 21 % 4
ma 3 w Pythonie.-11%5 = 4
?Nieco tematycznie
%
jest również używany w operacjach formatowania ciągów, takich jak%=
zamiana wartości na ciąg:Ponownie, poza tematem, ale wydaje się, że jest to trochę udokumentowana funkcja, która zajęła mi trochę czasu, aby ją wyśledzić, i pomyślałem, że jest to związane z obliczeniami modulo Pythona, dla których ta strona SO zajmuje wysoką pozycję.
źródło
%=
nie pojawia się na tej stronie%
Operator został wybrany, ponieważ odzwierciedla specyfikacje procentowe użyte w samym ciągu.Wyrażenie podobne
x % y
jest do resztyx ÷ y
- cóż, technicznie jest to „moduł” zamiast „przypomnienia”, więc wyniki mogą być inne, jeśli porównasz z innymi językami, w których%
operator reszty. Istnieją pewne subtelne różnice (jeśli jesteś zainteresowany praktycznymi konsekwencjami, zobacz także poniżej „Dlaczego podłogi Integer Division Pythona” poniżej).Pierwszeństwo jest takie samo jak operatorów
/
(dzielenie) i*
(mnożenie).Python gotcha : w zależności od używanej wersji Pythona
%
jest także (przestarzałym) operatorem interpolacji ciągów, więc uważaj, jeśli pochodzisz z języka z automatycznym rzutowaniem typów (np. PHP lub JS), w którym wyrażenie takie'12' % 2 + 3
jest dozwolone: w Python spowoduje, żeTypeError: not all arguments converted during string formatting
prawdopodobnie będzie to dla ciebie dość mylące.[aktualizacja dla Python 3]
Komentarze użytkownika n00p:
Mówiąc dokładniej, podział liczb całkowitych był domyślnym ustawieniem w Pythonie 2 (uwaga: ta odpowiedź jest starsza niż mój chłopiec, który jest już w szkole i w tamtym czasie 2.x był głównym nurtem):
Rzeczywiście we współczesnych
9 / 2
wynikach Python4.5
:[aktualizacja]
Użytkownik dahiya_boy zapytał w sesji komentowania:
To dziwne, prawda? Jeśli spróbujesz tego w JavaScript:
Wynika to z faktu, że w JavaScript
%
jest operatorem „resztki”, podczas gdy w Pythonie jest operatorem „modułu” (matematyki zegarowej).Możesz uzyskać wyjaśnienie bezpośrednio z GvR :
W Javie i iOS
-11 % 5 = -1
natomiast w Pythonie i Ruby-11 % 5 = 4
.Cóż, połowa przyczyny jest wyjaśniona przez Paulo Scardine , a reszta wyjaśnienia znajduje się poniżej
W Javie i iOS
%
daje resztę, co oznacza, że jeśli podzielisz 11% 5 daje,Quotient = 2 and remainder = 1
a -11% 5 dajeQuotient = -2 and remainder = -1
.Przykładowy kod w szybkim iOS.
Ale kiedy mówimy o pythonie, daje on moduł zegara. I jego praca z poniższym wzorem
mod(a,n) = a - {n * Floor(a/n)}
To znaczy,
mod(11,5) = 11 - {5 * Floor(11/5)} => 11 - {5 * 2}
Więc,
mod(11,5) = 1
I
mod(-11,5) = -11 - 5 * Floor(11/5) => -11 - {5 * (-3)}
Więc,
mod(-11,5) = 4
Przykładowy kod w python 3.0.
źródło
help(divmod)
dokumentuje niezmiennegoq, r = divmod(x y) <==> q*y + r == x
.Moduł jest operacją matematyczną, czasami opisywaną jako „arytmetyka zegara”. Uważam, że opisywanie go jako zwykłej reszty jest mylące i mylące, ponieważ maskuje prawdziwy powód, dla którego jest tak często używany w informatyce. Naprawdę służy do owijania cykli.
Pomyśl o zegarze: załóżmy, że patrzysz na zegar w czasie „wojskowym”, w którym zakres czasów wynosi od 0:00 do 23,59. Teraz, jeśli chcesz, aby coś działo się codziennie o północy, chciałbyś, aby bieżący czas mod 24 wynosił zero:
jeśli (godzina% 24 == 0):
Możesz pomyśleć o wszystkich godzinach w historii, które owijają się w kółko 24 godzin w kółko, a obecna godzina dnia to nieskończenie długi numer mod 24. Jest to znacznie głębsza koncepcja niż tylko reszta, jest to sposób matematyczny radzić sobie z cyklami i jest to bardzo ważne w informatyce. Służy także do owijania tablic, co pozwala zwiększyć indeks i użyć modułu, aby zawinąć do początku po osiągnięciu końca tablicy.
źródło
a % b = a - b * floor(a/b)
Python - podstawowi operatorzy
http://www.tutorialspoint.com/python/python_basic_operators.htm
a = 10 ib = 20
b% a = 0
źródło
W większości języków% służy do modułu . Python nie jest wyjątkiem.
źródło
Operator% Modulo może być również używany do drukowania ciągów (tak jak w C), jak zdefiniowano w Google https://developers.google.com/edu/python/strings .
Wydaje się to nieco odbiegać od tematu, ale z pewnością komuś pomoże.
źródło
x % y
oblicza pozostałą część dzieleniax
podzieloną przezy
gdzie iloraz jest liczbą całkowitą . Reszta ma znaky
.W Pythonie 3 obliczenia dają wynik
6.75
;/
dzieje się tak, ponieważ robi prawdziwy podział, a nie całkowity, taki jak (domyślnie) w Pythonie 2. W Python 21 / 4
daje 0, ponieważ wynik jest zaokrąglany w dół.Podziału liczb całkowitych można również dokonać w języku Python 3 za pomocą
//
operatora, dlatego aby uzyskać wynik 7, można wykonać:Możesz także uzyskać podział stylu Python na Python 2, po prostu dodając wiersz
jako pierwsza linia kodu źródłowego w każdym pliku źródłowym.
źródło
#
są dla komentarzy i//
są operatorami.Operator modułu służy zwykle do dzielenia reszty na liczbach całkowitych, zazwyczaj w Pythonie można go stosować do liczb zmiennoprzecinkowych.
http://docs.python.org/reference/expressions.html
źródło
Jest to operacja modulo, z wyjątkiem gdy jest to staromodny operator formatowania ciągów w stylu C, a nie operacja modulo . Zobacz tutaj, aby uzyskać szczegółowe informacje. Zobaczysz dużo tego w istniejącym kodzie.
źródło
Istnieje również przydatna wbudowana funkcja o nazwie
divmod
:źródło
Miej świadomość, że
nawet z nawiasami daje 6,75 zamiast 7, jeśli jest obliczane w Pythonie 3.4.
A operator „/” również nie jest tak łatwy do zrozumienia (python2.7): spróbuj ...
To trochę nie na temat, ale należy to wziąć pod uwagę przy ocenie powyższego wyrażenia :)
źródło
(1)+(0)-(0.25)+(6)
.Ciężko mi było znaleźć konkretne przypadki użycia dla% online, np. Dlaczego podział ułamkowego modułu lub ujemny podział modułu skutkuje odpowiedzią, którą robi. Mam nadzieję, że pomoże to wyjaśnić takie pytania:
Podział modułu ogólnie:
Podział modułu zwraca pozostałą część operacji dzielenia matematycznego. Robi to w następujący sposób:
Załóżmy, że mamy dywidendę 5 i dzielnik 2, następująca operacja dzielenia byłaby (równa x):
Pierwszym krokiem w obliczeniu modułu jest przeprowadzenie podziału na liczby całkowite:
x_int = 5 // 2 (dzielenie liczb całkowitych w pythonie używa podwójnego ukośnika)
x_int = 2
Następnie wynik x_int jest mnożony przez dzielnik:
x_mult = x_int * dzielnik x_mult = 4
Na koniec dywidenda jest odejmowana od x_mult
dywidenda - x_mult = 1
Operacja modułu zwraca zatem 1:
5% 2 = 1
Aplikacja do zastosowania modułu ułamka
Obliczenie modułu przy zastosowaniu do ułamka jest takie samo jak powyżej; ważne jest jednak, aby pamiętać, że podział na liczbę całkowitą spowoduje, że wartość dzielenia będzie wynosić zero, gdy dzielnik będzie większy niż dywidenda:
Dzielenie liczb całkowitych powoduje 0, podczas gdy; dlatego po wykonaniu kroku 3 powyżej wartość dywidendy jest przenoszona (odejmowana od zera):
Aplikacja do zastosowania modułu do ujemnego
Występuje podział podłogi, w którym wartość podziału na liczbę całkowitą jest zaokrąglana w dół do najniższej wartości całkowitej:
Dlatego podczas dzielenia liczb całkowitych możesz uzyskać inny wynik niż się spodziewałeś!
Zastosowanie powyższych kroków w odniesieniu do następującej dywidendy i dzielnika ilustruje koncepcję modułu:
Krok 1: Zastosuj dzielenie liczb całkowitych
Krok 2: Pomnóż wynik dzielenia liczb całkowitych przez dzielnik
Krok 3: Odejmij dywidendę ze zwielokrotnionej zmiennej, zauważ podwójne ujemne.
W związku z tym:
źródło
Operator% (modulo) zwraca resztę z podziału pierwszego argumentu na drugi. Argumenty liczbowe są najpierw konwertowane na typ wspólny.
Jest to oparte na pierwszeństwie operatora.
źródło
%
jest modulo .3 % 2 = 1
,4 % 2 = 0
/
jest (w tym przypadku liczbą całkowitą), więc:źródło
Jest to operacja modulo http://en.wikipedia.org/wiki/Modulo_operation
http://docs.python.org/reference/expressions.html
Więc z kolejnością operacji, to działa
(3 + 2 + 1-5) + (4% 2) - (1/4) + 6
(1) + (0) - (0) + 6
7
1/4 = 0, ponieważ tutaj wykonujemy matematykę całkowitą.
źródło
Jest to, podobnie jak w wielu językach podobnych do C, operacja reszty lub modulo. Zobacz dokumentację typów numerycznych - int, float, long, complex .
źródło
Moduł - dzieli operand lewej ręki przez operand prawej ręki i zwraca resztę.
Jeśli to pomaga:
... i tak dalej.
źródło
Odkryłem, że najłatwiejszym sposobem uchwycenia operatora modułu (%) jest długi podział. Jest to reszta i może być przydatna w określaniu liczby parzystej lub nieparzystej:
źródło