kryp4
13.01.2020 04:59

В двух глобальных переменных one, two находятся два натуральных числа: первое слагаемое и второе слагаемое. Напишите функцию roman(), которая считает их сумму и записывает ее в глобальную переменную three, переводит каждое слагаемое и сумму в римскую запись и печатает их, как показано в примере.

Формат ввода

one = 5

two = 4

roman()

Формат вывода

V + IV = IX

вот мой код, но вылазит ошибка - Глобальная переменная three не равна сумме one и two

Как исправить?

CONV_TABLE = ((1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD'),

(100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'),

(10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I'))

def arab_to_roman(number):

if number <= 0:

return ''

ret = ''

for arab, roman in CONV_TABLE:

while number >= arab:

ret += roman

number -= arab

return ret

def roman_to_arab(txt):

txt = txt.upper()

ret = 0

for arab, roman in CONV_TABLE:

while txt.startswith(roman):

ret += arab

txt = txt[len(roman):]

return ret

def roman():

global one

global two

global three

three = '{} + {} = {}'.format(arab_to_roman(one), arab_to_roman(two), arab_to_roman(one + two))

print(three)

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
alinaalya67
13.07.2020 19:16
1.
const n=10;
var a:array[1..n] of integer;
i,max,min:integer;
begin
Randomize;
writeln('Массив A:');
for i:=1 to n do
begin
a[i]:=random(51);
write(a[i]:4);
end;
writeln;
max:=a[1]; min:=a[1];
for i:=2 to n do
begin
if a[i]>max then max:=a[i];
if a[i]<min then min:=a[i];
end;
writeln('max = ',max,' min = ',min);
writeln(max,'-',min,' = ',max-min);
end.

Пример:
23 23 46 28 38 21 46 5 19 27
max = 46 min = 5
46-5 = 41

2.
const n=10;
var a:array[1..n] of integer;
i:integer; 
begin
Randomize;
writeln('Массив A:');
for i:=1 to n do
 begin
 a[i]:=random(21);
 write(a[i]:3);
 end;
writeln;
writeln('Числа >5:');
for i:=1 to n do
 if a[i]>5 then write(a[i]:3);
end.

Пример:
Массив A:
 7 0 12 5 1 1 13 15 13 20
Числа >5:
 7 12 13 15 13 20

3.
const n=10; 
var a:array[1..n] of integer;
i:integer; p:real;
begin
Randomize;
writeln('Массив A:');
for i:=1 to n do
 begin
 a[i]:=random(11);
 write(a[i]:3);
 end;
writeln;
p:=1;
for i:=1 to n do
 if a[i]<>0 then p:=p*a[i];
write('p = ',p);
end.

Пример:
Массив A:
 5 7 1 6 0 0 4 1 5 0
p = 4200
0,0(0 оценок)
Ответ:
Andrey720
13.07.2020 19:16
Цифры в номере по условию не зависят от буквы, поэтому если возможное количество букв n (n букв в алфавите) и наборов из 3 цифр, удовлетворяющих условию m, то всего возможно n*m различных номеров.
Посчитаем m.
Для начала посчитаем количество номеров, содержащих ровно одну цифру 7. их 3 * 9 * 9 = 243 (3 возможных позиции расположения этой цифры, а каждая из оставшихся цифр - одна из 9 (всего цифр 10, исключаем цифру 7). Среди них не может быть чисел, содержащих более 2 нулей, поэтому все эти числа подходят.
Теперь посчитаем количество наборов из 3 цифр, не содержащих ни одной 7. Их 9 * 9 * 9 = 729 (всего возможно 9 цифр на каждой позиции). Но среди них есть ровно один набор, содержащий более 2 нулей: 000. Отнимем его: 729 - 1 = 728
m = 728 + 243 = 971
Всего номеров 971 * n, где n - количество букв в алфавите
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота