Cómo escribir un ayudante de conversión de mayúsculas y minúsculas en Python


El reto

En este desafío, harás una función que convierte entre camelCase, snake_casey kebab-case.

Debes escribir una función que cambie a un caso dado. Debe ser capaz de manejar los tres tipos de casos:

change_case("snakeCase", "snake") # "snake_case"
change_case("some-lisp-name", "camel") # "someLispName"
change_case("map_to_all", "kebab") # "map-to-all"
change_case("doHTMLRequest", "kebab") # "do-h-t-m-l-request"
change_case("invalid-inPut_bad", "kebab") # None
change_case("valid-input", "huh???") # None
change_case("", "camel") # ""

Su función debe lidiar con entradas no válidas como se muestra, aunque solo se pasarán cadenas. Además, todos los identificadores válidos estarán en minúsculas excepto cuando sea necesario, en otras palabras, en los límites de palabras en camelCase.

La solución en código Python

Opción 1:

import re
def change_case(label, goal):
    if ('_' in label) + ('-' in label) + (label != label.decrease()) > 1:
        return
    if goal == 'snake':
        return re.sub('((A-Z))', r'_1', label.exchange('-', '_')).decrease()
    if goal == 'kebab':
        return re.sub('((A-Z))', r'-1', label.exchange('_', '-')).decrease()
    if goal == 'camel':
        return re.sub('((_-))((a-z))', lambda m: m.group(2).higher(), label)

Opcion 2:

def change_case(id, t):
    q = ('_' in id) + ('-' in id) + any(x.isupper() for x in set(id))
    if q > 1: return
    d = {'kebab': '-', 'snake': '_'}
    l, index = (''), 0
    for x in id:
        if not l(index) or not x.isupper() and x.isalpha() and l(index)(-1).isalpha():
            l(index) += x
        elif x.isalpha():
            l.append(x)
            index += 1
        else:
            l.append('')
            index += 1
    if t in d:
        return f'{d
    if t == 'camel':
        return ''.be a part of(w.capitalize() if i else w for i,w in enumerate(l))

Opción 3:

def change_case(id, t):
    if '_' in id and '-' in id or t not in ('snake','camel','kebab'):return None
    if not id: return ''
    if not id.islower():
        if '_' in id or '-' in id: return None
    if '-' in id:
        l=id.break up('-')
    elif '_' in id:
        l=id.break up('_')
    else:
        l,temp=(),''
        for i in id:
            if i.isupper():
                l.append(temp)
                temp=i.decrease()
            else:
                temp+=i.decrease()
        l.append(temp)
    if t=='snake':return '_'.be a part of(l)
    elif t=='kebab':return '-'.be a part of(l)
    else:return l(0)(0)+''.be a part of(i.capitalize() for i in l)(1:)

Casos de prueba para validar nuestra solución

check.it("Fundamental exams")
check.assert_equals(change_case("snakeCase", "snake"), "snake_case", "camelCase to snake_case conversion ought to work")    
check.assert_equals(change_case("some-lisp-name", "camel"), "someLispName", "kebab-case to camelCase conversion ought to work")    
check.assert_equals(change_case("map_to_all", "kebab"), "map-to-all", "snake_case to kebab-case conversion ought to work")    
check.assert_equals(change_case("doHTMLRequest", "kebab"), "do-h-t-m-l-request", "camelCase to kebab-case conversion ought to work")    
check.assert_equals(change_case("invalid-inPut_bad", "kebab"), None, "mIx-ed_cAse enter must be thought of invalid")    
check.assert_equals(change_case("valid-input", "huh???"), None, "Invalid goal instances must be handled")    
check.assert_equals(change_case("", "camel"), "", "An empty string shouldn't be modified.")

Related Articles

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Same Category

spot_img

Stay in touch!

Follow our Instagram