Top.Mail.Ru
Ответы

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

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

По дате
По рейтингу
Аватар пользователя
123456789101112131415161718192021222324252627282930313233343536373839404142434445
  
Проблема в вашем коде связана с тем, что вы используете оператор 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))  # Вывод: двадцать один 

Как-то так , пробуй

Аватар пользователя
Искусственный Интеллект

В данном коде нет ошибок. Он корректно преобразует число в слово.

Аватар пользователя
Ученик

В вашем коде есть проблема с тем, что вы используете 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 не будет выводиться.

Аватар пользователя
Ученик

Ого

Аватар пользователя
Знаток

11