2014-04-21 5 views
7

Ich habe das offizielle Dokument https://docs.python.org/2/library/functions.html#int gelesen, aber immer noch verwirrt.Was macht der Basiswert in der int-Funktion?

Ich habe einen Befehl auf meinem Terminal versucht, ich finde einige Regeln, aber immer noch nicht ganz klar darüber. Hoffe, jemand mit mehr Wissen darüber kann es weiter erklären.

Im Folgenden sind meine Beispiele und Ergebnisse:

int('0', base=1) 
ValueError: int() base must be >= 2 and <=36 

int('3', base=2) 
ValueError: invalid literal for int() with base 2: 

int('3', base=4) 
3 

int('33', base=4) 
15 

int('333', base=4) 
63 

int('353', base=4) 
ValueError: invalid literal for int() with base 4: 

Ich finde zwei Regeln hier:

  1. die einzelnen String-Nummern müssen die Basiszahl kleiner sein als.
  2. die int() eine Zahl zurück, die (n)*(base^(n-1)) + (n-1)*(base^(n-2)) + ... + 1*(base^0) gleich

Gibt es irgendwelche anderen versteckten Regeln als diese, und welche Art von Problem ist die Basis zu lösen entwickelt?

+1

'Welche Art von Problem ist Basis zu lösen entwickelt?' = In der Zahlentheorie sehr nützlich, welche Anwendungen in der Kryptographie (RSA), Kodierung (Fehlererkennung und -korrektur) hat usw. – stackErr

Antwort

3

es tut genau das, was sagt - konvertiert eine Zeichenfolge in eine gegebene numerische Basis in Integer. Gemäß der Dokumentation kann int() Zeichenfolgen in jeder Basis von 2 bis 36 konvertieren. Am unteren Ende ist Basis 2 das niedrigste nützliche System; Base 1 würde nur "0" als Symbol haben, was zum Zählen ziemlich nutzlos ist. Am oberen Ende wird 36 willkürlich gewählt, weil wir Symbole von "abcdefghijklmnopqrstuvwxyz" (10 Ziffern + 26 Zeichen) verwenden - Sie könnten mit mehr Symbolen fortfahren, aber es ist nicht wirklich klar, was nach z zu verwenden ist.

"Normal" Mathematik ist Basis-10 (verwendet Symbole ""):

int("123", 10) # == 1*(10**2) + 2*(10**1) + 3*(10**0) == 123 

Binary ist zur Basis 2 (verwendet Symbole "01"):

int("101", 2) # == 1*(2**2) + 0*(2**1) + 1*(2**0) == 5 

"3" macht in Base 2 keinen Sinn; es verwendet nur die Symbole "0" und "1", "3" ist ein ungültiges Symbol (es ist so, als würde man versuchen, einen Termin für den 34. Januar zu buchen).

int("333", 4) # == 3*(4**2) + 3*(4**1) + 3*(4**0) 
       # == 3*16 + 3*4 + 3*1 
       # == 48 + 12 + 3 
       # == 63 
5

Der Wert base weist Python an, die angegebene Zeichenfolge als Wert einer anderen Basis zu interpretieren.

Zum Beispiel ist die 1011 in der Basis 2 11. Damit gibt int('1011', 2)11 zurück.
Auf der anderen Seite ist 1011 in der Basis 3 31. Also gibt int('1011', 3)31 zurück.

Dezimalstellen sind in Basis 10, weshalb der Standardwert base10 ist.

Ein Spaß Nebeneffekt der Wahl einer numerischen Basis ist, dass es keine Ziffer in diesem System gibt, die höher ist als die Basis selbst (oder gleich). Deshalb haben wir im dezimalen System keine Ziffer für zehn, während das hexadezimale System (Basis 16) die Ziffer A für zehn verwendet. Dies ist, warum Sie wurden Fehler zu fragen, eine Zahl mit der Ziffer 5 immer in der Basis zu interpretieren 4.

3

Die int() Funktion eine ganze Zahl in einer Base (oder radix) als 10 als String übergeben umwandeln kann, wo die zweiter Parameter ist die Basis der Zahl in der Zeichenfolge, und das Ergebnis wird eine ganze Zahl in der Basis 10 beispielsweise alle folgenden String-Werte in dem integer-42 führen sein:

int('42')  # by default, it's base 10 
=> 42 
int('42', 10) # same as above 
=> 42 
int('101010', 2) # base 2 (binary) 
=> 42 
int('2A', 16) # base 16 (hexadecimal) 
=> 42 
2

Die Basis ist die Anzahl der verschiedenen Basiselemente oder Ziffern in einem Zahlensystem.

Base 2 hat 0 und 1 und kann in der Elektronik als Ein und Aus dargestellt werden.

Basis 10 hat die bekannten 10 Ziffern 0..9

Jede ganze Zahl kann in einem der Basen ausgedrückt werden, aber die Kette von Symbolen anders sein wird. Zum Beispiel in Basis 2 1111 = 15 in Basis 10

Die Möglichkeit, die Basis-Konvertierung zu oder von Strings zu wählen, ermöglicht Software, Eingaben in verschiedenen Basen zu akzeptieren und Basen zu übersetzen, wenn dies angebracht ist.

Siehe auch http://en.wikipedia.org/wiki/Radix