Member 14141186 Ответов: 2

Написание функции , дающей входные данные и печатающей их с условием , в Python


I want to write a function, which will accept parameter and it will print with a condition (It's output will depend on the input). My program is giving key error. I am looking for an output like:
This number is less than 0 and it's spelling is one hundred
thirteen
and my code is: <pre>
def word(num):
   d1= {0:'Zero',1:'One',2:'Two',3:'Three',4:'Four',5:'Five',6:'Six',7:'Seven',8:'Eight',9:'Nine',10:'Ten',11:'Eleven',12:'Twelve',13:'Thirteen',14:'Fourteen',15:'Fifteen',16:'Sixteen',17:'Seventeen',18:'Eighteen',19:'Ninteen',20:'Twenty',30:'Thirty',40:'Fourty',50:'Fifty',60:'Sixty',70:'Seventy',80:'Eighty',90:'Ninty'}

   if (num<20):
      return d1[num]
   if (num<100):
      if num % 10 == 0:
         return d1[num]  
      else:
         return d1[num // 10 * 10] + ' ' + d1[num % 10]
   if (num < 0):
      return "This number is less than 0 and it's spelling is" + word(num)

print (word(- 100))
print (word(13))


Что я уже пробовал:

Я пытался писать ,
if (num < 0):
под строкой d1, но я получил ошибку, говорящую: "ошибка рекурсии: максимальная глубина рекурсии превышена в сравнении".

2 Ответов

Рейтинг:
1

OriginalGriff

Если вы подадите своему методу отрицательное значение, то ваше условие вступит в силу - и вы снова вызовете свою функцию с помощью точно такое же значение параметра!
Так что же происходит? Значение все еще отрицательно, поэтому условие все еще истинно, поэтому вы делаете то же самое снова. Решение простое: не передавайте одно и то же значение! Если это отрицательное число, передайте вместо него положительную версию:

if (num < 0):
   return "This number is less than 0 and it's spelling is" + word(-num)
И в следующий раз он будет положительным и будет работать нормально.


Рейтинг:
1

CPallini

Следующий Грифф- мудрое предложение...
Попробуй

def word(num):
  d1= {0:'Zero',1:'One',2:'Two',3:'Three',4:'Four',5:'Five',6:'Six',7:'Seven',8:'Eight',9:'Nine',10:'Ten',11:'Eleven',12:'Twelve',13:'Thirteen',14:'Fourteen',15:'Fifteen',16:'Sixteen',17:'Seventeen',18:'Eighteen',19:'Ninteen',20:'Twenty',30:'Thirty',40:'Fourty',50:'Fifty',60:'Sixty',70:'Seventy',80:'Eighty',90:'Ninty'}

  if num >= 100 or num <= -100:
    return "This number is out of range"
  elif num < 0:
    return "This number is less than 0 and it's spelling is Minus " + word(-num)
  elif num < 20:
    return d1[num]
  else:
    if num % 10 == 0:
      return d1[num]
    else:
      return d1[num // 10 * 10] + ' ' + d1[num % 10]



print (word(- 100))
print (word(- 42))
print (word(13))