Exercice 1:
x: int = 10
fibo: list[int] = []
fibo.extend([0, 1])
for i in range(2, x):
    fibo.append(fibo[i - 1] + fibo[i - 2])

print(fibo)
for f in fibo:
    print(f)

for i, f in enumerate(fibo):
    print(f"F({i}) = {f}")

Exercice 2:
from random import randint


def has_duplicates1(l: list[int]) -> bool:
    for i, v in enumerate(l):
        for j, w in enumerate(l):
            if i != j and v == w:
                return True
    return False


def has_duplicates2(l: list[int]) -> bool:
    length = len(l)
    for i in range(length):
        for j in range(i + 1, length):
            if l[i] == l[j]:
                return True
    return False


has_duplicates = has_duplicates1  # change to has_duplicates2 to test other method

print(has_duplicates([]))  # False
print(has_duplicates([9, 3, 2, 5, 1]))  # False
print(has_duplicates([1, 1]))  # True
print(has_duplicates([1, 2, 2, 3, 1, 5, 1]))  # True


def find_duplicates(l: list[int]) -> list[int]:
    dupes: list[int] = []
    length = len(l)
    for i in range(length):
        for j in range(i + 1, length):
            if l[i] == l[j] and l[i] not in dupes:
                dupes.append(l[i])
    return dupes


print(find_duplicates([]))  # []
print(find_duplicates([1, 2, 3, 5, 9]))  # []
print(find_duplicates([1, 1]))  # [1]
print(find_duplicates([1, 2, 2, 3, 1, 5, 1]))  # [1, 2]


def has_duplicates_alt(l: list[int]) -> bool:
    return len(find_duplicates(l)) > 0

Exercice 3:
from random import randint


ints: list[int] = []
for _ in range(20):
    ints.append(randint(1, 50))
print(ints)


def find_min_index(l: list[int], start_index: int = 0) -> int:
    min_index = start_index
    for i in range(min_index + 1, len(l)):
        if l[i] < l[min_index]:
            min_index = i
    return min_index


print(find_min_index([3, 1, 4, 1, 18]))  # 1
print(find_min_index([3, 1, 4, 1, 18], 0))  # 1, équivalent
print(find_min_index([3, 1, 4, 1, 18], start_index=2))  # 3
print(find_min_index([3, 1, 4, 1, 18], start_index=4))  # 4


def sort(l: list[int]) -> None:
    for i in range(0, len(l) - 1):
        j = find_min_index(l, i)
        l[i], l[j] = l[j], l[i]


sort(ints)
print(ints)

Exercice 4:
# Variante 1
def binary_to_decimal(binstr: str) -> int:
    acc = 0
    for i, bit in enumerate(reversed(binstr)):
        acc += int(bit) * 2**i
    return acc


# Variante 2
def binary_to_decimal_alt(binstr: str) -> int:
    acc = 0
    mult = 1
    for bit in reversed(binstr):
        acc += int(bit) * mult
        mult *= 2
    return acc

# Pas mal d'autres variantes possibles!

# Tests
for test_case in "101010", "10010110", "11110111110", "1000000000000000000000000000000":
    print(binary_to_decimal(test_case))
    print(binary_to_decimal_alt(test_case))
    print(int(test_case, 2))  # version native de Python
    print()
Last modified: Friday, 15 March 2024, 15:46