Моя проблема:
Напишите программу, которая генерирует 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
3 ответа
Измените 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
- это список случайно сгенерированных чисел, поэтому число 0
и 1
продолжают изменяться.
В вашей программе вы подсчитывали, сколько раз произошло ноль. Но, внеся изменения в программу, вы сможете найти самое большое количество нулей подряд.
Поскольку list()
является встроенной функцией Python, рекомендуется использовать переменные, которые не мешают встроенным функциям Python. Поэтому я изменил list()
на my_list()
. Вышеприведенная программа гарантирует, что после достижения нуля она начинает увеличивать значение c на 1
, но если она встречает число больше нуля, она сбрасывает значение c в 0
. Все это происходит, пока функция запоминает самый большой ряд нулей каждый раз, когда счетчик сбрасывается, и выводит наибольшее записанное значение.
Надеюсь это поможет!
Ваш код застревает в бесконечном цикле, а затем, когда вы нажимаете 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))
Вы, вероятно, нажимаете Ctrl+C
, когда ваш скрипт выполняется - это посылает сигнал SIGTERM
, чтобы закрыть программу.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.