While循环可以在函数内部吗?

时间:2016-06-25 07:37:47

标签: python python-3.x

def make_to_str_list(list):
    for c in range(0, len(list)):
        list[c] = str(list[c])
    return list


def count_zeros(list):
    i = 0  # setting up the counter
    list = make_to_str_list(list)  # changes the list from a list of integers to a list of strings
    print(list)
    string = ''.join(list)  # changes list to a string
    print(string)
    while string.find('0') != -1:  # this is checking if there is a '0' in the string             
        del list[string.find('0')]  # this deletes the '0' from the string
        string = ''.join(list)  # this updates the string for the while loop
        print(string)
        i += 1  # adds a count
    return i  # returns the count


x = [1, 2, 0, 4, 0, 6, 7, 8, 9]
print(x)
print(count_zeros(x))
print(x)

您好,我是python的新手,我一直在尝试使用函数。 make_to_str_list函数接受一个数字列表,并将其替换为数字的字符串版本,以便在count_zeros函数中使用。我对make_to_str_list功能没有任何问题。我遇到的问题是当我将列表x传递给count_zeros函数时,该函数会改变代码剩余部分的列表。问题似乎在于while循环,因为我可以删除循环,它不再为整个代码改变x。我还注意到,如果我将return i缩进到while循环中,它还会阻止列表x被替换为代码的其余部分。但是,我假设这是因为它在while循环期间过早地停止了函数,因为函数返回1而不是我期待的2。以下是从代码中打印的内容:[1, 2, 0, 4, 0, 6, 7, 8, 9] ['1', '2', '0', '4', '0', '6', '7', '8', '9'] 120406789 12406789 1246789 2 ['1', '2', '4', '6', '7', '8', '9']第一个打印来自函数之前,以确保x = [1, 2, 0, 4, 0, 6, 7, 8, 9]接下来的四个打印来自函数内部。打印2是函数返回的值,打印['1', '2', '4', '6', '7', '8', '9']是调用函数后更改的x列表。

0 个答案:

没有答案