6 / 6 / 0
Регистрация: 02.06.2020
Сообщений: 65

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

18.02.2021, 21:15. Показов 1482. Ответов 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
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru