From 9b8826af7fe0263f82261b6d3c7c20d5570c88bf Mon Sep 17 00:00:00 2001 From: BuffTechTalk Date: Mon, 9 Sep 2024 20:45:26 -0500 Subject: [PATCH] complete PythonX Lesson1 --- images/lesson1-bottle.png | Bin 0 -> 35991 bytes webpages/__pycache__/__init__.cpython-312.pyc | Bin 683 -> 688 bytes .../__pycache__/classroom.cpython-312.pyc | Bin 577 -> 582 bytes .../__pycache__/code_editor.cpython-312.pyc | Bin 1865 -> 1861 bytes webpages/__pycache__/event.cpython-312.pyc | Bin 353 -> 358 bytes webpages/__pycache__/home.cpython-312.pyc | Bin 360 -> 365 bytes webpages/__pycache__/join_us.cpython-312.pyc | Bin 404 -> 409 bytes .../__pycache__/navigation.cpython-312.pyc | Bin 2177 -> 2182 bytes webpages/__pycache__/project.cpython-312.pyc | Bin 869 -> 874 bytes .../__pycache__/reference.cpython-312.pyc | Bin 1042 -> 1047 bytes webpages/__pycache__/testing.cpython-312.pyc | Bin 486 -> 491 bytes webpages/code_editor.py | 2 +- webpages/input_code.py | 38 +- .../pythonx_homepage.cpython-312.pyc | Bin 2793 -> 2802 bytes .../pythonx_lesson1.cpython-312.pyc | Bin 1901 -> 22670 bytes .../pythonx_lesson2.cpython-312.pyc | Bin 467 -> 472 bytes .../pythonx_lesson3.cpython-312.pyc | Bin 467 -> 472 bytes .../pythonx_lessons_pages/pythonx_homepage.py | 4 +- .../pythonx_lessons_pages/pythonx_lesson1.py | 524 +++++++++++++++++- 19 files changed, 553 insertions(+), 15 deletions(-) create mode 100644 images/lesson1-bottle.png diff --git a/images/lesson1-bottle.png b/images/lesson1-bottle.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d3a8d49caf291a149b1fadf7ffdbabe5a9ed6c GIT binary patch literal 35991 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 N002ovPDHLkV1msMKym;8 literal 0 HcmV?d00001 diff --git a/webpages/__pycache__/__init__.cpython-312.pyc b/webpages/__pycache__/__init__.cpython-312.pyc index e3b9e58a5f46ba3673c7f0e9f6c9cbd6d4951578..3501d714d07883cefe07bdac8dce9dbaa66d29e6 100644 GIT binary patch delta 76 zcmZ3@x`CDVG%qg~0}yzp-cNhHkynMu(AwE5CbT%Us5qu7BQY;M#wE2lyClCL#;G(d eEhII&I6O6}II|=*raU#NATd3)IA(GzlOF)Os2Z*S delta 71 zcmdnMx|)^uG%qg~0}vEz-%q=_kynLD$4o!8IJKx)KRF{cFTE-wF)v-;CAB!aB)>pE Zpt2+*KQBVRJT<8xF+H_de{vF&9{?s=7xVxC diff --git a/webpages/__pycache__/classroom.cpython-312.pyc b/webpages/__pycache__/classroom.cpython-312.pyc index 528265ae18425649c7790aedf7d2998be37e9025..04efaeff0a9dc754e4f9d715dffc5f0f0a1fa8d0 100644 GIT binary patch delta 76 zcmX@ea*T!dG%qg~0}yzp-cMVxkvEpn(8k#+CbT%Us5qu7BQY;M#wE2lyClCL#;G(d eEhII&I6O6}II|=*raU#NATd3)IA-!R#?=7E+Z$^D delta 71 zcmX@ca*&1hG%qg~0}vEz-%ne(kvEo6$6PpE Zpt2+*KQBVRJT<8xF+H_dfAVa`)c`VQ7_k=KGzpDBeSohgM42)Wj9uVw*BGBDJ#)v#spLDn& zMa3~y8Hsu6F)pda*(Lb}F;1mvX(6fE#o?(*#hE3kG3BXA1&QgY#W9mDS!Eb?CWovLyp8!9qxj@r zmU2%^{m|mnqGJ8zjMTjJs*J?EbbXi9;_Q{36}SL9Es6Y8Nz|F331fzQX#4QGfD9HZe9ypbLv+C%IHoEiF)uyFCAB!aB)=fWsWdGu cBsIG@JT<8}vm`a9JT<8xF+H_7X5xcJ0IC8TivR!s delta 69 zcmaFH^pJ`7G%qg~0}vEz-%oR$$h%y}SUIU_YMy(%LyFJ0dywK%&Zzd%2r XvLquvFG9aOHK`ymJ+)YW;?qU|7`GVK diff --git a/webpages/__pycache__/home.cpython-312.pyc b/webpages/__pycache__/home.cpython-312.pyc index 2500aae2ee7bb1d24645a898a547b842bbb36845..8d6260f531aa6b0971476793dddc0462bd8a1f58 100644 GIT binary patch delta 74 zcmaFC^p=VDG%qg~0}yzp-cR$J$h*PN+}SE7v^ce>IHoEiF)uyFCAB!aB)=fWsWdGu cBsIG@JT<8}vm`a9JT<8xF+H_7X5!0w0I;STtN;K2 delta 69 zcmaFM^n!`^G%qg~0}!<6-%sIU_YMy(%LyFJ0dywK%&Zzd%2r XvLquvFG9aOHK`ymJ+)YW;=6hPBh?uW diff --git a/webpages/__pycache__/join_us.cpython-312.pyc b/webpages/__pycache__/join_us.cpython-312.pyc index bb200603f9afc49f96c2101e617a46f8eb43d10e..ae8386af40b9af05f5e38262b2fe649345c5f1c8 100644 GIT binary patch delta 75 zcmbQjJd>ICG%qg~0}yzp-cKu=$a~e$%GoL=v^ce>IHoEiF)uyFCAB!aB)=fWsWdGu dBsIG@JT<8}vm`a9JT<8xF+H_7W-=dR8vv^J8ifD= delta 70 zcmbQqJcXI}G%qg~0}vEz-%l%^$a_`CR6n#hwWwG>IU_YMy(%LyFJ0dywK%&Zzd%2r YvLquvFG9aOHK`ymJ+)YWvM^&C02qxI(f|Me diff --git a/webpages/__pycache__/navigation.cpython-312.pyc b/webpages/__pycache__/navigation.cpython-312.pyc index 581f075c0b3435468b40d8827af1e0124b97bd7f..eb086871b255fc24f1d39bfa4f69b6864f170091 100644 GIT binary patch delta 77 zcmZn^Y!l=?&CAQh00iEt_tTs=^4hW)+B#dsgche36~|O%B<7{ZxTF?mm*f}3IF+WQ fg`{Q|ho>eLXO^VKl&2;YB&Mep$80WR<7NT?rB@m4 delta 72 zcmZn@Y!u`@&CAQh00hO__tRuI^4hZLSm=iqrxq3KCugMQrB`Jn=B4Yqq!wqFpE Zpt2+*KQBVRJT<8xF+H_dfAV6c;{aCC8EgOm diff --git a/webpages/__pycache__/reference.cpython-312.pyc b/webpages/__pycache__/reference.cpython-312.pyc index f0cbdecd50e2be51cd8429538c7cd6d03c81716d..9d7b7d78b1305fa8129fc21032fae43965fd05e6 100644 GIT binary patch delta 76 zcmbQlF`a|=G%qg~0}yzp-cP%_k=LHt(8k#+CbT%Us5qu7BQY;M#wE2lyClCL#;G(d eEhII&I6O6}II|=*raU#NATd3)IA(GM^DF?dcN+Ns delta 71 zcmbQvF^PlsG%qg~0}vEz-%mTSk=LGC$6PpE Zpt2+*KQBVRJT<8xF+H_de{wDJEC3xC7(4&~ diff --git a/webpages/__pycache__/testing.cpython-312.pyc b/webpages/__pycache__/testing.cpython-312.pyc index 58422648d052f2db858fc0eb5c728bcfa50e0776..e860758b942c7648f27175a2698a31fd754962a3 100644 GIT binary patch delta 75 zcmaFH{F<5fG%qg~0}u#S-A_}S$otdK%GoL=v^ce>IHoEiF)uyFCAB!aB)=fWsWdGu dBsIG@JT<8}vm`a9JT<8xF+H_7X0j3E768YJ8!7+* delta 70 zcmaFO{EV6RG%qg~0}vEz-%pd8$oo^rR6n#hwWwG>IU_YMy(%LyFJ0dywK%&Zzd%2r YvLquvFG9aOHK`ymJ+)YWvN_`x06F#;lK=n! diff --git a/webpages/code_editor.py b/webpages/code_editor.py index b0123cccb..f8ec6663e 100644 --- a/webpages/code_editor.py +++ b/webpages/code_editor.py @@ -33,7 +33,7 @@ def code_editor(height="300px", sample_code = "", editor_label = "",min_lines = try: result = subprocess.run( - ["python3", "./webpages/input_code.py"], # use Python3 command to execute file + ["python", "./webpages/input_code.py"], # use python or python3 command to execute file capture_output=True, # Capture both stdout and stderr text=True, # Ensure the output is returned as a string timeout=10 # Timeout after 10 seconds diff --git a/webpages/input_code.py b/webpages/input_code.py index 748bfb87f..01b5d9e94 100644 --- a/webpages/input_code.py +++ b/webpages/input_code.py @@ -1,6 +1,32 @@ -print("hello") - -i = 100 -while(i>10): - print(f"Value of {i}") - i = i-1 \ No newline at end of file +# sample function without input arguments and return values +def print_hello(): + print('Hello WT!') + +# type function name to call the function directly. +print_hello() +print_hello() +print_hello() +# sample function with input arguments and return value +def tree_sum(a,b,c): + result = a+b+c + return result + +# call function with given values and use another variable to hold return values +sum1 = tree_sum(1,2,3) +sum2 = tree_sum(4,5,6) + +print('sum1: ', sum1) +print('sum2: ', sum2) + +# sample function with multiple return values +def sum_len(num_list): + total = 0 + for num in num_list: + total = total+num + return total, len(num_list) + +num_list = [0,1,2,3,4,5,6,7,8,9] +# t is a variable used to hold returned total +# l is a variable used to hold returned length: len(num_list) +t,l = sum_len(num_list) +print(f'The length of list is: {l}; the sum of list is: {t}') \ No newline at end of file diff --git a/webpages/pythonx_lessons_pages/__pycache__/pythonx_homepage.cpython-312.pyc b/webpages/pythonx_lessons_pages/__pycache__/pythonx_homepage.cpython-312.pyc index 373480f9391344856fc6edb58ebf15e2c3d321cb..0f57484a2947a9eca05901dd975e491428f67b99 100644 GIT binary patch delta 321 zcmaDU`bm`cG%qg~0}!ND-%pF2$h(P=ZQ_AoMz+Z!jE;;_nG9%l?P`ndN{Cch(G+ z1m;^z#U-~`GjkKuQ*UwPCKhF<I(Mq*yNzDsIx zc1eDLen4eOMt)v|etBwA0Z?zTegRmZB0eXzxHvzrI36N8S%yn37UUvkkfZ#7L<7SU z7PfYeMvn`;T31-KK^*T!?+XHYS6K9+oDWQloc`=zn3-AGzVI-xvO^RYTwyVUE8ybf z`O3`0%2vcNc|MnzEy#uFAkgB{FKt1RJ$S`AeRw{i+O>>2WCb_#@h^H MpIM|Bf!cv00PhA{_5c6? diff --git a/webpages/pythonx_lessons_pages/__pycache__/pythonx_lesson1.cpython-312.pyc b/webpages/pythonx_lessons_pages/__pycache__/pythonx_lesson1.cpython-312.pyc index d0a9fa36e6ce4967fa6b62ba8ddefe180c8db5d8..e92d7662485bd70857d0b0bab101e5847a4a84f4 100644 GIT binary patch literal 22670 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%0AZjn9YmSd!IW<77- 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 delta 429 zcmeC%$oQ6z?=&wj7XuI!Yu`^(Wu3^E&J@8ou{?R=29b&H#3mnL5t%H(=m6wR&S4ar zoWU$2&c2!vq@IC+k)ebe!eU^^;+eQnSePS)a}C#OCWs&-LnVVI_hfk<6=oS_h0QKJ zf0&qclocjB^3ReIEhx&&E74H$NX^N~R|u#q$;i)((7eTJXgWDbK%ZBW{T5Sk$t~8B z%#xhc$s2IU_YMy(%LyFJ0dywK%&Zzd#>qihg-&QbA&R zYO(%g!C+BF{mJUVDw={oy=*{STmvK;81AsJwR<#rT;SEe!ea0Q$nkFUz967?g++gI zNw8Wym}hr|#U7*%$oas)An3yMg@J+9l?f!|-spaTNBs(m#uqjQR`zzkM!y;A7xbO4 zvA7iR1I^cDyTw^tQk0sQo0C~m!~qn!#Q}3v5i^im#0w%oZYtsf5g<)P0zl#yhfQvN W3R`JTs$CHIU_YMy(%LyFJ0dywK%&Zzd%2r nvLquvFG9aOHK`ymJ+)ZB04z`upOac#oS#=54-uWL%eWc<-}xc_ diff --git a/webpages/pythonx_lessons_pages/__pycache__/pythonx_lesson3.cpython-312.pyc b/webpages/pythonx_lessons_pages/__pycache__/pythonx_lesson3.cpython-312.pyc index 4f96c17f410834c47175b925d76db8fd874e947c..aa70a6dcaaeecb5603e04e427fa4fbc1682ab686 100644 GIT binary patch delta 97 zcmcc2e1nIU_YMy(%LyFJ0dywK%&Zzd%2r nvLquvFG9aOHK`ymJ+)ZB04z`upOac#oS#=54-uWL%eWc<;6x$+ diff --git a/webpages/pythonx_lessons_pages/pythonx_homepage.py b/webpages/pythonx_lessons_pages/pythonx_homepage.py index 4e02e18f6..563338d87 100644 --- a/webpages/pythonx_lessons_pages/pythonx_homepage.py +++ b/webpages/pythonx_lessons_pages/pythonx_homepage.py @@ -4,7 +4,7 @@ def pythonx_homepage(): # load pythonx logo st.image("./images/PythonXPicture.png") - st.markdown("# :question: What is PythonX") + st.header(":question: What is PythonX") st.markdown( """:blush: Computer programming is the art of designing and creating instructions for computers to follow and execute in the form of software programs. It involves using programming languages, algorithms, and data structures to solve problems and accomplish tasks. With the advancement of technology, programming has expanded beyond traditional computer platforms to include smartphones, smartwatches, and even automobiles. It has also become a powerful tool in other fields such as chemistry, biology, finance, and more. @@ -12,7 +12,7 @@ def pythonx_homepage(): ) - st.markdown("# :question: Why Choose Python") + st.header(":question: Why Choose Python") st.markdown( """ diff --git a/webpages/pythonx_lessons_pages/pythonx_lesson1.py b/webpages/pythonx_lessons_pages/pythonx_lesson1.py index eea16f29a..485ac3e6f 100644 --- a/webpages/pythonx_lessons_pages/pythonx_lesson1.py +++ b/webpages/pythonx_lessons_pages/pythonx_lesson1.py @@ -5,8 +5,8 @@ from webpages import code_editor as ce def pythonx_lesson1(): st.title("Lesson 1: Introduction to Python") - - st.markdown("# :one: From Idea to Program") + # Lesson1-Part1: what is programming + st.header(":one: From Idea to Program") st.markdown( """ @@ -20,11 +20,523 @@ def pythonx_lesson1(): """) st.image("./images/CodingProcess.png") - - st.markdown("# :two: First Python Program: Hello PythonX!") + # Lesson1-Part2: print out the words + st.header(":two: First Python Program: Hello PythonX!") st.markdown("""Now, let's try our first program, which print out "Hello PythonX" on our computer screen with following code:""") - st.code("""print("Hello PythonX)""") + st.code(""" + # Example 1: put following code in the editor and click APPLY to run + print("Hello PythonX") + """, line_numbers=True + ) # try sample code of hello pythonX - ce.code_editor(height="150px",editor_label="lesson1-helloworld") + ce.code_editor(height="100px",editor_label="lesson1-helloworld") + st.markdown(""" + + In the above code: + + ```python + # Example 1: put following code in the editor and click APPLY to run + ``` + - A sequence of words starting with the `#` symbol are comments in Python. + > Comments are used to provide explanations or notes about the code. They are ignored by Python and do not affect the execution of the program. Comments help make the code more readable and understandable for other programmers or for future reference. + + ```python + print("Hello PythonX!") + ``` + - `print(input_value)` is the function used to display text or other data on the screen. Here, `"Hello PythonX!"` is the input value. + > A function is a block of organized, reusable code that performs a specific task. Functions help to structure code, making it more readable, maintainable, and reusable. We can place a comment above or after a line of code. + + Let's see more examples: + """) + st.code(""" + # Example 2: use print()function to print different kinds of values + print(1234) # This line prints the integer 1234 + print("abcdef") # This line prints the string 'abcdef' + print(3.141592653) # This line prints the floating-point number 3.141592653, an approximation of Pi + """, + line_numbers=True) + ce.code_editor(height="100px",editor_label="lesson1-print") + + st.markdown(""" + + - In Example 2, the `print()` function is used three times to output different values on three rows. When a program contains multiple lines of code. + - The execution order is from the top to the bottom, processing each line sequentially. + """) + + # Lesson1-Part3: mathematical operations + st.header(":three: Do Math in Python") + st.write("Mathematical operations in Python are similar to those learned in math class.") + st.code(""" + # Example 3: Demonstrating basic arithmetic operations + a = 10 # Assigns integer 10 to variable 'a' + b = 3 # Assigns integer 3 to variable 'b' + c = 2.5 # Assigns floating-point number 2.5 to variable 'c' + + print('Addition: ', a + b) # Prints the sum of 'a' and 'b' + print('Subtraction: ', a - b) # Prints the result of subtracting 'b' from 'a' + print('Multiplication: ', a * b) # Prints the product of 'a' and 'b' + print('Multiplication: ', a * c) # Prints the product of 'a' and 'c', demonstrating integer-float multiplication + print('Division: ', a / b) # Prints the division of 'a' by 'b', result is a float + print('Floor Division: ', a // b) # Prints the floor division of 'a' by 'b', removing digits after the decimal point + print('Modulus: ', a % b) # Prints the remainder of 'a' divided by 'b' + """, line_numbers=True) + ce.code_editor(height="250px",editor_label="lesson1-variables") + st.markdown(""" + Example 3 teaches us how to do math in Python. First, we set up three variables, a, b, and c, like this: + + ```python + a = 10 + b = 3 + c = 2.5 + ``` + + These lines set up "containers" or **variables** that hold our numbers. + + > Think of a variable like a labeled box where you can store stuff. In programming, instead of physical things, we store data values. + + > Just like we use a bottle to hold water or a shoebox for your shoes, variables help us keep our data organized and easy to use. + + > In our Python program, a, b, and c are our boxes, holding the numbers 10, 3, and 2.5, making it easier for us to work with them in our math calculations. + """) + + st.image("./images/lesson1-bottle.png") + + # Lesson1-Part4: value comparison + st.header(":four: Comparisons in Python") + st.write("We make comparisons everyday and use correct/wrong to check a comparison. E.g.: 10 is greater than 8, which is correct. How to represent this comparison in Python?") + st.markdown(""" + In Python, we can use following symbols to make comparisons: + + | Symbol | Meaning | + |--------|-----------------------| + | > | Greater Than | + | < | Less Than | + | >= | Greater Than or Equal | + | <= | Less Than or Equal | + | == | Equal | + | != | Not Equal | + + We can compare two values directly, or compare the values of two variables. + """) + + st.code(""" + number1 = 10 + number2 = 20 + print(10>20) + print(number1>=number2) + print(number1 == number2) + print('Alice' != 'Bob') + + """, line_numbers=True) + ce.code_editor(height="150px",editor_label="lesson1-comparevalue") + st.write(""" + The ```True``` and ```False``` are ```bool``` (boolean) data type in Python. They represent **Correct** and **Wrong**, respectively. We can also create boolean variables like this: + ```python + is_adult = True + is_student = False + ``` + + With the help of boolean values, we can make decisions in Python and ask Python program to do repetitive tasks. + """) + + # Lesson1-Part5: decision making + st.header(":five: Conditionals: Makes Decisions in Python") + st.markdown(""" + Now we can make a Comparison with comparison operators in Python. Next, we will learn how to make decisions based on a comparison result. + + Python has several structures to make decisions, including if, if-else, elif statements. + """) + st.markdown(""" + ### ```if``` Statement + ```if``` statement make a decision with one choice. The condition is a boolean value (True/False) which can be a comparison result. + + If the condition is ```True```, the *if-code block* will be excuted. If the condition is ```False```, the *if-code blcok* will be skipped, and run the code below if statemnt. + + ```python + if condition: + #if-code block + ``` + + For example, if we want to represent the following statements in Python, we can do that with ```if``` statement + * You are an adult if you over 18 years old. + * You can drive a car if you have a drive license. + """) + st.code(""" + # Example 1 + Age = 24; + if Age >=18: + print('You are an adult') + + # Example 2 + has_license = False + if has_license == True: # False == True-> Flase + print('You can drive') + print('False condition, skip the if statement') + """, line_numbers=True) + st.markdown("""Python uses indentation (**white space** or **tab** at the beginning of a line) to show the codeblock levels.""") + ce.code_editor(height="200px",editor_label="lesson1-if-condition") + + st.markdown(""" + ### ```if-else``` Statement + ```if-else``` statement: makes a decision from two choices. + If the condition is ```True```, the *if-code block* will be executed. If the condition is ```False```, the *else-code block* will be executed. + + ```python + if condition: + #if-code block + else: + #else-code block + ``` + + For example: we want to compare if ```a``` equals to ```b```. + """) + st.code(""" + a = 10 + b = 10 + # check if a equals to b + if a==b: + print('a==b') + else: # a != b + print("a!=b") + + # check if a doesn't equals to b + if a!=b: + print('a!=b') + else:# a==b + print('a==b') + """, line_numbers=True) + ce.code_editor(height="250px",editor_label="lesson1-if-else-condition") + + st.markdown(""" + ### ```if-elif``` Statement + + The ```elif``` statement allows you to check multiple conditions for TRUE and will execute the code block of the first ```True``` condition, then end the if-elif statement. + If all conditions are False, the final ```else``` code block will be executed. + + ```python + if condition1: + #if-code block + elif condition2: + # elif block + elif condition3: + # elif block + elif condition4: + # elif block + # the N-th condition + elif conditionN: + # elif block + else: + #else-code block + ``` + For example, given a number x, to check if x is positive, zero, or negative: + """) + st.code(""" + x = 0 + if x>0: + print('x is positive') + elif x==0: + print('x is zero') + else: # x<0 + print('x is negative') + """, line_numbers=True) + ce.code_editor(height="150px",editor_label="lesson1-if-elif") + + + st.markdown(""" + ### ```nested-if``` Statement + include if statements within another if statement to provide more choices. + + ```python + if condition1:# outer-if condition + # outer-if code blcok + if condition2: #inner-if condition + # inner-if code block + else: + # inner-else code block + else: # outer-else + # outer-else code blcok + if condition3: + # inner-if code block + else: + # inner-else code block + ``` + + For example: find the largest value from n1,n2,n3 + """) + st.code(""" + n1 = 10 + n2 = 20 + n3 = 30 + if n1>n2: + if n1>n3: + print("The largest num: n1") + + else:#n1<=n3 + print("The largest num: n3") + + else: #n2>=n1 + if n2>n3: + print("The largest num: n2") + + else:#n3>=n2 + print("The largest num: n3") + """, line_numbers=True) + + ce.code_editor(height="250px",editor_label="lesson1-if-elif-condition") + + # Lesson1-Part6: boolean operator + st.header(":six: Boolean Logical Operators") + st.markdown(""" + Boolean logical operators are used to make more complicated conditions for if statements that rely on more than one condition. + Python's Boolean logical operators include: ```and```, ```or```, and ```not```. + + * The ```and``` operator takes two sub-conditions, and evaluates as **True** if, and only if, *both of its sub-conditions are True*. Otherwise, it evaluates to False. + ```python + print(2>1 and 2<3) # the output is: True + ``` + + * The ```or``` operator takes two sub-conditions. It evaluates to **True** if either (or both) of sub-conditions are True, and False if both sub-conditions are False + ```python + print(1>10 or 2<3) # the output is: True + print(1>10 or 2>10) # the output is: False + ``` + + * The ```not``` operator is used to invert a condition. If a condition is True, the **not True** will be **False**. The **not False** will be **True**. + ```python + print(not 2>1) # the output is: False + print(not 2>10) # the output is: True + ``` + """) + ce.code_editor(height="150px",editor_label="lesson1-boolean-operator") + + st.markdown(""" + ### Precedence (Order) of Logical Operators + + When a complex condition consists of several sub-conditions chained with different logical operators, we should: + 1. check the sub-conditions in ```parentheses``` + 2. check ```not```, ```and```, ```or``` sequentially. + + For example, + ```python + not True and (20<30) or not (10!=15) + # (not True) and True or (not True) + # (False and True) or False + # False or False + # False + ``` + + Try another example: + ```python + 10>20 and 20<30 or not (1 != 5) + ``` + To check the boolean value of above complex condition: + 1. ```(1!=5)``` is True + 2. ```not(1!=5)``` is False + 3. check ```10>20``` is False, ```20<30```is True, ```False and True``` is False + 4. Finally, ```False or False``` is False + + Try to print the result in the following code editor: + ```python + print( 10>20 and 20<30 or not (1 != 5) ) + """) + ce.code_editor(height="50px",editor_label="lesson1-logical-operator-order") + + # Lesson1-Part7: loop + st.header(":seven: Loops") + st.markdown(""" + Loops are used to repeat a block of code multiple times. Here are two types of loops: ```while loop``` and ```for loop``` + ### ```while``` loop + + Following is the basic structure of ```while``` loop: + + ```python + start-value + while stop-condition: + code-block + step-size + ``` + Let's see a while loop example: + + ```python + # print numbers between 0 and 5 + num = 0; + while num<=5: + print(num) + num = num +1 + print("end") + ``` + """) + ce.code_editor(height="150px",editor_label="lesson1-while-loop") + + st.markdown(""" + ### ```for``` loop + + for loop often used to iterate over a given collection, such as lists or strings. + + ```python + for item in collection: + code-block + ``` + """) + st.code(""" + # This is a list of names. List is a collection of values + name_list = ['Alice','Bob','Cathy','David'] + for name in name_list: + print(name) + """) + ce.code_editor(height="100px",editor_label="lesson1-for-loop") + + st.markdown(""" + ### Loops with if Statement + We often combine loops with if statements to select specific elements. + """) + st.code(""" + # Example 1: # print all numbers between 0 to 20 that are divisible by 3 + num = 0; + while num<=20: + if num%3==0: + print(num) + num = num +1 + + # Example 2: print all names contains lower-case 'a' or 'b' + name_list = ['Alice','Bob','Cathy','David'] + for name in name_list: + if 'b' in name or 'a' in name: + print(name) + """, line_numbers=True) + + ce.code_editor(height="220px",editor_label="lesson1-loop-if") + + # Lesson1-Part8: Python Collections Data Type + st.header(":eight: Python Collections Data Type") + st.markdown(""" + ### ```List``` + A list is a collection of elements (numbers, words) within a pair of square brackets. It uses commas to separate elements. + + Each element in list has an index. And the index starts from 0. + + A certain item in the list can be accessed by using its index in square brackets. + """) + st.code(""" + name_list = ['Alice','Bob','Cathy','David'] + id_list = [111,222,333,444,555] + mix_list = [1,'Alice',True,2.33] + + # print whole list + print(mix_list) + + # print elements one by one + for id in id_list: + print(id) + # print lenght + print('The length of mix_list: ',len(mix_list)) + + # access specific element via index + print(name_list[0], name_list[2]) + + # create an empty list + empty_list = [] + # add element to the end of list with the append() + empty_list.append('Math') + empty_list.append('English') + print(empty_list) + """, line_numbers=True) + st.markdown("More about List:https://www.w3schools.com/python/python_ref_list.asp") + ce.code_editor(height="400px",editor_label="lesson1-list") + + + st.markdown(""" + ### ```Dictionary``` + + A dictionary is a collection of data stored in ```key:value``` pairs. The ```key``` should be unique (like student ID). + """) + + st.code(""" + # a dictionary of id-name pairs + id_name_dict = { + 111:'Alice', + 222:'Bob', + 333:'Cathy' + } + + # access name "Alice" (value) via the id (key) + print(id_name_dict[111]) + + # iterate all pairs + for id,name in id_name_dict.items(): + if id<300: + print(f'ID: {id}, Name: {name}') + """, line_numbers=True) + ce.code_editor(height="250px",editor_label="lesson1-dictionary") + + st.header(":nine: Functions") + st.markdown(""" + In Python, we create functions to reuse code. A ```function```, sometimes called a ```method```, is a reusable block of code that has a name, can take input arguments, and can return values. + ```python + def function_name(input_arguments): + code-block + return values + ``` + + + * ```def``` is the keyword to indicate a function + * ```input_arguments``` are the input values used in code block, and it is optional. + * ```return``` is the keyword used to send out the running results from code-block and it is also optional. It will end the function after returning a value to the function call. + """) + + st.code(""" + # sample function without input arguments and return values + def print_hello(): + print('Hello WT!') + + # type function name to call the function directly. + print_hello() + print_hello() + print_hello() + + """, line_numbers=True) + + + st.code(""" + # sample function with input arguments and return value + def tree_sum(a,b,c): + result = a+b+c + return result + + # call function with given values and use another variable to hold return values + sum1 = tree_sum(1,2,3) + sum2 = tree_sum(4,5,6) + + print('sum1: ', sum1) + print('sum2: ', sum2) + + """, line_numbers=True) + + st.code(""" + # sample function with multiple return values + def sum_len(num_list): + total = 0 + for num in num_list: + total = total+num + return total, len(num_list) + + num_list = [0,1,2,3,4,5,6,7,8,9] + # t is a variable used to hold returned total + # l is a variable used to hold returned length: len(num_list) + t,l = sum_len(num_list) + print(f'The length of list is: {l}; the sum of list is: {t}') + + """, line_numbers=True) + ce.code_editor(height="400px",editor_label="lesson1-function") + + st.write(""" + This lesson provides a broad overview of the key components of the Python programming language. + + If you'd like to learn more about Python in a structured way, I recommend [Sololearn](https://www.sololearn.com/en/learn/courses/python-introduction) platform, where I taught myself Python coding. + + Starting with the next lessons, we will explore how to use Python to build applications in various fields. + + Feel free to reach out to me if you have any questions about programming: Or [Register](https://wtamuuw.az1.qualtrics.com/jfe/form/SV_2boQtKLCptO33HE) to join our Discord channel + """)