From cfd215f8fd034d2fa275d76ecbb9c05f715f554c Mon Sep 17 00:00:00 2001
From: Nico Maillet <nicolas.maillet@pasteur.fr>
Date: Wed, 13 Sep 2023 12:47:22 +0200
Subject: [PATCH] Typo and soluce

---
 1-Intro/1-CM-Intro.pdf       | Bin 13090830 -> 13090830 bytes
 1-Intro/1-TP-Init_python.pdf | Bin 2213104 -> 2213100 bytes
 1-Intro/tp1.py               | 221 +++++++++++++++++++++++++++++++++++
 3 files changed, 221 insertions(+)
 create mode 100644 1-Intro/tp1.py

diff --git a/1-Intro/1-CM-Intro.pdf b/1-Intro/1-CM-Intro.pdf
index 2a335ebe314e5a25542da164b993f1aaf90ed340..8cb509a6a49b05bbd6fa713c2535bc2c9a175b41 100644
GIT binary patch
delta 565
zcmeBcn9l~n4K0i<OfAeUEG?`pY%T0994(wJTrJ!!JT1H}d@cMf0xg0qLM_5AA}yjV
zVlCn=5-pM~QZ3RgGA*(#axL;L3N4B)N-fGQDlMulYAxz58ZDYFS}ocwIxV^_dM)}b
z1}%myMlHrICM~8dW-aC|7A=-7RxQ>oHZ8U-b}jZT4lRx?PA$$YE-kJtZY}OD9xa|N
zUM=1&J}tg2el7kj0WE<oK`p^8AuXXTVJ+b;5iOA|Q7zFeF)gtzaV_yJ2`z~&NiE4O
zDJ`ijX)Wn387-MDSuNQuIW4&@c`f-Z1ucawMJ>fGB`u{bWi90`6)lx5RV~#mH7&I*
zbuINR4K0l=O)bqWEiJ7rZ7uCB9W9+LT`k=$JuSU0eJ%Yh6Iv#=Olq0jGNol|%e0p1
zEi+nXw#;go-7=?TZp*xu`7H}t7Pc&ES=_RuWogT@mgOxgT2{8KYFXW~re$r*x|a1V
z8(KEDY--uuvZZBf%eI#7EjwCvw(M%z-LhxP-s#Jjrre%BbJ^Z_CN;b5zn1M)WMm0<
z`Zag@!@C=W+l^N2Z8uu6uia?H{&u4k2ilER9BemQaj4yB#o>0N6-U~QRvc|NT5)W<
z(Td}y+#H6+hDIi428Pq~Hy@XV^R`dge7uF-+1b_9&B@u^z}(Qt$jR8$#Msr)$k5op
Z#N5o(z|_#i!cM`4kdp0@yN_>W0RZ8>?M(mx

delta 565
zcmeBcn9l~n4K0i<OfAeUEG?`pY%T0994(wJTrJ!!JT1H}d@cMf0xg0qLM_5AA}yjV
zVlCn=5-pM~QZ3RgGA*(#axL;L3N4B)N-fGQDlMulYAxz58ZDYFS}ocwIxV^_dM)}b
z1}%myMlHrICM~8dW-aC|7A=-7RxQ>oHZ8U-b}jZT4lRx?PA$$YE-kJtZY}OD9xa|N
zUM=1&J}tg2el7kj0WE<oK`p^8AuXXTVJ+b;5iOA|Q7zFeF)gtzaV_yJ2`z~&NiE4O
zDJ`ijX)Wn387-MDSuNQuIW4&@c`f-Z1ucawMJ>fGB`u{bWi90`6)lx5RV~#mH7&I*
zbuINR4K0l=O)bqWEiJ7rZ7uCB9W9+LT`k=$JuSU0eJ%Yh6Iv#=Olq0jGNol|%e0p1
zEi+nXw#;go-7=?TZp*xu`7H}t7Pc&ES=_RuWogT@mgOxgT2{8KYFXW~re$r*x|a1V
z8(KEDY--uuvZZBf%eI#7EjwCvw(M%z-LhxP-s#JjLT*f-xomGd(=q$)zn1M)WMqjj
z`89X?!@C=W+l^N2Z8uu6uia?H{&u4k2ilER9BemQaj4yB#o>0N6-U~QRvc|NT5)W<
z(Td}y+#CibhNcDvrY6(#Hy@XV^R`dge7uF-*~!Jo(7@2p)Y;t3!pO|R#L(5*z{S+k
Z#Ld;&*xAj((N4jJkdp0@yN_>W0RSNO?mPeh

diff --git a/1-Intro/1-TP-Init_python.pdf b/1-Intro/1-TP-Init_python.pdf
index ef69c598b140f40569a14d9d56cf15c33e427369..c4ba2102fb98bd02112289d31fd494e7d97804bd 100644
GIT binary patch
delta 2128
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
S`spKzvK+=-s;aL3Zd?HMq2M$C

delta 2138
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

diff --git a/1-Intro/tp1.py b/1-Intro/tp1.py
new file mode 100644
index 0000000..10c6041
--- /dev/null
+++ b/1-Intro/tp1.py
@@ -0,0 +1,221 @@
+""" TP1 where we learn a bit of Python"""
+
+# First test
+print("Hello World!")
+
+# Variable and if
+my_variable = True
+if my_variable:
+    print("Hello World!")
+
+# Create a list
+my_list = [1, 1, 2, 3, 5, 8, 13, 21]
+print(my_list)
+
+# Add something in a list
+my_list = [1, 1, 2, 3, 5, 8, 13, 21]
+my_list.append(42)
+print(my_list)
+
+# Access to a subpart of a list
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+print(my_list[0:5])
+
+# Get the size of a list
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+size_list = len(my_list)
+print(size_list)
+
+# Access to a subpart of a list
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+size_list = len(my_list)
+print(my_list[5:size_list])
+
+# Access to last elements
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+print(my_list[-1])
+
+# Access to the second last element
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+print(my_list[-2])
+
+# Notion of step: going from index 3 to the end
+# but every 2 values
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+print(my_list[3:len(my_list):2])
+
+# Notion of step: going from index 3 to the end
+# but every 2 values
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+print(my_list[3::2])
+
+# Step in list
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+for i in my_list[3:len(my_list):2]:
+    print(i)
+
+# Reverse the order
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+print(my_list[::-1])
+
+# Reverse the order, with start/end
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+print(my_list[7:2:-1])
+
+# Reverse the order, with start/end and step
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+print(my_list[7:2:-2])
+
+# Concatenate two lists
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+my_other_list = ["Hello", "World", "Pwet"]
+result = my_list + my_other_list
+print(result)
+
+# Strings are lists
+my_char = "Hi all!"
+print(my_char[5:2:-1])
+
+# List are objects
+my_list = [1, 2, 3]
+my_other_list = my_list
+my_other_list.append(5)
+print(my_list)
+
+# Correct way of creating a copy of a list
+my_list = [1, 2, 3]
+my_other_list = list(my_list)
+my_other_list.append(5)
+print(my_list)
+
+
+
+
+
+
+# Simple for
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+for i in my_list:
+    print(i)
+
+# For with step/beg/end
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+for i in my_list[7:2:-1]:
+    print(i)
+
+# While loop
+my_list = [1, 1, 2, 3, 5, 8, 13, 21, 42]
+i = 0
+while i < len(my_list):
+    print(my_list[i])
+    i += 1
+
+
+
+
+
+# Example of dict
+my_dict = {}
+my_dict["keys1"] = 5
+my_dict["keys2"] = 6
+my_dict[42] = "Pwet"
+print(my_dict)
+print(my_dict[42])
+
+# Print keys or values of a dict
+print(my_dict.keys())
+print(my_dict.values())
+
+# Play with values
+for i in my_dict.values():
+    print(i)
+
+
+
+
+
+# Import a module
+import random
+# Define a new function
+def my_function():
+    # Get a random number between 2 and 5
+    my_rand = random.randint(2, 5)
+    # If this number is 4...
+    if my_rand == 4:
+        # Print something
+        print("Random")
+# Execute the function
+my_function()
+
+
+# Argument in functions
+def my_function(arg):
+    # If the string version of arg is not Pwet
+    if str(arg) != "Pwet":
+        # Print it
+        print(arg)
+    else:
+        # Else, print something else
+        print("Zbla")
+# Try the function
+my_function(3)
+my_function("Poulpe")
+my_function("Pwet")
+
+
+# Return a value
+def my_function(arg):
+    # The variable that will be returned
+    ret = "Zbla"
+    # If the string version of arg is not Pwet
+    if str(arg) != "Pwet":
+        # Modify the variable
+        ret = arg
+    # Return it
+    return ret
+# Try the function
+print(my_function(3))
+print(my_function("Poulpe"))
+print(my_function("Pwet"))
+
+
+# Return several values
+def my_function(arg):
+    ret = "Zbla"
+    # If the string version of arg is not Pwet
+    if str(arg) != "Pwet":
+        # Modify the variable
+        ret = arg
+    # Return it and its length
+    return ret, len(str(ret))
+# Try the function
+print(my_function("Pwet"))
+# Access like a list to returned values
+print(my_function("Pwet")[0])
+print(my_function("Pwet")[1])
+
+
+
+
+class MyObject:
+    """ Creating a new simple object """
+    # Initialize the object
+    def __init__(self, arg1, arg2=None): # Arg2 is optional
+        self.arg1 = arg1
+        self.arg2 = arg2
+        # If arg2 does not exist, initialize a list
+        if self.arg2 is None:
+            self.arg2 = []
+
+    # self representation for print
+    def __repr__(self):
+        return f"Arg1 is {self.arg1}\nArg2 has a size of {len(self.arg2)}"
+
+    def a_function(self, a_value):
+        """ Internal function of the object """
+        # Return the concatenation arg1 and a_value
+        return str(self.arg1) + str(a_value)
+
+test = MyObject("Pwet", [0, 1, 3])
+print(test)
+print(test.a_function(10))
-- 
GitLab