Python 键盘中断程序不返回值
我的问题是: 编写一个程序,生成100个0或1的随机整数 然后找到: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):
- 零的最长运行时间,一行中零的最大数量。例如,
中零的最长行程是[1,0,1,1,0,0,0,0,1,0,0]
4
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
,然后重置计数器!