Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python:仅使用while循环返回不带前导零的字符串_Python 3.x_While Loop - Fatal编程技术网

Python 3.x Python:仅使用while循环返回不带前导零的字符串

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

函数如下所示。我想对此方法使用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 < 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
:如果您使用
进行
循环,它将(顾名思义)继续进行下一项