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

HackNation - ogólnopolski hackathon
0 głosów
1,298 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 (93,310 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 (93,310 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,587 wizyt
0 głosów
1 odpowiedź 9,385 wizyt
pytanie zadane 17 października 2016 w C i C++ przez kakola3 Początkujący (270 p.)
0 głosów
5 odpowiedzi 4,418 wizyt
pytanie zadane 14 maja 2016 w C i C++ przez Evelek Nałogowiec (28,960 p.)

93,624 zapytań

142,544 odpowiedzi

323,031 komentarzy

63,129 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1210p. - dia-Chann
  2. 1197p. - DziarnowskiJ
  3. 1177p. - Łukasz Piwowar
  4. 1172p. - CC PL
  5. 1161p. - Maurycy W
  6. 1141p. - Adrian Wieprzkowicz
  7. 1138p. - raydeal
  8. 1116p. - rucin93
  9. 1101p. - robwarsz
  10. 1100p. - Mariusz Fornal
  11. 1024p. - ssynowiec
  12. 1024p. - Tomasz Bielak
  13. 885p. - Dominik Łempicki (kapitan)
  14. 847p. - Grzegorz Aleksander Klementowski
  15. 649p. - Michal Drewniak
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

Kursy INF.02 i INF.03
...