python dictionary value begint met 0

Mogelijk duplicaat:
   Krijgt geen exact resultaat in python met de waarden voor nul. Vertel me wat er daar aan de hand is

Ik wil een woordenboek maken waarvan de waarde begint met 0. Maar nadat ik een woordenboek heb gemaakt, is de waarde veranderd. Wat doe ik fout?

>>> sample={'first_value':0123456}
>>> sample
{'first_value': 42798}
3
gebeurt er ook met mij!
toegevoegd de auteur heltonbiker, de bron
>>> sample = {'first_value': 123456} >>> sample {'first_value': 123456} . De leidende nul lijkt de boosdoener te zijn, maar dit gedrag is ZEER vreemd!
toegevoegd de auteur heltonbiker, de bron
De dubbele vraag onthult dat een voorloopnul wordt gebruikt voor octale nummernotatie. Interessant.
toegevoegd de auteur heltonbiker, de bron
@GregHewgill, ik ben blij dat ze het in Python 3 hebben veranderd. Deze 'functie' is waarschijnlijk overgenomen van C en overtreedt absoluut het principe van de minste verrassing.
toegevoegd de auteur Mark Ransom, de bron
Merk op dat deze notatie specifiek is voor Python 2.x (en eerder). In Python 3.x en hoger geeft de eerste nul een decimaal getal aan (dat is niets bijzonders). Octale literalen worden geïntroduceerd met de vorm 0o123456 (analoog aan 0x voor hex literals).
toegevoegd de auteur Greg Hewgill, de bron
Als je om een ​​of andere reden niet gemakkelijk de voorloopnul kunt verwijderen, probeer dan int ('0123456', 10)
toegevoegd de auteur SingleNegationElimination, de bron
Bedankt, ik heb niets gevonden over dit probleem (mogelijk duplicaat), het spijt me. Belangrijk is dat ik nu het antwoord weet. Nogmaals heel erg bedankt!
toegevoegd de auteur Ali Ismayilov, de bron
In python3 kreeg ik de foutmelding: Bestand "", regel 1 voorbeeld ['first_value'] = 012345 ^ SyntaxError: ongeldige token
toegevoegd de auteur Ali Ismayilov, de bron

4 antwoord

De eerste nul vertelt Python om het te interpreteren als een octaal getal.

6
toegevoegd
@AliIsmayilov: niet als een integer (omdat de voorloopnul niet significant is), maar je kunt dit zeker doen als een string . { 'FIRST_VALUE': '0123456'}
toegevoegd de auteur Greg Hewgill, de bron
Wat verwacht je dat 'waarde die begint met 0' betekent? Hoe wordt 012 verondersteld anders te zijn dan 12 ?
toegevoegd de auteur Karl Knechtel, de bron
Telefoonnummers zijn geen nummers. Het zijn cijferreeksen. Nummers duiden op hoeveelheid of grootte of iets "wiskundig".
toegevoegd de auteur Steven Rumbalski, de bron
Dus er is geen manier om waarde op te slaan die begint met 0?
toegevoegd de auteur Ali Ismayilov, de bron
Als u telefoonnummers opslaat, heeft u aan het begin 0 nodig.
toegevoegd de auteur Ali Ismayilov, de bron

Cijfers beginnend met 0 worden beschouwd als octal . U zult ofwel het nummer tijdelijk in een string moeten wikkelen of 123456 moeten opmaken met een voorloopnul bij gebruik; beide keren kun je geen geheel getal krijgen met voorloopnullen (alleen een numerieke reeks).

Optie 1:

>>> sample={ 'first_value' : '0123456' }
>>> sample['first_value']
'0123456'

Optie 2:

>>> sample={ 'first_value' : 123456 }
>>> '{0:07}'.format(sample['first_value'])
'0123456'
2
toegevoegd

De eerste nul maakt de waarde een octaal getal .

1
toegevoegd

Wanneer u 0123456 schrijft, wordt dit geïnterpreteerd als base-8, dat is 42798 decimaal

0
toegevoegd