Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: dělení v Python

Python Python dělení v Python

Aktivity (1)
Avatar
Tomas Novotny Dis:28.8.2016 11:50

Python 3.5.1 (v3.5.1:37a07ce­e5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 7 / 3
2.3333333333333335
>>> 7 // 3
2
>>> -7 / 3

  • 2.3333333333333335

>>> -7 // 3

  • 3

### Můžete mi někdo vysvětlit poslední (4.) příkaz ? proč není 2. a 4. výsledek stejný, jen s opačným znaménkem ? V pythonu začínám, ale toto nějak nechápu...díky

 
Odpovědět 28.8.2016 11:50
Avatar
DZetko
Člen
Avatar
DZetko:28.8.2016 12:02

Ve 4. příkazu by výsledek měl být asi -2.333333, ale Python vypíše 3. Dochází zde k tomu, že výsledek se automaticky zaokrouhluje na negativnější číslo. Toto chování bylo normální v Pythonu 2 (i při použítí / místo // ). V Pythonu 3 toto bylo odstraněno, ale stále je možné toho dosáhnout použitím // (jako v tvém 4. příkazu). :-)

Editováno 28.8.2016 12:03
 
Nahoru Odpovědět 28.8.2016 12:02
Avatar
Tomas Novotny Dis:28.8.2016 12:15

// ve 4. příkazu je celočíselné dělení, tedy by měl být výsledek -2, aspoň pokud tomu rozumím dobře - stejně jako v celočíselném 2. příkazu.
Ty říkáš, že pokud je výsledek záporný a dělíš celočíselně, tak python zaokrouhluje "nahoru" ? Není to divny?

 
Nahoru Odpovědět 28.8.2016 12:15
Avatar
DZetko
Člen
Avatar
Odpovídá na Tomas Novotny Dis
DZetko:28.8.2016 12:21

Není to úplně divné, když ve 4. příkazu používáš na dělení //, protože tak Python 3 funguje. Zkus 4. příkaz s jedním / místo // (tako -7/3). Pak bys měl dostat očekávaný výsledek. Sám jsem to teď otestoval. :-)

Editováno 28.8.2016 12:21
 
Nahoru Odpovědět 28.8.2016 12:21
Avatar
Tomas Novotny Dis:28.8.2016 12:35

s jedním / je v 3. příkazu.
očekával bych výsledek -2 ...což je opačná hodnota 7 // 3

 
Nahoru Odpovědět 28.8.2016 12:35
Avatar
coells
Redaktor
Avatar
Odpovídá na Tomas Novotny Dis
coells:28.8.2016 13:25

Protože matematika :-)
Chceš vyřešit celočíselnou rovnici -7 = p * 3 + q, kde 0 <= q < 3
Tomu se říká celočíselné okruhy a rovnice má jediné řešení.

Řešení v pythonu:

p = -7 // 3
q = -7 % 3
print(p, q, p * 3 + q)  # -3 2 -7

Takže výsledek -3 dává smysl stejně, jako bys čekal, že python pro 1+1 odpoví 2.
Rozdíl je jen v tom, že tenhle typ matematiky se učí až v algebře.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 28.8.2016 13:25
Avatar
Tomas Novotny Dis:28.8.2016 14:06

Dík, už chápu :-)

 
Nahoru Odpovědět 28.8.2016 14:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.