У меня есть вопрос кодирования, который я решил в python3. Но я хотел бы знать, есть ли лучший способ написать это, чтобы работать быстрее в python3 - PullRequest
1 голос
/ 21 апреля 2020

Я новичок ie до python. Недавно я попытался выполнить упражнение по кодированию. Я выполнил упражнение по написанию кода, но некоторые тестовые примеры не дали результатов, сказав, что код занимает слишком много времени, вероятно, больше, чем 10 se c. Я попытался осмотреться, чтобы увидеть, как я могу иметь код более эффективно, но информации слишком много. Любая помощь или направление приветствуется. Ниже приведены некоторые подробности, относящиеся к упражнениям.

  • Джек и Джилл играют в игру.

    1. Для игры требуется ввод случайной целочисленной последовательности, состоящей из 1 и 0 только. Последовательность ввода может быть (1,0,0,1,0) или (1,1,1,0,1,0) ..
    2. Джек будет иметь возможность выбрать первые n чисел. Джилл придется взять оставшиеся числа в последовательности.
    3. Оценка игры производится следующим образом - если входное значение равно 1, то счет увеличится на 1, а входное значение равно 0, счет уменьшится на 1.

Мне нужно построить функцию, которая принимает целочисленный список (последовательность) в качестве входных данных. В списке может быть не более 10 ^ 5 элементов. Функция должна вернуть минимальное количество чисел, которое Джек должен был выбрать из последовательности ввода, чтобы его оценка была больше, чем у Джилл.

Например: мы передаем ввод функции как [1,1,0,0,0] - минимальное количество чисел, которое Джеку нужно выбрать, - 0.

объяснение : если Джек не выберет ни одного номера - его счет будет равен 0. Джилл должен выбрать все оставшиеся номера. его счет будет 1 + 1-1-1-1 = -1. поэтому функция должна выводить 0 в качестве вывода.

Например: мы передаем ввод функции как [0,1,1,0,1] - минимальное количество чисел, которое нужно выбрать Джеку, равно 3.

объяснение : если джек не выбирает никаких значений, то - оценка джек -0 и оценка Джилл - -1 + 1 + 1-1 + 1 = 1.

  • , если Джек выбирает одно значение, тогда оценка Джека - -1 и оценка Джилла - 1 + 1-1 + 1 = 2

  • , если Джек выбирает первые 2 значения, затем оценка Джека - 1-1 и оценка Джилла - 1-1 + 1 = 1

  • , если Джек выбирает первые 3 значения, тогда оценка Джека - 1-1 + 1 = 1 и оценка Джилла - -1 + 1 = 0

    - Как вы можете видеть, оценка Джек больше, чем Джилл, поэтому функция должна напечатать 3 в качестве вывода.

Ниже приведены два способа, которыми я пытался это сделать.

def game(s):
    #create a new list which substitutes 0 with -1 in input list so that I am sum the values oflist.
    newlist1=[-1 if p==0 else 1 for p in s]
    if sum(newlist1)<0:
        print("the minimum amount numbers jack need to pick is: ", 0)
    else:
        for l in range(1,len(s)+1):  # main loop
            jackscore=0
            jillscore=0       
            for m in range(l):   #loop to calculate jack's score
                if s[m] == 1:
                    jackscore=jackscore+1
                else:
                    jackscore=jackscore-1
            for n in range(l,len(s)):    #loop to calculate jack's score
                if s[n] == 1:
                   jillscore=jillscore+1
                else:
                   jillscore=jillscore-1
             #for each iteration we will check if jack's score is greater than Jill      
            if jackscore>jillscore: 
                break
        print("the minimum amount numbers jack need to pick is: ",l)

#main program starts here
if __name__ == '__main__':
    #y=[1,0,0,1,0]
    y = [int(x) for x in input("enter any number of 1 and 0 seperated by comma: ").split(',')]
    game(y)

вторая попытка

def game(s):
     #create a new list which substitutes 0 with -1 in input list so that I am sum the values oflist.
    newlist1=[-1 if p==0 else 1 for p in s]
    if sum(newlist1)<0:
        print("the minimum amount numbers jack need to pick is: ", 0)
    else:
        for l in range(1,len(s)+1):  # main loop     
            #create 2 new lists one for jack and other for Jill and sum values in list
            if sum(newlist1[:l])>sum(newlist1[l:]):
                break
        print("the minimum amount numbers jack need to pick is: ",l)

#main program starts here
if __name__ == '__main__':
    #y=[1,0,0,1,0]
    y = [int(x) for x in input("enter any number of 1 and 0 seperated by comma: ").split(',')]
    game(y)

Существуют ли другие способы, которые могут работать быстрее, чем эти. если да, пожалуйста, помогите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...