Μετατροπή δεκαδικών αριθμών σε δυαδικό (και το αντίστροφο)

...τα πάντα για το open source στον χώρο των gadgets, συζητήσεις, εργαλεία, open hardware, οδηγοί κ.ά.

Συντονιστής: adem1

Μετατροπή δεκαδικών αριθμών σε δυαδικό (και το αντίστροφο)

Δημοσίευσηαπό malos » 22 Μαρ 2024, 14:50

Διαβάζαμε πληροφορική με την κόρη μου και ήταν στο κεφάλαιο με τους δυαδικούς. (Μήνες μετά ανάθεμα κι αν θυμάται αλλά δεν πειράζει τι να κάνουμε!)
Σκέφτηκα τότε ότι θα ήταν ωραίο να έχουμε ένα εφαρμογάκι που μας βρίσκει άμεσα ένα αποτέλεσμα που θα του ζητήσουμε.
Και ιδού

Κώδικας: Επιλογή όλων
#!/usr/bin/env python3

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QPushButton, QRadioButton, QMessageBox, QSlider
from PyQt5.QtCore import Qt

class ConverterApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Μετατροπή Δυαδικών και Δεκαδικών Αριθμών')
        self.setGeometry(900, 700, 400, 200)
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.setStyleSheet("background-color: turquoise;")
        layout = QVBoxLayout()

        self.number_input = QLineEdit(self)
        layout.addWidget(self.number_input)
        self.number_input.setStyleSheet("background-color: white")
        self.number_input.setFocus()
        self.decimal_radio = QRadioButton('Δεκαδικό σε Δυαδικό', self)
        self.decimal_radio.toggled.connect(self.number_input.setFocus)

        self.binary_radio = QRadioButton('Δυαδικό σε Δεκαδικό', self)
        self.binary_radio.toggled.connect(self.number_input.setFocus)

        self.convert_button = QPushButton('Μετατροπή', self)
        self.convert_button.clicked.connect(self.convert)
        self.convert_button.setStyleSheet("background-color: lime")

        self.close_button = QPushButton('Κλείσιμο', self)
        self.close_button.clicked.connect(self.close)
        self.close_button.setStyleSheet("background-color: lime")

        layout.addWidget(self.decimal_radio)
        layout.addWidget(self.binary_radio)
        layout.addWidget(self.convert_button)
        layout.addWidget(self.close_button)

        self.setLayout(layout)

        self.red_slider = QSlider(Qt.Horizontal)
        self.red_slider.setMinimum(0)
        self.red_slider.setMaximum(255)
        self.red_slider.valueChanged.connect(self.changeColor)
        layout.addWidget(self.red_slider)
        self.red_slider.sliderMoved.connect(self.number_input.setFocus)

        self.green_slider = QSlider(Qt.Horizontal)
        self.green_slider.setMinimum(0)
        self.green_slider.setMaximum(255)
        self.green_slider.valueChanged.connect(self.changeColor)
        layout.addWidget(self.green_slider)
        self.green_slider.sliderMoved.connect(self.number_input.setFocus)
        self.blue_slider = QSlider(Qt.Horizontal)
        self.blue_slider.setMinimum(0)
        self.blue_slider.setMaximum(255)
        self.blue_slider.valueChanged.connect(self.changeColor)
        layout.addWidget(self.blue_slider)
        self.blue_slider.sliderMoved.connect(self.number_input.setFocus)
    def changeColor(self):
        red = self.red_slider.value()
        green = self.green_slider.value()
        blue = self.blue_slider.value()
        self.setStyleSheet(f"background-color: rgb({red}, {green}, {blue});")

    def convert(self):
        number = self.number_input.text()
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setStyleSheet("background-color: black; color: white;")

        if self.decimal_radio.isChecked():
            try:
                decimal_number = int(number)
                binary_number = bin(decimal_number)[2:]
                msg.setWindowTitle('Αποτέλεσμα')
                msg.setText(f'Ο δεκαδικός αριθμός <font size="25"><b>{number}</b></font> αντιστοιχεί στον δυαδικό αριθμό <font size="25"><b>{binary_number}</b></font>.')
            except ValueError:
                msg.setWindowTitle('Σφάλμα')
                msg.setText('Μη έγκυρος δεκαδικός αριθμός.')
        elif self.binary_radio.isChecked():
            if all(char in '01' for char in number):
                decimal_number = int(number, 2)
                binary_number = number
                msg.setWindowTitle('Αποτέλεσμα')
                msg.setText(f'Ο δυαδικός αριθμός <font size="25"><b>{binary_number}</b></font> αντιστοιχεί στον δεκαδικό αριθμό <font size="25"><b>{decimal_number}</b></font>.')
            else:
                msg.setWindowTitle('Σφάλμα')
                msg.setText('Μη έγκυρος δυαδικός αριθμός.')

        msg.exec()
        self.number_input.setFocus()
        self.number_input.clear()

def main():
    app = QApplication(sys.argv)
    window = ConverterApp()
    window.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()



Από τη γραμμή 44 μέχρι και την 67 μπορεί να αγνοηθεί όλο αυτό το κομμάτι. Είναι εντολές που κάνουν το παράθυρο μπιχλιμπιδάτο (γιατί είμαι η θεια η Σουλτάνα με τα τα λούσα της. Μου αρέσει να παίζω με εφετζίδικα πράγματα). Απλά αλλάζει χρώμα στο παράθυρο σε όλο το εύρος της RGB και το κάνει με διακόπτες sliders.

Τον κώδικα τον αντιγράφεις σε ένα απλό αρχείο κειμένου και το σώζεις με όποιο όνομα θέλεις. Κάνεις δεξί κλικ πάνω του, πας στις ιδιότητες και στην καρτέλα "Άδειες" ή "Δικαιώματα" το κάνεις εκτελέσιμο.
Πατάς κλικ και τρέχει. Μπορεί κάποια στιγμή να είναι και χρήσιμο :roll:

Εικόνα
Επεξεργαστής: AMD Ryzen 9 5900x
Μνήμη Gskill 16gb (2X8gb), 3200 mh, CL 14
Μητρική: Asrock X570 phantom gaming X
Τροφοδοτικό: Corsair 850 platinum
Δίσκος: SSD Corsair MP600 (1 TB)
Άβαταρ μέλους
malos
saintTUX
saintTUX
 
Δημοσιεύσεις: 1235
Εγγραφή: 02 Νοέμ 2008, 12:00
Εκτύπωση

Επιστροφή στο Gadgets με Λογισμικό Ανοιχτού Κώδικα

cron