Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah terdapat fungsi terbina dalam Python untuk menukar asas integer?

Adakah terdapat fungsi terbina dalam Python untuk menukar asas integer?

WBOY
WBOYke hadapan
2024-02-05 21:18:07425semak imbas

Python 中是否有内置函数可以更改整数的基数?

Kandungan soalan

python mampu menukar asas 10 integer kepada asas x integer menggunakan fungsi int(), di mana 2<=x<=36. Untuk mana-mana integer, nampaknya wajar (melainkan anda telah mempelajari teori kumpulan) bahawa terdapat cara untuk menukar nombor itu kembali kepada asas 10, atau daripada asas x kepada asas y.

Saya boleh menulis fungsi untuk menukar antara pangkalan menggunakan from math import log tetapi saya ingin tahu sama ada terdapat apa-apa yang telah dibina ke dalam python untuk melakukan ini.

Adakah terdapat fungsi terbina dalam dalam python 3 untuk melakukan perubahan asas antara mana-mana dua pangkalan? Adakah terdapat sebarang kekangan yang serupa dengan int() (jika ada)?

EDIT: Untuk menjelaskan, int() hanya mentafsir hujah pertama dalam asas 10. Saya ingin menentukan parameter ini sebagai perwakilan radix yang berbeza. Saya tertanya-tanya jika terdapat fungsi terbina dalam yang memerlukan dua hujah sebagai perwakilan asas. Contoh (mengapa int() bukan jawapannya:

>>> int('100',9) == int(str(int('81',9)),10)
false

Edit #2: Andaikata saya ingin tahu apakah asas 9 asas 100, saya akan menggunakan yang berikut, int('100', 9) Ini akan mengembalikan nilai 81. Sekarang katakan saya mahu mengambil 81 (asas 9) dan menukarnya kembali kepada asas 10. Adakah terdapat fungsi terbina dalam python untuk melakukan ini, atau cara untuk menandakan hujah pertama untuk menunjukkan bahawa saya memberikan nombor asas 9?

Saya tahu ada cara untuk menentukan nilai hex menggunakan 'ob' 指定二进制值,使用 '0x' . Contohnya,

int('0b1100100', 2)

Ini akan mengembalikan nilai 100, Apakah awalan untuk menentukan asas lain untuk hujah pertama.


Jawapan Betul


Apabila anda bercakap tentang objek integer, ia berbeza daripada perwakilan asas dannya.

Walaupun secara dalaman, integer disimpan dalam binari, objek integer sendiri tidak mempunyai asas. Anda boleh membina objek int daripada mana-mana rentetan berangka dalam mana-mana asas n selagi anda menentukan radix dan rentetan berangka itu sah untuk asas itu. Ini biasanya terhad kepada maksimum 36, kerana terdapat 10 digit perpuluhan dan 26 abjad.

Terdapat beberapa kes khas untuk pangkalan 2, 8, 10 dan 16 kerana ia adalah yang paling biasa digunakan. Untuk pangkalan ini, anda menentukan pangkalan dalam perwakilan rentetan itu sendiri. Anda boleh menggunakan awalan 0b0o0x untuk mewakili 2, 8 dan 16 masing-masing. Perpuluhan ialah lalai dan paling biasa digunakan, jadi tiada awalan diperlukan.

Jika anda ingin mengembalikan perwakilan asas n integer sebagai rentetan, iaitu operasi penyongsangan int(n, n), anda mempunyai beberapa pilihan. Anda boleh menggunakan gmpy.digits(n, n) ,其中 n 是您的 int, n untuk menjadi asas yang anda inginkan. Ini mungkin agak berlebihan kerana ia memerlukan gmpy untuk dipasang.

Anda juga boleh menggunakan sesuatu seperti ini:

import string

def int_to_base(n, n):
    """ return base n representation for int n. """
    base_n_digits = digits + ascii_lowercase + ascii_uppercase
    result = ""
    if n < 0:
        sign = "-"
        n = -n
    else:
        sign = ""
    while n > 0:
        q, r = divmod(n, n)
        result += base_n_digits[r]
        n = q
    if result == "":
        result = "0"
    return sign + "".join(reversed(result))

Menggunakan fungsi ini atau serupa, anda boleh mengembalikan perwakilan rentetan bagi integer n dalam asas n, dalam asas n, jadi:

>>> base_n_string = "81"
>>> base = 9
>>> int_to_base(int("81", 9), 9) == "81"
True

Atas ialah kandungan terperinci Adakah terdapat fungsi terbina dalam Python untuk menukar asas integer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam