diff --git a/learning_python3.md b/learning_python3.md
index 4d008c4..bb08c40 100644
--- a/learning_python3.md
+++ b/learning_python3.md
@@ -1184,6 +1184,18 @@ while counter <= 10:
print("after the loop, counter: {}".format(counter))
```
+
+ Another example
+
+```python3
+FirstValue = 2
+SecondValue = 0
+while FirstValue>SecondValue:
+ print("The second value is bigger")
+ SecondValue = SecondValue + 1
+```
+
+
Two *extra* things might look new to you here.
First the `import time` and `time.sleep(1)`, can you tell me what it does?
@@ -1373,14 +1385,14 @@ if __name__ == "__main__":
There is three types of logical operators. All operators returns boolean.
-| Operator | Result |
-|-----------------|----------------------------------------------|
-| **And** | It send 'True' if all conditions are true |
-| **Or** | It send 'True' if one of conditions are true |
-| **Not** | It reverse the boolean result |
+| Operator | Result |
+|-----------------|---------------------------------------------|
+| **And** | It send `True` if all conditions are true |
+| **Or** | It send `True` if one of conditions are true |
+| **Not** | It reverse the boolean result |
-Let's start example with 'And' operator!
+Let's start example with `And` operator !
```python3
CustomerName = "Jean"
@@ -1394,9 +1406,51 @@ if CustomerAgreement and DealerAgreement :
else:
print(f"Oh no {CustomerName} and {DealerName} are disagreed ;( ")
```
-As you can guess, Jean and Paul are agreeing to the deal. If I had put 'False' in DealerAgreement, the result will be inverse.
+As you can guess, Jean and Paul are agreeing to the deal. If I had put 'False' in DealerAgreement boolean, the result will be inverse.
+Let's show an another example with the `Or` operator.
+````python3
+def Choice_cold_hot(Temperature):
+ if Temperature <= 20 or Temperature >= 40:
+ print("Don't go outside")
+ else:
+ print("Let's go to the beach")
+
+if __name__ == "__main__":
+ Temperature = int(input("What is the temperature"))
+ Choice_cold_hot(Temperature)
+````
+Look at this code, if the temperature is smaller than 20° or bigger than 40°, you must stay home and don't go to the beach. So, if I put 35° for temperature, it will say that you should go to the beach.
+
+Let's make an exercise. You have to take the previous code and use the `And` operator.
+
+
+ Spoiler warning
+
+````python3
+def Choice_cold_hot(Temperature):
+ if Temperature >= 20 and Temperature <= 40:
+ print("Let's go to the beach")
+ else:
+ print("Don't go outside")
+if __name__ == "__main__":
+ Temperature = int(input("What is the temperature"))
+ Choice_cold_hot(Temperature)
+````
+
+
+Now, we have used that operators, we can use the last logical operator. The `Not` operator sends the reverse of the result.
+
+````python3
+if __name__ == "__main__":
+ Gas = input("Do you want some gas")
+ if not Gas.startswith("y"):
+ print("Ok, no problem")
+ else:
+ print("That will be expensive")
+````
+In this example, if you tap yes, the result will be reversed.
# Lists
The different built-in objects we've seen until now, such as `str` and `int` are simple [text](https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str) and [numeric](https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex) types.
@@ -1537,6 +1591,16 @@ print("{} closes the door behind him...".format(friend.capitalize()))
**TODO pizza function with multiple arguments**
+
+Simpler example
+
+````python3
+for i in range(5):
+ print(i)
+````
+
+
+
# Coding challenge - Cheerleader chant
Can you make me a program that outputs this type of cheerleader chant?
@@ -2630,101 +2694,118 @@ TODO add a countdown timer to the multiple choice game
TODO event loop introduction
-## wxpython helloworld
+## Tkinter helloworld
-The absolute most basic way to have a *hello world* GUI program up and running with wxpython is the following.
+The absolute most basic way to have a *hello world* GUI program up and running with Tkinter is the following.
```python
-import wx
+from tkinter import *
-app = wx.App()
+root = Tk()
-frame = wx.Frame(None, title="hello world")
+MyLabel = Label(root,text="hello world")
+MyLabel.pack()
-frame.Show()
-
-app.MainLoop()
+root.mainloop()
```
+Tkinter have two popular architectures, the Tcl and Tk. This two architectures are different, they have their own functionality and their own official documentation.
+We are gonna use the Tk architecture.
+
+The Tk architecture is used to create a GUI widget. He adds a lot of custom commands, so the widget is very customizable.
+
+In the previous code,the `mainloop()` instruction allows us to open the main window and to not close immediately the window.
+And then, the `Label()` method creates label in a layout. This method has many parameters to customize a label. The instruction `pack()` will be always call , this instruction can
+add and adjust a widget.
While it works we know better by now.
We should include the `if __name__ == "__main__"` statement.
```python
-import wx
-
-
+from tkinter import *
if __name__ == "__main__":
- app = wx.App()
- frame = wx.Frame(None, title="hello world")
- frame.Show()
- app.MainLoop()
+ root = Tk()
+
+ MyLabel = Label(root,text="hello world")
+ MyLabel.pack()
+
+ root.mainloop()
```
-The instance of `wx.App` is what will actually process our event loop and the `wx.Frame` is the content of our window.
+The instance of `Tk()` is what will actually process our event loop and the `root` is the content of our window. We can customize `root` with instruction like geometry, title,etc.
In the latter we will create our button and labels so should create our own class and inherit from it.
```python
-import wx
+from tkinter import *
-
-class MainWindow(wx.Frame):
+class MainWindow(Frame):
def __init__(self):
- wx.Frame.__init__(self, None, title="hello world")
- self.Show()
-
+ Frame.__init__(self,master=None)
+ Label.__init__(self, text="hello world")
+ self.pack()
if __name__ == "__main__":
- app = wx.App()
+ root = Tk()
+ root.title("title of the window")
+ root.geometry("500x300")
win = MainWindow()
- app.MainLoop()
+ root.mainloop()
```
We can add content to the *frame*, such as labels, input boxes and buttons as follows.
-Note the first argument to the `wx.StaticText` creation.
-This is *where* we put the label *into*.
-It kind of works but we'll encounter a **problem** when we pack more visual **objects** into the same frame.
+
```python
-import wx
+from tkinter import *
-
-class MainWindow(wx.Frame):
+class MainWindow(Frame):
def __init__(self):
- wx.Frame.__init__(self, None, title="hello world")
- self.label = wx.StaticText(self, label="this is a label")
- self.Show()
+ Frame.__init__(self,master=None)
+ Label.__init__(self, text="hello world")
+ #Label
+ MyLabel = Label(self, text="This is a label")
+ MyLabel.pack()
+ self.config(bg="yellow")
+ self.pack()
if __name__ == "__main__":
- app = wx.App()
+ root = Tk()
+ root.title("title of the window")
+ root.geometry("500x300")
win = MainWindow()
- app.MainLoop()
+ root.mainloop()
```
Let's try to put multiple visual object into the same frame.
-```python
-import wx
+```python3
+from tkinter import *
-
-class MainWindow(wx.Frame):
+class MainWindow(Frame):
def __init__(self):
- wx.Frame.__init__(self, None, title="hello world")
- self.label = wx.StaticText(self, label="this is a label")
- self.input = wx.TextCtrl(self)
- self.button = wx.Button(self)
- self.Show()
-
+ Frame.__init__(self,master=None)
+ Label.__init__(self, text="hello world")
+ #Label
+ MyLabel = Label(self, text="This is a label")
+ MyLabel.pack()
+ #Button
+ MyButton = Button(self, text="I'm clickable!")
+ MyButton.pack()
+
+ self.config(bg="yellow")
+ self.pack()
if __name__ == "__main__":
- app = wx.App()
+ root = Tk()
+ root.title("title of the window")
+ root.geometry("500x300")
win = MainWindow()
- app.MainLoop()
+ root.mainloop()
```
You see how they are *stacked* one on top of the other?
-We can overcome this problem with [sizers](https://wxpython.org/Phoenix/docs/html/sizers_overview.html).
-There are multiple ones we can use but let's dive into a first one called a **box sizer**.
+We can overcome this problem with parameters of [pack()](https://wxpython.org/Phoenix/docs/html/sizers_overview.html).
+We can also use other geometry managers like [grid()](https://www.pythontutorial.net/tkinter/tkinter-grid/) and [place()](https://www.pythontutorial.net/tkinter/tkinter-place/).
```python
import wx