Напишите любое число от 1 до 1000 введеное пользователем буквами например 2-два,150-сто пятьдесят python

Adam1003300 Adam1003300    2   08.08.2019 20:38    10

Ответы
ExeLisor ExeLisor  04.10.2020 05:49

nums = {

"один":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

}

text = input()

result = 0

list = text.split()

for i in list:

result += nums[i]

print(result)

ПОКАЗАТЬ ОТВЕТЫ
Shamsik05 Shamsik05  04.10.2020 05:49

class WordConstructor:

   def __init__(self, number):

       self.number = number

   def vocab(self, number, args=None):

       if number == 1:

           return "Один"

       elif number == 0:

           return "Ноль"

       elif number == 2 and args:

           return "Две"

       elif number == 2:

           return "Два"

       elif number == 3:

           return "Три"

       elif number == 4 and args:

           return "Четыр"

       elif number == 4:

           return "Четыре"

       elif number == 5:

           return "Пять"

       elif number == 6:

           return "Шесть"

       elif number == 7:

           return "Семь"

       elif number == 8:

           return "Восемь"

       elif number == 9:

           return "Девять"

       elif number == 10:

           return "Десять"

       elif number == 11:

           return "Одиннадцать"

       elif number == 12:

           return "Двенадцать"

       elif number == 'suf.nadcat':

           return "надцать"

       elif number == 'suf.dcat':

           return "дцать"

       elif number == "suf.yat":

           return "десят"

       elif number == "suf.ok":

           return "ок"

       elif number == 90:

           return "Девяносто"

       elif number == 100:

           return "Сто"

       elif number == 'suf.sot':

           return "сот"

   def get_num_from_number(self, number, pos):

       return int(str(number)[pos])

   def construct(self):

       if self.number < 13:

           print(self.vocab(self.number))

       elif self.number < 20:

           if self.number == 14:

               print(self.vocab(int(str(self.number)[1]), args=True) + self.vocab("suf.nadcat"))

           else:

               print(self.vocab(int(str(self.number)[1]), args=True).replace("ь", "") + self.vocab("suf.nadcat"))

       elif self.number < 100:

           first = self.get_num_from_number(self.number, 0)

           second = self.get_num_from_number(self.number, 1)

           if second == 0:

               if first == 4:

                   print("Сор" + self.vocab("suf.ok"))

               elif first < 5:

                   print(self.vocab(first, args=True) + self.vocab("suf.dcat"))

               elif first < 9:

                   print(self.vocab(first) + self.vocab("suf.yat"))

               elif first == 9:

                   print(self.vocab(self.number))

               else:

                   print(self.vocab(first, args=True) + self.vocab("suf.dcat"))

           else:

               if first == 4:

                   print("Сор" + self.vocab("suf.ok") + " " + self.vocab(second).lower())

               elif first < 5:

                   print(self.vocab(first, args=True) + self.vocab("suf.dcat") + " " + self.vocab(second).lower())

               elif first < 9:

                   print(self.vocab(first) + self.vocab("suf.yat") + " " + self.vocab(second).lower())

               elif first == 9:

                   print(self.vocab(self.number - second) + " " + self.vocab(second).lower())

               else:

                   print(self.vocab(first, args=True) + self.vocab("suf.dcat") + " " + self.vocab(second).lower())

       elif self.number < 1000:

           zero = self.get_num_from_number(self.number, 0)

           first = self.get_num_from_number(self.number, 1)

           second = self.get_num_from_number(self.number, 2)

           if second == 0 and first == 0:

               if zero == 4:

                   print(self.vocab(zero) + self.vocab(100).lower())

               elif zero == 2:

                   print("Двести")

               elif zero == 3:

                   print(self.vocab(zero) + self.vocab(100).lower().replace("о", "а"))

               elif zero == 1:

                   print(self.vocab(100))

               elif zero <= 9:

                   print(self.vocab(zero) + self.vocab('suf.sot').lower())

for i in range(0, 1000):

   a = WordConstructor(i)

   a.construct()

Код очень нетривиален и не оптимизорован. Работает с 0-100 числами и может еще 200, 300...

Дальше с >100 писать мне очень лень, уж простите.

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика