Python 3.x Python:仅使用while循环返回不带前导零的字符串
函数如下所示。我想对此方法使用while循环,而不使用任何方法,因为我想更多地练习使用while循环和if语句Python 3.x Python:仅使用while循环返回不带前导零的字符串,python-3.x,while-loop,Python 3.x,While Loop,函数如下所示。我想对此方法使用while循环,而不使用任何方法,因为我想更多地练习使用while循环和if语句 def remove_leading_zeros(s): '''(str) -> str Return s, but without any extra leading zeros e.g. given "007", return "7" Precondition: Each character of s is a number. ''' i = 0 r = '' while i
def remove_leading_zeros(s):
'''(str) -> str
Return s, but without any extra leading zeros
e.g. given "007", return "7"
Precondition: Each character of s is a number.
'''
i = 0
r = ''
while i < len(s):
if s[i] != '0':
r = r + s[i]
i += 1
return r
def删除前导零:
''(str)->str
返回s,但不包含任何额外的前导零
e、 g.给定“007”,返回“7”
前提条件:s的每个字符都是一个数字。
'''
i=0
r=''
而我
因此,当我键入删除前导零('0001950')
时,我希望输出为'1950'
。
然而,对于上面的函数,我似乎忽略了所有的零。我应该修改什么来创建一个只忽略前导零的函数 我还尝试了
r=r+s[I://code>,这样一旦遇到非零,它就会在之后返回所有内容,但我不确定如何在这一点上结束循环
决心。感谢所有的帮助 循环所做的是跳过所有的零。你没有逻辑来记住你是否已经有了一个非零的数字。您可以通过使用以下内容替换循环来修复此问题:
nonZeroEncountered = False
while i < len(s):
if nonZeroEncountered:
r = r + s[i]
elif s[i] != '0':
nonZeroEncountered = True;
r = r + s[i]
i += 1
return r
nonzero=False
而我
基本上,您需要第一个非零数字之后的所有数字。此循环将跳过零,直到达到非零数字,在此之后它将不再跳过任何字符。您的循环所做的是跳过所有零。你没有逻辑来记住你是否已经有了一个非零的数字。您可以通过使用以下内容替换循环来修复此问题:
nonZeroEncountered = False
while i < len(s):
if nonZeroEncountered:
r = r + s[i]
elif s[i] != '0':
nonZeroEncountered = True;
r = r + s[i]
i += 1
return r
nonzero=False
而我
基本上,您需要第一个非零数字之后的所有数字。此循环将跳过零,直到达到非零数字,在此之后它将不再跳过任何字符。您可以对其进行更新,以便在遇到第一个非零数字后停止检查字符是否为零(目前,即使找到非零数字,您仍在检查)。例如,您可以执行以下操作:
def remove_leading_zeros(s):
i = 0
while i < len(s):
if s[i] == '0':
# do nothing
i += 1
else:
return s[i:]
def删除前导零:
i=0
而我
我测试了这个,它似乎起了作用。沿着这条思路做的事情应该能奏效。这个想法是,当你打到第一个非零数字后,你停止检查任何东西,只返回剩下的任何东西
编辑:修复了我原始答案中的两个错误。您可以对其进行更新,以便在遇到第一个非零数字后停止检查字符是否为零(目前,即使找到非零数字,您仍在检查)。例如,您可以执行以下操作:
def remove_leading_zeros(s):
i = 0
while i < len(s):
if s[i] == '0':
# do nothing
i += 1
else:
return s[i:]
def删除前导零:
i=0
而我
我测试了这个,它似乎起了作用。沿着这条思路做的事情应该能奏效。这个想法是,当你打到第一个非零数字后,你停止检查任何东西,只返回剩下的任何东西
编辑:修复了我原始答案中的两个错误。您可以添加一个布尔变量,以指示是否遇到了第一个非零数字,并仅从那里附加到r
:
def删除前导零:
i=0
r=''
开始=错误
而我
i+1==len(s)
是对删除前导零('000')
的边缘大小写的额外检查,以确保它返回'0'
而不是'
,您可以添加一个布尔变量来指示是否遇到了第一个非零数字,并且只从那里附加到r
:
def删除前导零:
i=0
r=''
开始=错误
而我
i+1==len(s)
是对remove_leading_zero('000')
的边缘大小写的额外检查,以确保它返回'0'
而不是'
找到非零时只返回字符串的其余部分:
i = 0
r = ''
while i < len(s):
if s[i] != '0':
return s[i:]
i += 1
return r
找到非零时,只需返回字符串的其余部分:
i = 0
r = ''
while i < len(s):
if s[i] != '0':
return s[i:]
i += 1
return r
有一件事还没有人提到,那就是当您还没有准备好从函数返回时,如何提前结束循环:使用break
语句。大概是这样的:
while True: # A common way to write an "infinite" loop
print("Doing some work...")
result = do_something()
if result is None: # Or whatever other signal means "we're finished here"
break # The next thing printed will be "We're done!"
print("Going through the loop again...")
print("We're done!")
看到了吗?break
语句中断循环,并在循环后的下一个语句中恢复程序流,在本例中,这是打印(“我们完成了!”)
函数调用
还有continue
语句,它再次直接跳到循环的顶部,跳过所有剩余语句。如果上述循环中的中断
是一个继续
,那么得到无
结果将导致跳过打印(“再次循环…”)
调用并直接返回到打印(“做一些工作…”)
。当然,那就没有办法退出循环,它实际上是一个无限循环,这将是一件坏事™.
关于continue
:如果您使用进行循环,它将(顾名思义)继续进行下一项