Python 键盘中断程序不返回值

Python 键盘中断程序不返回值,python,python-3.x,Python,Python 3.x,我的问题是: 编写一个程序,生成100个0或1的随机整数 然后找到: 零的最长运行时间,一行中零的最大数量。例如,[1,0,1,1,0,0,0,0,1,0,0]中零的最长行程是4 我已经生成了100个介于0和1之间的随机数。但是,我不确定我的第二个函数。我迭代了我的列表,如果任何元素为零,我就返回值。我还使用continue语句,以便在任何值与零不同时中断循环 import random l=[] def list(): for j in range(0,100):

我的问题是:

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

然后找到:

  • 零的最长运行时间,一行中零的最大数量。例如,
    [1,0,1,1,0,0,0,0,1,0,0]
    中零的最长行程是
    4
我已经生成了100个介于0和1之间的随机数。但是,我不确定我的第二个函数。我迭代了我的列表,如果任何元素为零,我就返回值。我还使用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
输入
^CTraceback(最近一次通话最后一次):
文件“main.py”,第26行,在
打印(最大的0行(l))
文件“main.py”,第24行,在0的最大行中
继续
键盘中断

当脚本执行时,您可能正在按
Ctrl+C
,这会发送一个
SIGTERM
信号来关闭程序。

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

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
是一个随机生成数的列表,因此
0
1
的数量会不断变化

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

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


希望这有帮助

您的代码被卡住是一个无限循环,然后当您按下
Ctrl+C
退出它时,您会得到
键盘中断
错误。这是因为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))

我已经改变了。在第一个函数中,我有返回列表,但我想要的是l。无论哪种方式,我的程序都返回c=227,这是不正确的。请在第二个函数中将
while
更改为
if
,然后重试。您在列表中计算所有零。您必须检查是否有
1
,并开始建议新的零。但是你必须记住以前的
c
与新的
c
相比,获得更大的价值。这是另一个重要的方面@Devesh Kumar Singh为什么你不在i==0时增加计数的一部分,而没有说..如果i==0 c+=1 max=c,我就没有得到它!我没有做什么!你能解释清楚吗?当你说如果j==0,你就增加计数器。但是为什么不写这个和那个max=counter,因为max是零的数量,计数器在那一刻会遇到零,所以直到j==0发生,我们在计算连续的零,但是当我们遇到一个非零时,我们保存到目前为止遇到的零的数量是
max\u c
,然后重置计数器!