Learn Python List Comprehension by Building a Case Converter Program - Step 20

Tell us what’s happening:

It keeps saying that my code doesn’t pass and that I should add an if clause… I get a valid result from my code so I don’t know where the problem has occurred

Your code so far

def convert_to_snake_case(pascal_or_camel_cased_string):
    # snake_cased_char_list = []
    # for char in pascal_or_camel_cased_string:
    #     if char.isupper():
    #       converted_character = '_' + char.lower()
    #       snake_cased_char_list.append(converted_character)
    #     else:
    #         snake_cased_char_list.append(char)
    # snake_cased_string = ''.join(snake_cased_char_list)
    # clean_snake_cased_string = snake_cased_string.strip('_')

    # return clean_snake_cased_string


# User Editable Region

    snake_cased_char_list = [
        '_' + char.lower() if char.isupper()
        else char
        for char in pascal_or_camel_cased_string
    ]
    return ''.join(snake_cased_char_list).strip('_')

# User Editable Region


def main():
    print(convert_to_snake_case('aLongAndComplexString'))

main()

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0

Challenge Information:

Learn Python List Comprehension by Building a Case Converter Program - Step 20

only if not if-else, doing more than requested there is no garantee that the tests will pass

That was what I thought as well but this is returned back to me… it asks for an ‘else’ after if expression. Another problem is that I don’t know how to add the ‘pascal_or_camel…’ statement without using ‘else’. :joy:

This happens because you removed the for part. You cannot write a comprehension without that.

Yes, I have realised this. But my problem is that my code shows no errors but cannot pass the challenge

snake_cased_char_list = [
’ + char.lower() if char.isupper()
else char
for char in pascal_or_camel_cased_string
]
return ‘’.join(snake_cased_char_list).strip('
’)

Please, format your code when you share it. It’s impossible to see the indentation otherwise.

It looks like your code almost works, but it has a minor issue. The problem lies in how the underscores are added before each uppercase letter, which results in an extra underscore at the beginning if the first character is uppercase. This causes the .strip('_') method to remove it improperly if the first character of the string is not uppercase. Here’s a revised version of your code that should work correctly:

def convert_to_snake_case(pascal_or_camel_cased_string):
    snake_cased_char_list = []
    for char in pascal_or_camel_cased_string:
        if char.isupper():
            converted_character = '_' + char.lower()
            snake_cased_char_list.append(converted_character)
        else:
            snake_cased_char_list.append(char)
    snake_cased_string = ''.join(snake_cased_char_list)
    clean_snake_cased_string = snake_cased_string.strip('_')
    return clean_snake_cased_string

def main():
    print(convert_to_snake_case('aLongAndComplexString'))
    print(convert_to_snake_case('ALongAndComplexString'))
    print(convert_to_snake_case('AnotherExampleString'))

main()`Preformatted text`

The main difference is that this code does not attempt to add the underscore in a single list comprehension and handles each character individually. This ensures that the underscores are placed correctly without adding any unintended underscores at the beginning or end of the string.

Hi, thanks for your response…but the instructions do not mention to create a new variable, so I’m not sure if that is the reason why my code still doesn’t pass. :slight_smile: