• 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ą

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
918 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,970 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,970 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,278 wizyt
0 głosów
1 odpowiedź 9,247 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,922 wizyt
pytanie zadane 14 maja 2016 w C i C++ przez Evelek Nałogowiec (28,960 p.)

93,174 zapytań

142,185 odpowiedzi

321,974 komentarzy

62,503 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1389p. - dia-Chann
  2. 1368p. - Łukasz Piwowar
  3. 1360p. - CC PL
  4. 1360p. - Łukasz Eckert
  5. 1118p. - Tomasz Bielak
  6. 1104p. - Michal Drewniak
  7. 1083p. - Marcin Putra
  8. 1078p. - rucin93
  9. 1071p. - rafalszastok
  10. 1054p. - Adrian Wieprzkowicz
  11. 1047p. - Piotr Aleksandrowicz
  12. 1037p. - Michał Telesz
  13. 1023p. - Mariusz Fornal
  14. 1017p. - Mikbac
  15. 1005p. - ssynowiec
Szczegóły i pełne wyniki

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 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...