Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
6 / 6 / 0
Регистрация: 02.06.2020
Сообщений: 65

Перевод арабских цифр в римские. Ошибка в условии вывода и некорректное чтение переменной при обратном переводе

18.02.2021, 21:15. Показов 1459. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
делаю визуализацию перевода арабских чисел в римские и наоборот. сам перевод ясен, однако, в функции по переводу римских в арабские не дает использовать глобальное значение. выдает ошибку, приходится вводить всю цепочку в ручную (в коде сделала пометку)
проблема №2: когда идет анализ что во что переводим - из римских в арабские переводит без проблем, а вот наоборот - выдает ноль. я так понимаю я что-то неверно задаю про int. в общем, хелп ми плиз)

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
import tkinter as tk
 
CELL = 50
 
decimal = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1)
roman = 'M CM D CD C XC L XL X IX V IV I'
 
class RomanTranslator():
    def __init__(self, root):
        self.root = root
        self.canvas = tk.Canvas(self.root, width=300, height=100, bg='#ffaaaa')
        self.canvas.pack()
        self.root.title('RomanTranslator')
        self.canvas.create_text(2.2*CELL, CELL/2, text='Какое число преобразовываем?', font=(None, 10, "italic"))
        self.entry_n = tk.Entry(root, font=('Comic', 15), width=2, bg='#FFB6C1')
        self.entry_n.place(relwidth=0.25, rely=0.1, relx=0.73, relheight=0.2)
        self.entry_n.focus_set()
        self.button = tk.Button(self.root, text='OK', command=self.handler)
        self.button.place(relwidth=0.15, rely=0.4, relx=0.77, relheight=0.2)
        self.canvas.create_text(2.2 * CELL, 1.5*CELL, text='Получаем', font=(None, 10, "italic"))
        self.labeloutput = tk.Label(root, font=('Arial', 20), width=20, height=1, text='', bg='#FFC0CB')
        self.labeloutput.place(relwidth=0.25, rely=0.65, relx=0.73, relheight=0.2)
 
    def handler(self):
        num = self.entry_n.get()
        if num != int:
            self.roman_to_decimal(num)
            self.labeloutput.config(text=f'{self.roman_to_decimal(num)}')
 
        else:# тут почему-то не выполняет перевод, хотя сами по себе функции работают если данные задавать в консоли ,а не через entry
            num = int(self.entry_n.get())
            self.decimal_to_roman(num)
            self.labeloutput.config(text=f'{self.decimal_to_roman(num)}')
 
    def decimal_to_roman(self, num):
        global decimal, roman
        result = ''
        print(f'{num} =>')
        for deci, rom in zip(decimal, roman.split()):
            result += num // deci * rom
            num %= deci
        print(result)
        return result
 
    def roman_to_decimal(self, num):
        num = num.upper()
        result = 0
        print(f'{num} =>')
        for dec, roma in zip(decimal, 'M CM D CD C XC L XL X IX V IV I'.split()): #при использовании for deci, rom in zip(decimal, roman.split()): расчет не выполняется.. почему-то
            while num.startswith(roma):
                result += dec
                num = num[len(roma):]
        print(result)
        return result
 
if __name__ == '__main__':
    root = tk.Tk()
    rec = RomanTranslator(root=root)
    root.mainloop()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2021, 21:15
Ответы с готовыми решениями:

Возникла проблема при переводе из арабских чисел в римские
print("Арабские в римские") ch = int(input("Введите число: ")) if ch == 1: print("Ваше число: I") elif ch == 2: ...

Перевод арабских цифр в римские
Написать программу, которая переводит арабские цифры из текстового файла, в римские.

Перевод из арабских цифр в римские
Задача состоит в следующем: Ввести с клавиатуры год, по его номеру вывести номер столетия римскими цифрами. Подскажите пожалуйста, как...

2
0 / 0 / 0
Регистрация: 20.08.2020
Сообщений: 2
20.02.2021, 01:09
num = self.entry_n.get()

Будет возвращать всегда строку, потому проверки if-else не происходит.

Python
1
2
3
4
5
6
7
8
9
    def handler(self):
        try:
            num = int(self.entry_n.get())
            self.decimal_to_roman(num)
            self.labeloutput.config(text=f'{self.decimal_to_roman(num)}')
        except ValueError:
            num = self.entry_n.get()
            self.roman_to_decimal(num)
            self.labeloutput.config(text=f'{self.roman_to_decimal(num)}')

PS. проверку можно сделать куда лучше, первое что пришло в голову)
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
20.02.2021, 06:38
Цитата Сообщение от oceanters Посмотреть сообщение
в функции по переводу римских в арабские не дает использовать глобальное значение.
а его и не надо там использовать. Вообще их избегайте, хорошая функция получает все что нужно для работы из аргументов.
Цитата Сообщение от oceanters Посмотреть сообщение
global decimal, roman
разве если удалить не будет работать (ну если там нет других ошибок)? Я полагаю вы недостаточно четко представляете что такое глобал и нонлокал.

Добавлено через 1 минуту
Цитата Сообщение от oceanters Посмотреть сообщение
if num != int:
если это попытка получить тип, то это не так делается, плюс вам выше написали что там всегда строка

Добавлено через 1 минуту
Цитата Сообщение от oceanters Посмотреть сообщение
при использовании for deci, rom in zip(decimal, roman.split()): расчет не выполняется.. почему-то
           
не верю, должен выполняться, надо в отладчике посмотреть

Добавлено через 1 минуту
кстати, раз децимал и роман константы везде в паре, то почему словарь не создать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.02.2021, 06:38
Помогаю со студенческими работами здесь

Перевод арабских цифр в римские с++
Подскажите как перевести арабские цифры в римские... Например 12345 -> I II III IV V Заранее спасибо

Перевод арабских в римские
Задача №1 Для записи римскими цифрами используются символы I, V, X, L, C, D, M, обозначающие соответственно числа 1, 5, 10, 50, 100,...

Перевод арабских в римские
Для записи римскими цифрами используются символы I, V, X, L, C, D, M, обозначающие соответственно числа 1, 5, 10, 50, 100, 500, 1000....

Перевод арабских чисел в римские (C++ -> C#)
программа перевода из арабских цифр в римские, нужно перевести на С# #include "stdafx.h" #include <cstdlib> ...

Перевод Арабских чисел в Римские
Сделал программу которая из арабских чисел делает римские, ошибок нет,но программа не работает. Что не так? #include <iostream> ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru