Помогите с задачкой на словари

Flajkey

Новичок
Пользователь
Дек 27, 2021
7
0
1
Есть такая задача: Пользователь вводит число от 0 до 999. Если человек вводит "100", то программа должна вывести "сто рублей" (склонения не забываем), Помогите пожалуйста, я только за словари взялся
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
а что так строго-словарь, я так понимаю в него строго 999 вариантов прописать нужно, не?
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
вот пример словаря
Код:
dict = {
    'first_name': 'Robinson',
    'last_name': 'Crusoe',
    'username': 'Friday1719'
}
в нём всё заполнено, или нужно его сгенерировать?
 

Flajkey

Новичок
Пользователь
Дек 27, 2021
7
0
1
а что так строго-словарь, я так понимаю в него строго 999 вариантов прописать нужно, не?
 

Flajkey

Новичок
Пользователь
Дек 27, 2021
7
0
1
Так нет же,тут можно находить остаток от деления, (если число в диапазоне от 100 до 999) и выводить "643" == "шестьсот сорок три рубля"
 

Flajkey

Новичок
Пользователь
Дек 27, 2021
7
0
1
вот пример словаря
Код:
dict = {
    'first_name': 'Robinson',
    'last_name': 'Crusoe',
    'username': 'Friday1719'
}
в нём всё заполнено, или нужно его сгенерировать?

Сначала заполнить естественно, а потом программа должна пробежаться по циклу,и найти нужные данные,как я писал выше
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
ну так заполните))
 

Flajkey

Новичок
Пользователь
Дек 27, 2021
7
0
1
ну так заполните))
Хорошо, для наглядности
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Пользователь вводит число от 0 до 999. Если человек вводит "100", то программа должна вывести "сто рублей" (склонения не забываем)
Вот пример:
Python:
# получаем число от пользователя
n = int(input())
# создадим словарь с числами и их прописными вариантами
d = {
    1: 'один',
    2: 'два',
    3: 'три',
    4: 'четыре',
    5: 'пять',
    6: 'шесть',
    7: 'семь',
    8: 'восемь',
    9: 'девять',
    10: 'десять',
    11: 'одиннадцать',
    12: 'двенадцать',
    13: 'тринадцать',
    14: 'четырнадцать',
    15: 'пятнадцать',
    16: 'шестнадцать',
    17: 'семнадцать',
    18: 'восемнадцать',
    19: 'девятнадцать',
    20: 'двадцать',
    30: 'тридцать',
    40: 'сорок',
    50: 'пятьдесят',
    60: 'шестьдесят',
    70: 'семьдесят',
    80: 'восемьдесят',
    90: 'девяносто',
    100: 'сто',
    200: 'двести',
    300: 'триста',
    400: 'четыреста',
    500: 'пятьсот',
    600: 'шестьсот',
    700: 'семьсот',
    800: 'восемьсот',
    900: 'девятьсот',
}

# делим число на сотни, десятки, единицы (123 -> 100 20 3)
hundreds = (n // 100) * 100
tens = ((n % 100) // 10) * 10
units = n % 10

# получаем значения сотен, десятков и единиц из словаря
# если сотен нет - присваиваем пустую строку
w_hundreds = d.get(hundreds, '')
# если число содержит числа (10 - 19)
# то получаем из словаря значение для суммы десятков и единиц
# если не содержит - то значение для десятков
w_tens = ''
if tens == 10:
    w_tens = d.get(tens + units)
else:
    w_tens = d.get(tens, '')

# если число не содержит чисел (10 - 19) получаем значение для единиц
w_units = ''
if tens != 10:
    w_units = d.get(units)

# сформируем строку с полным числом
# list comprehension чтобы убрать лишние пробелы которые
# появляются если сотен или десятков в числе нет
number = " ".join([s for s in [w_hundreds, w_tens, w_units] if s])

# получим правильное окончание для слова рублей
rubles = ''
if units == 1 and tens != 10:
    rubles = 'рубль'
elif units in [2, 3, 4] and tens != 10:
    rubles = 'рубля'
else:
    rubles = 'рублей'

# выведем в консоль результат и учтем вариант n == 0
print(f"{'ноль' if n == 0 else number} {rubles}")
 

Форум IT Специалистов