Изпит по Python

Задача 1

Даден е списък, който съдържа цели числа или други вложени списъци, които могат да съдържат още списъци и цели числа, които след това също могат да съдържат списъци и цели числа и т.н. Трябва да поставите всички цели стойности в един списък от едно ниво (без да има вложени списъци). Редът на числата трябва да бъде такъв, какъвто е бил в оригиналния списък със стриктно представяне отляво надясно.

Вход: Вложен списък с цели числа

Изход: Едномерен списък с цели числа

# тук дефинирайте функцията която ще изпълни поставената задача
# при правилно конструерина функция изпълнението на Python модула няма да върне грешка при нито един от тестовете


if __name__ == '__main__':
    assert list_one_d([1, 2, 3]) == [1, 2, 3], "First test"
    assert list_one_d([1, [2, 2, 2], 4]) == [1, 2, 2, 2, 4], "Second test"
    assert list_one_d([[[2]], [4, [5, 6, [6], 6, 6, 6], 7]]) == [2, 4, 5, 6, 6, 6, 6, 6, 7], "Third test"
    assert list_one_d([-1, [1, [-2], 1], -1]) == [-1, 1, -2, 1, -1], "Fourth test"
    print('Success')

Задача 2

Нека създадем логиката на проста игра на битки.
Да започнем с обикновена задача – двубой един срещу един. Трябва да създадете класа soldier с две основни характеристики – здраве (равно на 50 точки) и атака (равна на 5 точки), и 1 функция – is_alive, което е вярно, ако здравето на войника е > 0, или лъжа в противен случай. Освен това трябва да създадете втория тип captain, който трябва да бъде подклас на soldier, но да има увеличена атака = 7. Трябва да се създаде и функция за битка, която ще започне двубоя между две единици и да определи победителя от тях. Двубоят протича по следния принцип:
При всеки двубой първият воин ще удари втория и така втори ще загуби от здравето със същата стойност колкото е атаката на първия воин. След това, ако той е все още жив, вторият воин ще направи същото с първия. И така докато битката завърши със смъртта на един от тях. Ако първият воин е все още жив (респективно другият вече не е), функцията трябва да върне True, в противен случай – False.
Вход: Вложен списък с цели числа

# поставете Вашият код тук так че да изпълни поставената задача
# при правилно конструеран код изпълнението на Python модула няма да върне грешка при нито един от тестовете

if __name__ == '__main__':

    ivan = soldier()
    rumen = soldier()
    ivo = captain()
    angel = soldier()
    stamat = soldier()

    assert fight(ivan, rumen) == True
    assert fight(angel, ivo) == False
    assert ivan.is_alive() == True
    assert rumen.is_alive() == False
    assert ivo.is_alive() == True
    assert angel.is_alive() == False
    assert fight(ivo, stamat) == False
    assert ivo.is_alive() == False