Hvad er resultatet af % i Python?
Hvad betyder %
i en beregning? Jeg kan ikke finde ud af, hvad det gør.
Udregner den en procentdel af beregningen, f.eks. er 4 % 2
tilsyneladende lig med 0. Hvordan?
229
3
Taget fra http://docs.python.org/reference/expressions.html
Eksempel 1:
6%2
evalueres til0
, fordi der ikke er nogen rest, hvis 6 divideres med 2 ( 3 gange ).Eksempel 2:
7%2
evalueres til1
, fordi der er en rest på1
, når 7 divideres med 2 ( 3 gange ).Så for at opsummere det, returnerer den resten af en divisionsoperation, eller
0
hvis der ikke er nogen rest. Så6%2
betyder at finde resten af 6 divideret med 2.Et udtryk som
x % y
evaluerer til resten afx ÷ y
- teknisk set er det dog "modulus" i stedet for "rest" så resultaterne kan være anderledes, hvis du sammenligner med andre sprog, hvor%
er restoperatoren. [Der er nogle subtile forskelle] (https://rob.conery.io/2018/08/21/mod-and-remainder-are-not-the-same/) (hvis du er interesseret i de praktiske konsekvenser, se også "Why Python's Integer Division Floors" bellow). Præcedens er den samme som operatorer/
(division) og*
(multiplikation).%
også den (forældede) string-interpolationsoperator, så pas på, hvis du kommer fra et sprog med automatisk type casting (som PHP eller JS), hvor et udtryk som'12' % 2 + 3
er lovligt: i Python vil det resultere iTypeError: not all arguments converted during string formatting
, hvilket sandsynligvis vil være ret forvirrende for dig. [opdatering til Python 3] Bruger n00p kommentarer:I moderne Python
9 / 2
resulterer4.5
faktisk:[opdatering] Bruger dahiya_boy spurgte i kommentarsessionen: Kan du venligst forklare hvorfor
-11 % 5 = 4
- dahiya_boy Det er da underligt, ikke? Hvis du prøver dette i JavaScript:Det skyldes, at
%
i JavaScript er operatoren "rest" mens det i Python er operatoren "modulus" (urmatematik).Du kan få forklaringen direkte fra GvR:
0 >= r > b.
Modulus-operatoren bruges typisk til restdivision af hele tal, men i Python kan den også bruges til flydende tal.
http://docs.python.org/reference/expressions.html