Domanda Cosa significano i numeri che iniziano con 0 in python?


Quando digito i piccoli interi con uno 0 in primo piano in python, danno strani risultati. Perchè è questo?

>>> 011
9
>>> 0100
64
>>> 027
23

Nota: Python versione 2.7.3 Ho provato questo in Python 3.0, e apparentemente questo è ora un errore. Quindi è qualcosa di specifico della versione.

Modifica: sono apparentemente ancora interi:

>>> type(027)
`<type 'int'>`

44
2017-07-23 20:38


origine


risposte:


Questi sono numeri rappresentati nella base 8 (numeri ottali). Per esempio,

011 è uguale a 1*(8**1) + 1*(8**0) = 9,

0100 è uguale a 1*(8**2) + 0*(8**1) + 0*(8**0) = 64,

027 è uguale a 2*(8**1) + 7*(8**0) = 16 + 7 = 23.


46
2017-07-23 20:40



In Python 2 (e in alcuni altri linguaggi di programmazione), questi rappresentano numeri ottali.

In Python 3, 011 non funziona più e useresti 0o11 anziché.

In risposta alla modifica: e sono numeri interi regolari. Sono solo specificati in modo diverso; e vengono automaticamente convertiti da Python in una rappresentazione intera di interi (che è in realtà base-2, quindi entrambi 9 e 011 sono internamente convertiti a 0b1001).


38
2017-07-23 20:41



Questi sono numeri ottali (base 8, valori 0 - 7)

Puoi convertire un numero decimale in ottale con il ottobre () funzione.

In [125]: for i in range(10):
   .....:     print '{:5} {:5}'.format(i, oct(i))
   .....:
    0 0
    1 01
    2 02
    3 03
    4 04
    5 05
    6 06
    7 07
    8 010
    9 011

e convertire un valore ottale in intero con il int () funzione con la base appropriata (8 in questo caso):

int(str(17), 8)
Out[129]: 15

L'insieme simile di regole / funzioni si applica ai numeri esadecimali (base 16) usando il esadecimale() funzione.


6
2017-07-23 20:40



Numeri nel sistema numerico ottale. Altri prefissi sono 0x per esadecimale e 0b per binario.


5
2017-07-23 20:40



Entrambe le versioni 2 e 3 di Python comprendono l'ottale scritto con i primi '0o' e '0O' (maiuscolo o), quindi sii l'abitudine di usare se si sta lavorando anche con Python 2.x.

Utilizzare solo zeri iniziali nei numeri nelle stringhe.

È possibile convertire numeri interi da qualsiasi altro sistema di base con int ().

>>> int(0o20)

16

Se vuoi che il tuo output venga visualizzato con zeri iniziali, definiscilo con questa risposta: Mostra il numero con gli zeri iniziali

Se hai intenzione di lavorare con i codici ZIP, è meglio trattarli come stringhe in tutti i modi.


5
2017-08-02 04:38



È molto facile Sono numeri ottali.

http://en.wikipedia.org/wiki/Octal

Inoltre ci sono numeri che iniziano con 0x. Sono numeri esadecimali:

>>> 0x51
81

4
2017-07-23 20:40



Sono numeri apparentemente ottali (base 8), e lo 0 è solo un prefisso obsoleto usato da Python 2.

In Python 3 devi scrivere: 0o11 anziché.

Sono ancora interi ma fare operazioni con essi darà un risultato nella forma base-10 regolare.


2
2017-07-25 16:10



L'ho provato. Ho imparato un po '. Da Java lo so come una trappola: uno zero iniziale introduce un numero ottale. Ho colleghi che non risp. non lo so dopo più di anni di esperienza in Java.

Ora ero interessante sul comportamento di Python. Apprezzo il cambiamento da Python 2 a Python 3. È un trabocchetto che non ho mai capito perché Java (una lingua giovane con l'obiettivo di "essere facile") possa prendere il sopravvento su quella stupida soluzione di C.

Uno zero iniziale come prefisso può essere digitato accidentalmente (soluzione errata). 0x per un numero esadecimale non viene mai digitato accidentalmente (buona soluzione). Ma 0 e O sono simili quindi penso che 0o23 in Python non sia una soluzione perfetta. 0c23 (octal) sarebbe una soluzione migliore secondo me.


0
2017-08-04 08:49