Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/40: Рейтинг темы: голосов - 40, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 12.03.2019
Сообщений: 9

Двоичный калькулятор

10.05.2019, 15:23. Показов 8068. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста. Как из этого десятичного калькулятора сделать двоичный?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import tkinter as Tk
import math
 
 
class Calculator:
    """Main class that constructs the calculator and handles user input and calculations"""
 
    def __init__(self, parent):
        # Global variables needed throughout a single calculation
        self.operations = {'+': False,
                           '-': False,
                           '*': False,
                           '/': False}
        self.first_number_selected = 0
        self.second_number_selected = 0
 
        # Expands a button to fill all the open grid-space around it.
        expand_button = Tk.N + Tk.E + Tk.S + Tk.W
 
        # Display label setup
        self.display_label = Tk.Label(parent, text='0', font='Verdana 16 bold',
                                      bg='black', fg='white', height=2, width=20)
        self.display_label.grid(row=0, column=0, columnspan=4, sticky=expand_button)
 
        # Button Layout
        # Number buttons
        Tk.Button(parent, height=2, width=12, text='1', command=self._number_callback(1)).grid(row=2, column=0)
        Tk.Button(parent, height=2, width=12, text='0', command=self._number_callback(0)).grid(row=2, column=1)
 
        # Operation buttons
        for position, operator in enumerate(self.operations.keys()):
            k=0
            Tk.Button(parent, text=operator, height=2, width=12, command=self._operation_callback(operator)).grid(row=3, column=position+k)
        Tk.Button(parent, text='C', height=2, width=25, command=self.reset).grid(row=2, column=2, columnspan=2)
        Tk.Button(parent, text='=', height=2, command=self.calculate_result).grid(row=4, columnspan=5, sticky=expand_button)
 
    def number_pressed(self, button_number):
        """This function is called when buttons 0 - 9 are pushed"""
 
        if not any(self.operations.values()):
            if self.first_number_selected == 0:
                self.first_number_selected = button_number
                self.display_label['text'] = str(button_number)
            else:
                self.display_label['text'] += str(button_number)
                self.first_number_selected = int(self.display_label['text'])
        elif self.second_number_selected == 0:
            self.second_number_selected = button_number
            self.display_label['text'] = str(button_number)
        else:
            self.display_label['text'] += str(button_number)
            self.second_number_selected = int(self.display_label['text'])
 
 
 
    def _number_callback(self, number):
        """Helper method that is creates a callback function
        for each of the buttons that indicate numbers."""
        return lambda: self.number_pressed(number)
 
    def operation_selected(self, operation):
        """This function is triggered when +,-,*, or / is pushed.
        First check if the first and second numbers are already selected.
        If so, it calculates the result of the operation and displays it,
            then it sets the operation to the last one pushed.
        This allows for multiply calculations before the '=' button is pushed."""
        if self.second_number_selected and self.first_number_selected:
            self.first_number_selected = self.calculate_result()
            self.display_label['text'] = str(self.first_number_selected)
 
        self._reset_operations()
        self.operations[operation] = True
 
    def _operation_callback(self, sign):
        """Helper method that is creates a callback function
        for each of the buttons that indicate operations."""
        return lambda: self.operation_selected(sign)
 
    def _reset_operations(self):
        """Reset the press-status of all the operations"""
        for operator in self.operations.keys():
            self.operations[operator] = False
 
    def calculate_result(self):
        """Performs calculation then sets up variables for future operations with the resulting number"""
        result = self.first_number_selected
        # The code can probably be rewritten in such a way that the operation that is to be performed
        # is directly accessible from the `operations` dictionary. This way if you add more operations
        # in the future, you wouldn't have to rewrite these methods in order to have them function
        # properly.
        if self.operations['+']:
            result = self.first_number_selected + self.second_number_selected
        elif self.operations['-']:
            result = self.first_number_selected - self.second_number_selected
        elif self.operations['*']:
            result = self.first_number_selected * self.second_number_selected
        elif self.operations['/']:
            result = round(self.first_number_selected / self.second_number_selected, 3)
            result = int(result) if result.is_integer() else result
 
        self.first_number_selected = result
        self.second_number_selected = 0  # Resets for next calculation if the clear button is not pressed
        self._reset_operations()
        self.display_label['text'] = str(result)
        return result
 
    def reset(self):
        """Reset all the variables to their default states"""
        self.first_number_selected = 0
        self.second_number_selected = 0
        self._reset_operations()
        self.display_label['text'] = '0'
 
    @staticmethod
    def run():
        frame = Tk.Tk()
        frame.geometry()
        frame.wm_title('Двоичный калькулятор')
        #frame.resizable(width=False, height=False)
        Calculator(frame)
        frame.mainloop()
 
 
def main():
    Calculator.run()
 
if __name__ == '__main__':
    main()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2019, 15:23
Ответы с готовыми решениями:

Двоичный палиндром
Восьмиклассники изучили, что такое слова палиндром. Это такие слова, которые читаются и в прямом и обратной порядке одинаково. ...

Двоичный код
Как в питоне переводить символы в питон "Что то" в двоичный код?

Двоичный поиск
Знаю как написать двоичный поиск, а как реализовать его в этой задаче не знаю... Входные данные В первой строке входных данных...

4
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
10.05.2019, 16:36
Лучший ответ Сообщение было отмечено Hasegawa как решение

Решение

Поменять int(…) на int(…, 2)?
1
0 / 0 / 0
Регистрация: 12.03.2019
Сообщений: 9
10.05.2019, 16:45  [ТС]
Спасибо, работает. А как сделать так, чтобы результат тоже в двоичном виде выдавало?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
10.05.2019, 16:54
Лучший ответ Сообщение было отмечено Hasegawa как решение

Решение

Python
1
self.display_label['text'] = '{:016b}'.format(result)
1
0 / 0 / 0
Регистрация: 12.03.2019
Сообщений: 9
10.05.2019, 17:00  [ТС]
Спасибо, разобрался
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.05.2019, 17:00
Помогаю со студенческими работами здесь

Двоичный поиск
Входные данные: В первой строке входных данных содержатся натуральные числа N и K (0<N,K≤100000). Во второй строке задаются N...

Двоичный поиск
Двоичный поиск В данной задаче можно пользоваться встроенными функциями. Входные данные В первой строке входных данных...

Двоичный поиск
A. Бинарный поиск ограничение по времени на тест 2 секунды ограничение по памяти на тест2 56 мегабайт ввод стандартный ввод вывод...

Двоичный поиск
Прошу помощи в выполнении задания: заполнить массив случайными числами и отсортировать его. Ввести число X. Используя двоичный поиск,...

Двоичный логарифм
По данному натуральному числу N выведите такое наименьшее целое число k, что 2k≥N. Операцией возведения в степень пользоваться нельзя! ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru