• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zamiana liczby dziesiętnej na szesnastkową

VPS Starter Arubacloud
0 głosów
816 wizyt
pytanie zadane 10 maja 2020 w Python przez lenzo1 Początkujący (360 p.)

Witam. Napisałem kod, który zamienia liczbę dziesiętną na szesnatkową,ale mam problem z zamianą na znaki w sekcji programu opisanej komentarzem 

slownik={'A':10,'B':11,'C':12,'D':13,'E':14,'F':15}
liczba=42651
reszta=[]
i=0
while liczba!=0:
    reszta.append(liczba%16)
    liczba=int(liczba/16)
    i+=1
reszta.reverse()
#sprawdzenie tablicy
for j in range(len(reszta)):
    for wartosc in slownik:
        if wartosc==reszta[j]:
            reszta[j]=slownik.keys()
print(reszta)

Wcześniej zrobiłem ten program z wersją z kilkoma ifami jako sprawdzenie i działało,ale chciałbym zmodyfikować kod w oparciu o słownik. Proszę o poradę.

3 odpowiedzi

0 głosów
odpowiedź 10 maja 2020 przez Benek Szeryf (92,410 p.)

To ma być zrobione w ten sposób? A nie prościej użyć wbudowanego hexa?

liczba = 42651
hex(liczba) # '0xa69b'
komentarz 10 maja 2020 przez lenzo1 Początkujący (360 p.)
Wiem ,że istnieje taka opcja lecz chciałem to zrobić przy użyciu własnej funkcji.
0 głosów
odpowiedź 10 maja 2020 przez lenzo1 Początkujący (360 p.)

Znalazłem rozwiązanie. Trzeba było zamienić miejscami klucze i wartości i pozyskać je funkcją get.

slownik={10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'}
liczba=42651
reszta=[]
i=0
while liczba!=0:
    reszta.append(liczba%16)
    liczba=int(liczba/16)
    i+=1
reszta.reverse()
#sprawdzenie tablicy
for j in range(len(reszta)):
    for wartosc in slownik:
        if wartosc==reszta[j]:
            reszta[j]=slownik.get(wartosc)
            break
print(reszta)

 

0 głosów
odpowiedź 10 maja 2020 przez Benek Szeryf (92,410 p.)

Znalazłem rozwiązanie. Trzeba było zamienić miejscami klucze i wartości i pozyskać je funkcją get.

Podwójna pętla for daje Ci już złożoność kwadratową. Przeanalizuj sobie taki kod:

def dec_to_hex(number):
    converter = {i:j for i,j in zip(range(10, 16), 'ABCDEF')}
    hex_repr = list()
    n, rest = divmod(number, 16)

    while n != 0:
        hex_repr.append(str(converter.get(rest) if rest in converter else rest))
        n, rest = divmod(n, 16)

    hex_repr.extend([str(converter.get(rest) if rest in converter else rest), 'x', '0'])

    return ''.join(reversed(hex_repr))

 

Podobne pytania

0 głosów
1 odpowiedź 1,157 wizyt
0 głosów
1 odpowiedź 9,214 wizyt
pytanie zadane 17 października 2016 w C i C++ przez kakola3 Początkujący (270 p.)
0 głosów
5 odpowiedzi 3,753 wizyt
pytanie zadane 14 maja 2016 w C i C++ przez Evelek Nałogowiec (28,960 p.)

93,020 zapytań

141,985 odpowiedzi

321,284 komentarzy

62,366 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...