+ 11
Strange out put on CamelCase vs camelCase Why ???
I ran several test on words and sentences and my code worked yet when I ran the two versions of CamelCase mentioned above I received two different results. CamelCase converted to all lowercase and no underscores... camelcase đ€ camelCase converted to all lowercase as well but correct form as camel_case đ As I mentioned, I ran other test from AbraCadAbra ( abra_cadabra đ€) to DicTionAry ( dic_tion_ary đ) to AntiDisEstablishMenTarianIsm ( anti_dis_establish_men_tarian_ism đ ) I thought this was odd as this a SnakeCase code and yet when execution gave two different results .. https://code.sololearn.com/c0Z2xn1iJ8We/?ref=app
10 Respostas
+ 5
BroFar the conditions that cause failure are:
1. The first letter is capitalized
and
2. Another letter in the word matches that first letter.
It will skip inserting the underscore because of the logic in line 4 where it checks for a match with the first letter.
+ 4
Thanks Jay Matthews but why does that print statement have to be outside the for loop ?
It did correct both the CamelCase entry and the AbraCadAbra entry ..
print(x[0].lower(),end="")
understandable that x[0] comparison is not needed in the flow of the for loop.
+ 4
Thank you Jay Matthews But still don't exactly understand the other oddities like why the no underscore in CamelCase and the second missing underscore in AbraCadAbra as _abra ..
The if condition was an 'and' not an 'or' so elif condition is isupper() boolean by itself.
+ 4
Ah yes that makes totally sense.. Thanks Brian I see the error of my ways.
+ 4
Saheed Kehinde please I understand that you are new here. Only add comments to threads that are of value to the quality of the threads.
+ 3
You're welcome, BroFar. I find that it can be hard to find a bug when I am overconfident that my good intentions translated to a good implementation. It's a good example to explain to newbies why testing is necessary.
+ 2
why the multiple print(end='')?
surely it would be more efficient to build a string then print at the end?
s = ''
for c in input():
if c.isupper():
s += f'_{c.lower()}'
else:
s += c
s = s.lstrip('_')
print(s)
or one liner:
print(''.join(['_'+c.lower() if c.isupper() else c for c in input()]).lstrip('_'))
and because it's Python, there's a library for this. đ
https://code.sololearn.com/cqPOJTVZVV4I/?ref=app
+ 1
But there is always the edge case of multiple consecutive uppercase that is always messed up...
example: IOError or HTTPRequest
+ 1
It's PascalCase and cameCase
+ 1
Hello