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

Zamiana z dowolnego systemu na dowolny

Object Storage Arubacloud
0 głosów
4,254 wizyt
pytanie zadane 27 stycznia 2019 w Python przez Q7V Gaduła (4,250 p.)

Cześć, chcę zrobić sobie konwerter z dowolnego systemu na dowolny.

liczba = int(input("Podaj liczbę => "))
z = int(input("System obecny => "))
do = int(input("Podaj docelowy system => "))
liczba = int(liczba, z)
wynik = int(liczba, do)
print("Transformacja => " + str(wynik))

Wyczytałem na stacku, że za pomocą metody int można przekonwertować liczbę na inny system i tak spróbowałem. Efekt zerowy - error.

1 odpowiedź

+1 głos
odpowiedź 27 stycznia 2019 przez adrian17 Ekspert (344,860 p.)

Um... dobra, na intuicję zastanów się: skąd komputer ma wiedzieć, że jedno int(liczba, podstawa) oznacza konwersję z, a drugie do? Twoje wywołania niczym się nie różnią.

W każdym razie... int() potrafi sparsować tekst reprezentujący liczbę o danej podstawie do liczby. Nie potrafi zrobić tego w drugą stronę.

Nie wydaje mi się, by w Pythonie była wbudowana funkcja formatująca liczbę do stringa reprezentującego daną podstawę.

Tak na boku:

Efekt zerowy - error.

To nic nikomu nie mówi. Nigdy nie pisz po prostu "error". Konkrety.

komentarz 27 stycznia 2019 przez Q7V Gaduła (4,250 p.)
Zastanawiałem się skąd komputer ma wiedzieć jaki system wprowadzono. Bo liczba 575 może być ósemkowa jak i dziesiątkowa - w tym problem.
komentarz 27 stycznia 2019 przez Arkadiusz Sikorski Pasjonat (20,160 p.)

Komputer musi się dowiedzieć od użytkownika, co to za system liczbowy.

Poza tym z tą "dowolnością" konwersji bym nie szalał. Sama funkcja int() przyjmuje podstawę systemu z przedziały [2,36]. No i...trudno byłoby wymyślić reprezentację dla systemu o podstawie, dajmy na to, 100.

Tak swoją drogą

Bo liczba 575 może być ósemkowa jak i dziesiątkowa - w tym problem.

575 to może byś liczba zarówno ósemkowa, jak i dziewiątkowa, dziesiętna, jedenastkowa i tak dalej :)

komentarz 27 stycznia 2019 przez Chess Szeryf (76,710 p.)

Zastanawiałem się skąd komputer ma wiedzieć jaki system wprowadzono.

Domyślny, taki który wprowadził programista. Najczęściej jest to system dziesiętny, ponieważ wpisujesz liczbę dziesiętną, coś na niej wykonujesz i maszyna zwraca Ci rezultat w systemie dziesiętnym. Jeśli chcesz liczyć w innym systemie, to musisz "powiedzieć" to maszynie, czyli wymusić operowanie np. na systemie dwudziestkowym i na nim wykonywać niezbędne działania.

komentarz 27 stycznia 2019 przez Q7V Gaduła (4,250 p.)

Dokładnie, ta liczba może być liczbą w nieskończonej ilości systemów. Dlatego się zastanawiam jak python ma się o tym dowiedzieć.

Teraz zauważyłem, że to nie ma żadnej logiki. Zamieniam liczbę na wybrany system i potem robię to samo... :P

Error następujący, ale raczej to błąd w logice. Jednakże nie mogę znaleźć żadnej prostej metody aby dokonać tej "zamiany". Na maturze taka uniwersalna zamiana byłaby na plus. Istnieją metody na zamianę z konkretnego na konkretny, ale nie ma żadnej ogólnej jak np. w javascript.

❯ python ZamianaSystemów.py
Podaj liczbę => 5
System obecny => 10
Podaj docelowy system => 2
Traceback (most recent call last):
  File "ZamianaSystemów.py", line 4, in <module>
    liczba = int(liczba, z)
TypeError: int() can't convert non-string with explicit base

 

komentarz 27 stycznia 2019 przez Chess Szeryf (76,710 p.)

Q7V, nie używaj polskich znaków w nazwie pliku i nie tylko, ponieważ mogą przydażyć się niespodziewane sytuacje.

komentarz 27 stycznia 2019 przez adrian17 Ekspert (344,860 p.)

Zastanawiałem się skąd komputer ma wiedzieć jaki system wprowadzono

Sam nie wie, ale przecież sam mu go podałeś - jako drugi argument do int().

Niestety, jak wcześniej mówiłem, nie ma wbudowanych rozwiązań na konwersję z powrotem do stringa w danej podstawie (ale hint hint, na StackOverflow jest masa rozwiązań).

TypeError: int() can't convert non-string with explicit base

Liczba nie ma podstawy, w ogóle. Liczba to liczba, wartość. 0b11 i 3 i 0x03 to ta sama wartość. System liczbowy ma znaczenie dopiero przy zapisie liczby, na przykład w pamięci komputera lub na kartce papieru.

Dlatego int(101, 2) nie ma sensu, bo 101 to po prostu liczba 101. Dlatego Python krzyczy. Ale int("101", 2) ma sens, bo teraz podaliśmy mu kawałek tekstu z informacją jak interpretować ten tekst "101" - jako tekstową reprezentację liczby w systemie dwójkowym.

Podobne pytania

0 głosów
2 odpowiedzi 288 wizyt
pytanie zadane 1 kwietnia 2020 w C i C++ przez Atman Użytkownik (810 p.)
0 głosów
3 odpowiedzi 1,989 wizyt
pytanie zadane 12 kwietnia 2016 w Python przez Marian Kowal Użytkownik (960 p.)
+1 głos
2 odpowiedzi 652 wizyt
pytanie zadane 2 sierpnia 2020 w C i C++ przez RufinB Obywatel (1,830 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...