Python: строка в CamelCase - PullRequest
       0

Python: строка в CamelCase

0 голосов
/ 01 апреля 2020

Это вопрос от Codewars: завершите метод / функцию, чтобы она преобразовывала слова, разделенные тире / подчеркиванием, в верблюжий корпус. Первое слово в выходных данных следует использовать только с заглавной буквы, если исходное слово было написано с заглавной буквы (известный как верхний регистр верблюда, также часто называемый Pascal регистр).

Входные тестовые примеры следующие:

test.describe("Testing function to_camel_case")
test.it("Basic tests")
test.assert_equals(to_camel_case(''), '', "An empty string was provided but not returned")
test.assert_equals(to_camel_case("the_stealth_warrior"), "theStealthWarrior", "to_camel_case('the_stealth_warrior') did not return correct value")
test.assert_equals(to_camel_case("The-Stealth-Warrior"), "TheStealthWarrior", "to_camel_case('The-Stealth-Warrior') did not return correct value")
test.assert_equals(to_camel_case("A-B-C"), "ABC", "to_camel_case('A-B-C') did not return correct value")

Это то, что я пробовал до сих пор:

def to_camel_case(text):
    str=text
    str=str.replace(' ','')
    for i in str:
        if ( str[i] == '-'):
            str[i]=str.replace('-','')
            str[i+1].toUpperCase()
        elif ( str[i] == '_'):
            str[i]=str.replace('-','')
            str[i+1].toUpperCase()
    return str

Проходит первые два теста, но не основные:

 test.assert_equals(to_camel_case("the_stealth_warrior"), "theStealthWarrior", "to_camel_case('the_stealth_warrior') did not return correct value")
    test.assert_equals(to_camel_case("The-Stealth-Warrior"), "TheStealthWarrior", "to_camel_case('The-Stealth-Warrior') did not return correct value")
    test.assert_equals(to_camel_case("A-B-C"), "ABC", "to_camel_case('A-B-C') did not return correct value")

Что я делать неправильно?

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Я думаю, что сначала вам следует немного изменить синтаксис, потому что «i» - это строка, а не целое число. Это должно быть

for i in str:
    if (i == '-'):
    ...
1 голос
/ 01 апреля 2020

Возможно, у вас есть работающая реализация с небольшими ошибками, как указано в ваших комментариях, но я предлагаю вам:

  • разделить на разделители

  • применить заглавные буквы для всех, кроме первого токена

  • воссоединиться с токенами

Моя реализация:

def to_camel_case(text):
    s = text.replace("-", " ").replace("_", " ")
    s = s.split()
    if len(text) == 0:
        return text
    return s[0] + ''.join(i.capitalize() for i in s[1:])

IMO, это имеет немного больше смысла. Результат выполнения тестов:

>>> to_camel_case("the_stealth_warrior")
'theStealthWarrior'
>>> to_camel_case("The-Stealth-Warrior")
'TheStealthWarrior'
>>> to_camel_case("A-B-C")
'ABC'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...