Моя проблема:

Напишите программу, которая генерирует 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
1
Luismaia1994 3 Май 2019 в 16:21

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. Все это происходит, пока функция запоминает самый большой ряд нулей каждый раз, когда счетчик сбрасывается, и выводит наибольшее записанное значение.

Надеюсь это поможет!

1
Justin 3 Май 2019 в 16:20

Ваш код застревает в бесконечном цикле, а затем, когда вы нажимаете 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))
2
Devesh Kumar Singh 3 Май 2019 в 13:37

Вы, вероятно, нажимаете Ctrl+C, когда ваш скрипт выполняется - это посылает сигнал SIGTERM, чтобы закрыть программу.

0
Александр Свито 3 Май 2019 в 13:23