键盘中断程序不返回值

时间:2019-05-03 13:21:28

标签: python python-3.x

我的问题:

编写一个程序,该程序生成100个0或1的随机整数。

然后找到:

  • 最长的零游程,连续的最大零数。例如,[1,0,1,1,0,0,0,0,1,0,0]中最长的零游程为4

我已经生成了0到1之间的100个随机数。但是,我不确定第二个函数。我迭代了我的列表,如果任何元素为零,则返回该值。我还放置了continue语句,以便在任何值不同于零的情况下中断循环。

import random

l=[]

def list():
    for j in range(0,100):
        x=random.randint(0,1)
        l.append(x)
    return list
print(list())

def largest_row_of_zeros(l):
    c=0
    for j in l:
        while j==0:
            c+=1
            continue
    return c
print(largest_row_of_zeros(l))

我的编译器根本不返回任何值。

出现的内容是

input
<function list at 0x7f6a170dcbf8>                                                                                                                                                     
^CTraceback (most recent call last):                                                                                                                                                  
  File "main.py", line 26, in <module>                                                                                                                                                
    print(largest_row_of_zeros(l))                                                                                                                                                    
  File "main.py", line 24, in largest_row_of_zeros                                                                                                                                    
    continue                                                                                                                                                                          
KeyboardInterrupt

3 个答案:

答案 0 :(得分:2)

您的代码被卡住是一个无限循环,然后按Ctrl+C退出它时,会出现KeyboardInterrupt错误。这是因为while条件j==0是一个无限循环,因为在循环中看到0的那一刻,它就陷在while True循环中

此外,您也不应该将函数命名为list,因为list是python保留的关键字,因此这是不好的做法。

我已将您的代码固定如下

import random

#Function to get list of size 100 with 1s and 0s
def get_random_list():
    l = []
    #Append 0s and 1s randomly to list and return the list
    for j in range(0,100):
        x=random.randint(0,1)
        l.append(x)
    return l

#Function to get largest run of zeros
def largest_row_of_zeros(l):

    c=0
    max_c = 0
    #Keep track of max count seen so far
    for j in l:
        #If you encounter a 0, increment count
        if j == 0:
            c+=1
        #Else change max count and reset count
        else:
            if c > max_c:
                max_c = c
            c = 0
    return max_c

l = get_random_list()
print(largest_row_of_zeros(l))

答案 1 :(得分:1)

在第二个函数中将while更改为if,因为根本不会执行while循环。

import random

l=[]

def my_list():
    for j in range(0,100):
        x=random.randint(0,1)
        l.append(x)
    print (l)
    return l

def largest_row_of_zeros(l):

    c = 0
    zero_count = 0
    for j in l:
        if j==0:
            c+=1
        else:
            if c > zero_count:
                zero_count = c
            c = 0
    return zero_count

l = my_list()
print(largest_row_of_zeros(l))

输出:

[1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0]

3

另一个输出:

[1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1]

4

由于l是随机生成的数字的列表,因此输出将继续生成随机数,因此01的数量不断变化。

在您的程序中,您正在计算发生零的次数。但是现在通过修改程序,您将能够找到连续最多的零。

由于list()是python内置函数,因此建议使用不干扰python内置函数的变量。因此,我将list()更改为my_list()。上面的程序确保在遇到零之后,它开始将c的值增加1,但是如果遇到大于零的数字,它将c的值重置为0。这一切使函数在每次重置计数器时都记住最大的零行并打印出记录的最大值。

希望这会有所帮助!

答案 2 :(得分:0)

脚本执行时,您可能会按Ctrl+C-发送一个SIGTERM信号以关闭程序。