Codewars удаляет комментарии проблема случайным образом работает / не работает для 'попыток' тестов - PullRequest
1 голос
/ 30 мая 2020

В настоящее время я занимаюсь проблемой 4kyu в Codewars, где, учитывая строку и список символов, ваша функция должна удалять символы в строке и любые другие символы, которые следуют за ней, до конца строки. Я придумал решение, которое, как мне кажется, должно работать. Поскольку мне нужно удалить каждый символ в строке после нахождения специального символа, я разделяю строку на '\ n', так как это отмечает конец строки. Затем я приступил к написанию функции, которая проверяет все подстроки:

def solution(string,markers):
  str_arr = string.split('\n')
  print(str_arr)
  new_str = []

  for substring in str_arr:
    count = 0
    for mark in markers:
        if mark in substring:
            count +=1
    if count == 0:
        new_str.append(substring)
    for char in substring:
        if char in markers:
            sbstr = substring[:substring.index(char)-1]
            new_str.append(sbstr.strip())
            if str_arr.index(substring) == len(str_arr)-1:
                break
            print(new_str)

    solution = '\n'.join(new_str)
    return solution

Сначала я проверяю, есть ли в подстроке маркер, а если нет, я добавляю его в новый список. Это решение работает для большинства тестов, предоставляемых Codewars, но по какой-то причине есть тесты, которые эта функция просто не может решить. Один из них:

Тестирование решения ("! Яблоки бананы бананы яблоки - \ nарбузы '\ npears вишни апельсины ^ яблоки \ nчерри арбузы клубника бананы клубника", [' @ ',', ',' = ',' - ', "'", '!'])

, где мой вывод:

Он также должен работать со случайными входами: '! яблоки бананы бананы яблоки \ n! яблоки бананы бананы яблоки \ nарбузы \ nарбузы вишни апельсины ^ яблоки \ nчерри арбузы клубника бананы клубника 'должны быть равны' \ nарбузам \ npears вишни апельсины ^ яблоки \ nчерри арбузы клубника бананы клубника '

В настоящее время я не знаю как решить эти проблемы, тем более что функция отлично работает примерно в 40/48 случаях. Спасибо за любые предложения о том, как я могу улучшить свой код.

1 Ответ

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

Сначала вы должны удалить только конечные пробелы. Используйте для этого rstrip. strip удалит пробелы с обоих концов.

Затем вы должны присоединить последние строки.

Я оставлю код для справки:

def solution(string, markers):
    ss = string.split('\n')
    for i in range(len(ss)):
        s = ss[i]
        for marker in markers:
            index = s.find(marker)
            if index >= 0:
                s = s[:index].rstrip()
        ss[i] = s
    return '\n'.join(ss)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...