Hi,
Here is a code:
def beginning_zeros(x):
count = 0
for letters in x:
if letters == '0':
count += 1
else:
return count
I wrote this code to count the zeros at the beginning. While i excecuted it for '0001' it gave the right answer(3) but when i ran for '0000' it gives me 1. Can someone explain why? And what should i do for this?
Hi sarata,
Are you sure it returns 1 for the string '0000'? With me it returns 'None'.
And this is because you only return a value when a letter is encountered that is not '0'. This condition does not occur when you test '0000'.
The solution is to also return count when the for loop finishes.
Or, what I like more: break the loop when a letter is found that is not '0' and only have one return in the function.
def beginning_zeros(x):
count = 0
for letters in x:
if letters == '0':
count += 1
else:
break
return count
print(beginning_zeros("0001"))
print(beginning_zeros("0000"))
Output:
3
4
(Mar-07-2021, 10:04 AM)ibreeden Wrote: [ -> ]Hi sarata,
Are you sure it returns 1 for the string '0000'? With me it returns 'None'.
And this is because you only return a value when a letter is encountered that is not '0'. This condition does not occur when you test '0000'.
The solution is to also return count when the for loop finishes.
Or, what I like more: break the loop when a letter is found that is not '0' and only have one return in the function.
def beginning_zeros(x):
count = 0
for letters in x:
if letters == '0':
count += 1
else:
break
return count
print(beginning_zeros("0001"))
print(beginning_zeros("0000"))
Output:
3
4
Thanks a lot ! Now i get it :)
(Mar-07-2021, 09:03 AM)saratha Wrote: [ -> ]I wrote this code to count the zeros at the beginning. While i excecuted it for '0001' it gave the right answer(3) but when i ran for '0000' it gives me 1. Can someone explain why? And what should i do for this?
Just for fun!
def beginning_zeros(x):
count = 0
for i in range(len(x)):
if x[i] == '0':
count += 1
else:
pass
return count
print(beginning_zeros('0.010'))
print(beginning_zeros('1,000,010.05'))
(Mar-10-2021, 04:49 PM)ebolisa Wrote: [ -> ]Just for fun!
Not so fun as it has
range(len(x))
and doesn't solve the task😉
Maybe more fun all your code is
.count('0')
>>> s = "1,000,010.05"
>>> s.count('0')
6
Short one that solve the task could be.
>>> s = "0000"
>>> len(s)-len(s.lstrip('0'))
4
>>> s = "001000000"
>>> len(s)-len(s.lstrip('0'))
2
(Mar-11-2021, 01:34 AM)snippsat Wrote: [ -> ]>>>
>>> len(s)-len(s.lstrip('0'))
2
I understand what you mean. My code was based on the 3rd post (as a rookie to a rookie comment), I didn't read the first 2. So, post 3 is wrong then and the correct answer is
len(s)-len(s.lstrip('0'))
as it's counting 0 to the left of a digit above 0? However, the following code fails.
def beginning_zeros(x):
count = len(x) - len(x.lstrip('0'))
# count = 0
# for i in range(len(x)):
# if x[i] == '0':
# count += 1
# else:
# pass
return count
print(beginning_zeros('0.010'))
print(beginning_zeros('1,000,010.05'))
(Mar-11-2021, 08:38 AM)ebolisa Wrote: [ -> ]I understand what you mean. My code was based on the 3rd post
No problem is always fine that someone take a look and has other solution 👍
(Mar-11-2021, 08:38 AM)ebolisa Wrote: [ -> ]as it's counting 0 to the left of a digit above 0? However, the following code fails.
Look ok as the task was to count leading 0,so also
,.
should break if not specified otherwise.
def beginning_zeros(x):
count = len(x) - len(x.lstrip('0'))
return count
print(beginning_zeros("0001"))
print(beginning_zeros("0000"))
print(beginning_zeros('0.010'))
print(beginning_zeros('1,000,010.05'))
Output:
3
4
1
0
def beginning_zeros(x):
count = 0
for letters in x:
if letters == '0':
count += 1
else:
break
return count
print(beginning_zeros("0001"))
print(beginning_zeros("0000"))
print(beginning_zeros('0.010'))
print(beginning_zeros('1,000,010.05'))
Output:
3
4
1
0
Why i did mention
range(len(x))
is this:
Never use "for i in range(len(sequence)):