Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите найти ошибку в коде

артемка Ученик (48), на голосовании 9 месяцев назад
def number_to_words(n):
di = {
0: 'ноль',
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: 'девяносто'
}
if n > 20 and n % 10 != 0:
p = n // 10 * 10
v = n % 10
print(di[p] + ' ' + di[v])
else:
return di[n]


Ввод Вывод
print(number_to_words(21)) двадцать один

А он выводит

двадцать один
None
Голосование за лучший ответ
ZachemTebeMoyNik? Гуру (2557) 10 месяцев назад
  
Проблема в вашем коде связана с тем, что вы используете оператор print в одной части условия и оператор return в другой части. Когда условие if не выполняется, функция возвращает None по умолчанию. Для исправления кода, вы можете использовать return в обоих случаях. Вот исправленный код:

python
Copy code
def number_to_words(n):
di = {
0: 'ноль',
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: 'девяносто'
}
if n > 20 and n % 10 != 0:
p = n // 10 * 10
v = n % 10
return di[p] + ' ' + di[v]
else:
return di[n]

# Пример использования
print(number_to_words(21)) # Вывод: двадцать один
Как-то так , пробуй
артемкаУченик (48) 10 месяцев назад
спасибо
ZachemTebeMoyNik? Гуру (2557) артемка, Не мне спасибо а ChatGPT ))
Ашот Айрапетян Ученик (157) 10 месяцев назад
В вашем коде есть проблема с тем, что вы используете print вместо return в одной из ветвей выполнения функции. Поэтому, когда вы вызываете print(number_to_words(21)), сначала выполняется внутренний print в функции, а затем внешний print пытается вывести то, что возвращает функция. Но поскольку вы используете print вместо return, функция возвращает None в случае, если число больше 20 и не кратно 10.

Чтобы исправить ошибку, вам нужно заменить print на return внутри функции:
def number_to_words(n):
di = {
# ... (ваш словарь) ...
}
if n > 20 and n % 10 != 0:
p = n // 10 * 10
v = n % 10
return di[p] + ' ' + di[v]
else:
return di[n]

# Теперь когда вы вызовете функцию, она должна работать правильно:
print(number_to_words(21)) # должно выводить "двадцать один"

Теперь функция number_to_words будет возвращать строку вместо того, чтобы печатать её, и None не будет выводиться.
YT_VolkOFF Оракул (80498) 10 месяцев назад
В данном коде нет ошибок. Он корректно преобразует число в слово.
Похожие вопросы