Слова вместо чисел - PullRequest
       0

Слова вместо чисел

0 голосов
/ 06 мая 2020

Я пытаюсь решить это: https://open.kattis.com/problems/wordsfornumbers

В чем проблема этого кода?

import re
import sys


ls = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
ls2 = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']

mp = {0: 'zero', 1: 'one', 2: 'two', 3: 'tree', 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: 'nineteen', 20: 'twenty',
      30: 'thirty', 40: 'forty', 50: 'fifty', 60: 'sixty', 70: 'seventy', 80: 'eighty', 90: 'ninety'}

for i in range(8):
    for j in range(9):
        mp[(i+2) * 10 + (j+1)] = ls2[i] + '-' + ls[j]


for line in sys.stdin:
    if re.findall(r'^\d+((?= )|$)', line):
        s = re.sub(r'((?<= )|^)\d+((?= )|$)', lambda m: mp[int(m.group())], line).capitalize()
    else:
        s = re.sub(r'((?<= )|^)\d+((?= )|$)', lambda m: mp[int(m.group())], line)
    print(s, end='')

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Решено. проблема заключалась в "дереве", которое должно быть "три

"
0 голосов
/ 06 мая 2020

Вам необходимо использовать

s = re.sub(r'([^\S\r\n]|^)(\d+)(?!\S)', repl, line,flags=re.M)

Аргумент замены - это метод обратного вызова, который создает правильную замену на основе текста, захваченного в Группе 1:

def repl(m):
    if len(m.group(1)) > 0:
        return "{}{}".format(m.group(1),mp[int(m.group(2))]) 
    else:
        return "{}{}".format(m.group(1), mp[int(m.group(2))]).capitalize()

Как видите, регулярное выражение соответствует следующему:

  • ([^\S\r\n]|^) - Группа 1: либо горизонтальный пробел, либо начало строки (из-за флага re.M, ^ также соответствует началу позиций строки)
  • (\d+) - Группа 2: любая 1 или более цифр
  • (?!\S) - граница пробела справа (сразу справа от текущего местоположения должен быть пробел или конец строки).

См. Python демонстрацию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...