Prosze o ocenę mojego kodu

0

Cześć, znalazlem na necie takie zadania z rozmowy o prace dla programisty Js, ja programuje w Pythonie i chcialem sie z nimi zmierzyc, co prawda działa, ale zastanawiam się czy można to zrobić lepiej.

Treść 1 zad.:
Napisz funkcję findMissing, która jako argument przyjmuje tablicę N liczb całkowitych z zakresu od 0 do N. W tablicy wszystkie elementy są unikalne. Liczb z zakresu <0, N>, jest N + 1. Tablica ma długość N. W tablicy brakuje jednego elementu z zakresu. Funkcja findMissing powinna zwrócić brakujący element:

Mój kod:

tablica = [0,2,4,1,5]

def findMissing(n):
    l = len(n) +1
    for i in range(l):
        if i not in n:
            return(i)

print(findMissing(tablica))

Treść zad.2:
Napisz program, który zwróci wynik otrzymany na podstawie zestawu instrukcji. Instrukcje składają się ze słowa kluczowego i liczby oddzielonych spacją. Instrukcje oddzielone są znakiem nowej linii. Zestaw instrukcji pobierany jest z pliku, a wynik obliczeń powinien być wypisany na ekranie. Plik może zawierać dowolną liczbę instrukcji. Instrukcje mogą być dowolną operacją przyjmującą dwa argumenty (np. add, subtract, multiply, divide itp.). Instrukcje powinny być interpretowane w kolejności wprowadzenia (kolejność operacji w matematyce powinna być ignorowana). Ostatnią instrukcją powinna być apply i liczba. Na przykład apply 3. Ta liczba powinna być użyta w trakcie tworzenia instancji kalkulatora. Następnie kalkulator powinien wykonać po kolei wszystkie wcześniej podane operacje.

Dodatkowo przykłady działania programu:

wejście:
add 2
multiply 3
apply 10
wyjście: 36
wyjaśnienie: ((10 + 2) * 3) = 36

wejście:
multiply 3
add 2
apply 10
wyjście: 32
wyjaśnienie: ((10 * 3) + 2) = 32

wejście:
apply 1
wyjście: 1

Mój kod:

ad=0
mu=0
dod = False
mul = False

def add(a):
    global ad
    ad = ad + a
    if mu == 0:
        global dod
        dod = True
def multiply(m):
    global mu
    mu = mu + m
    if ad == 0:
        global mul
        mul = True
def apply(ap):
    if ad == 0 and mu == 0:
        print(ap)
    elif ad == 0 and mu != 0:
        print(ap * mu)
    elif ad != 0 and mu == 0:
        print(ap + ad)
    elif ad != 0 and mu != 0:
        if dod == True:
            print((ap + ad) * mu)
        elif mul == True:
            print((ap * mu) + ad)

multiply(2)
add(5)
apply(10)
1

Można lepiej. Zastanowiłeś się, jaka jest złożoność Twoich algorytmów? Pierwszy można zrobić liniowo, a „psując” tablice nawet bez dodatkowej pamięci.

Zadanie drugie - używasz zmiennych globalnych, co dla większości rekruterów będzie dyskwalifikujące. Poza tym nie jestem przekonany, że odpowiednio dobrze znasz Pythona - niepotrzebne „== True” w ifach. Poczytaj też o takiej strukturze danych „stos”.

1

w pierwszym użyłeś najprostszego podejścia o najwyższej złożoności, wydaje mi się że rozwiązywanie zadań z javascript w pythonie mija się z celem - rozwiązania mogą być całkiem różne

w drugim zadaniu na przykład w ogóle nie trzeba używać stosu, można to zrobić zupełnie funkcyjnie:

const ops = {
 add: (x, f) => (y) => f(y) + x,
 multiply: (x, f) => (y) => f(y) * x,
 apply: (x, f) => () => f(x)
};

['add 2', 'multiply 3', 'apply 10']
  .reduce(
	(x, y) => {
		var [op, i] = y.split(' ');
		return ops[op](+i, x)
	}, x => x)() // 36
0

Ad.1 Nie było jeszcze:

tablica = [0,2,4,1,5]

def findMissing(n):
    return (set(range(len(n) + 1)) - set(n)).pop()
1

Pierwsze zadanie możesz rozwiązać prostym sumowaniem, jak Ci już wspomnieli

table = [0,4,3,1,5]

element_sum = 0
index_sum = 0

for index, item in enumerate(table, 1):
    element_sum += item
    index_sum += index

print(index_sum - element_sum)

Edit: nawet nie potrzebujesz 2 zmiennych

table = [4,3,2,1,0]

temp = 0

for index, item in enumerate(table, 1):
    temp += index - item

print(temp)

1 użytkowników online, w tym zalogowanych: 0, gości: 1