Професионална програма
Loading...
ralicaterzieva avatar ralicaterzieva 1 Точки

Array Manipulation - 60 %

Здравейте, 

в Упражненията на функциите, не мога повече да направя нищо със задачата, за да ми даде повече от 60 процента. 

Кое толкова съм объркала или пропуснала?

Отделно не ми дава отново да видя какъв е инпутът на грешните тестове и нищо не мога да разбера.

Ето ми кода


import sys
array = input().split(" ")
array = [int(x) for x in array]

def manipulate(array):
    command = input()
    while command != "end":
        args = command.split(" ")
        command_name = args[0]

        if command_name == "exchange":
            index = int(args[1])
            exchange(index, array)
        elif command_name == "max":
            parity = args[1]
            max(parity, array)
        elif command_name == "min":
            parity = args[1]
            min(parity, array)
        elif command_name == "first":
            count = int(args[1])
            parity = args[2]
            first(count, parity, array)
        elif command_name == "last":
            count = int(args[1])
            parity = args[2]
            last(count, parity, array)

        command = input()

    print(array)

def exchange(index, array):
    if index >= len(array):
        print("Invalid index")
        return

    new_array = array[index+1:] + array[:index+1]
    for i, element in enumerate(new_array):
        array[i] = element

def max(parity, array):
    maximum = -sys.maxsize
    max_index = -1
    for i in range(len(array)-1, -1, -1):
        val = array[i]
        if val > maximum and parity_check(parity, val):
            maximum = val
            max_index = i
    
    if max_index != -1:
        print(max_index)
    else:
        print("No matches")


def min(parity, array):
    minimum = sys.maxsize
    min_index = -1
    for i in range(len(array)-1, -1, -1):
        val = array[i]
        if val < minimum and parity_check(parity, val):
            minimum = val
            min_index = i
    
    if min_index != -1:
        print(min_index)
    else:
        print("No matches")

def first(count, parity, array):
    if count > len(array):
        print("Invalid count")
        return
    
    new_array = [x for x in array if parity_check(parity, x)]

    if count < len(new_array):
        print(new_array[:count])
    else:
        print(new_array)

def last(count, parity, array):
    if count > len(array):
        print("Invalid count")
        return
    
    new_array = [x for x in array if parity_check(parity, x)]

    if count < len(new_array):
        print(new_array[len(array) - count:])
    else:
        print(new_array)

def parity_check(parity, number):
    if parity == 'even':
        return number % 2 == 0
    else:
        return number % 2 != 0

manipulate(array)
Тагове:
0
Programming Fundamentals 05/02/2020 18:30:51
RadostinStoychev avatar RadostinStoychev 116 Точки

Ето едно решение на C# дано ти помогне да си откриеш грешката.
Link

Успех :)

1
05/06/2020 11:49:05
ralicaterzieva avatar ralicaterzieva 1 Точки

Благодаря ти!

Успях да го докарам до 100 процента ;)

1
MelSea avatar MelSea 4 Точки

Примерите в упражнението не са ли грешни? Срещу exchange 1 - няма нищо в Output?.. Не знам, но всички zero - тестове според мен са грешни. Как успяхте да ги докарате до 100 %?..

 

0
ivailogeimara avatar ivailogeimara 37 Точки

Примерите в упражнението не са ли грешни? Срещу exchange 1 - няма нищо в Output?.. Не знам, но всички zero - тестове според мен са грешни. Как успяхте да ги докарате до 100 %?..

Примерите са си верни. Output-а не е подравнен с Input-a. Примера за който мисля че говориш е:

Input Output

1 3 5 7 9

exchange 1

max odd

min even

first 2 odd

last 2 even

exchange 3

end

2

No matches

[5, 7]

[]

[3, 5, 7, 9, 1]

2 се принтира като отговор на max odd; No matches се принтира като отговор на min even; [5, 7] е отг на first 2 odd; []  е отг на last 2 even; и [3, 5, 7, 9, 1] се принтира след end.

0
11/02/2020 05:48:45
MelSea avatar MelSea 4 Точки

Благодаря за отговора! Аз си открих грешката по-късно - просто функцията exchange не трябва да принтира а само да размести масива и да го върне. А аз го принтирах и се чудех защо ми дава грешки... Успях да получа 100 %!

Благодаря още веднъж!

 

0
11/02/2020 12:21:05