So I would say we start I will do a short introduction so in case some people are still Coming to this lecture room. They still have five minutes until we have like the real content So welcome from my side. It's a little more than 25 people here that are actually enrolled the reason is because some of you Seem to be willing to learn Python Even though the school doesn't give you credit for it So I'm stunned that is that many people that want to learn this on their own in their free time So either you have too much free time Or it's just a topic that you're super interested in First of all you see the red light here That means once you see the red light that means everything is taped in here so even if you talk to your neighbor you can hear it and That means You should be careful in what you say and I think that's a good thing because back when I was studying here We didn't have this really so what this meant is that you know after like 10-15 minutes in a lecture When we found it was a bit too boring We might you know end up doing some other stuff and talk to our neighbor and we would not focus so much so I think the red light might be very helpful in helping you to focus and Also Because I know from my own experience as well that Focusing for three hours non-stop is rather hard to do We decided to split this lecture into 90-minute sessions That is also a different from the normal three-hour lectures that you are used to So this is just you know from experience. We tried several different formats for this course And I think having 90-minute sessions works best and also note that in the previous semester We ran this course over a longer stretch So it was like 12 13 weeks in total with one lecture a week This semester we have two 90-minute sessions per week So the intensity is a bit higher and I think that's good because one of the criticism in last semester was Yeah We kind of felt like we did our homework We worked hard for two days and then we had to wait for like three four days until the next lecture So we increased the intensity a bit. I still took care of the schedule such that it does not overlap with your exams So that's why we already have this First session or the first three sessions actually in this quarter and not in the next quarter because this is actually a Q4 course And we start as you notice in Q3 and the reason is because we just have three lectures now Then we stop and you can take care of your other exams And then we will come back and then we will be done by the first week of April already Long before your other exams, which means none of you has any excuse in telling me you didn't have time to do homework or to do reading or whatever and This is basically done So that you have the best environment to study because in order to program you have to do Programming you cannot just wait until the exam two days prior and start studying this won't work So a little bit to my person Some of you already caught me your professor. I'm not a professor. So please don't call me professor That's a joke that you know, it's not funny because I don't know as long as you're not done with your PhD you shouldn't use any title for legal reasons a but also maybe, you know, you're not lucky and you won't make the PhD I don't know so don't call me professor. Don't call me doctor because I'm none of that I'm a PhD student. That's it. So what qualifies me to give this course? well, I Would say there are three main points that you need to know the first one if I open my LinkedIn profile You can read up the stuff the details later, but the first point is I'm one of you So I did not study computer science. I started at some other university upstream the river In my bachelor's before coming to this good university here And I did my masters and that was already back in 2012 So and back then there was no master in finance. There was only master in management We had two electives to like concentrations. It was called I had finance and supply chain management So I had have not studied anything other than you might be doing the second reason is After my PhD After my masters, I left the university to co-founder company in Berlin a startup The startup is still active even though we never made money Which is the case for most startups, but it's still there it exists and back when we started in 2014 We had one big problem. We didn't find coders So I talked to my co-founder and I said, you know, what about this? You give me like three months.  I will come back I will do all of the coding and he said yeah, that's a long time three months but you know, it's better than you know looking for coders that might not even stay or that are too expensive or whatever so that's what we did back then and The good thing is if you are a sales top programmer is you will make every mistake you can possibly make when coding so When we launched our first our first app back in 2016 It worked, but the code was super buggy and over time You know once you understand the limitations of your code when you you know want to add a new feature or something Then you really know what you did wrong and once you understand what you did wrong In practice, then you know how to teach it right. So that's a big advantage. I think and then the third reason is as you noted, I'm a PhD student and Yeah, so I do nothing but coding for the last three to four years And I'm focusing on parts of my studies are on machine learning applications and logistics and route optimization which are you know quite hard topics in in terms of coding So I think I learned a lot of that stuff in in theory as well And that's basically all you need to know So I hopefully will be done with the PhD sometime this year, but for now as I said, I'm a nobody basically Okay, so what else do you need to know about this course? there is Moodle and I was asked by the digitization department to put everything on Moodle, so I did and I think all of you should have access if you don't then let me know And then what will you see on Moodle? Well, basically you have once one Ribbon here for every Lecture so the first three lectures are already online you have an intersection and in the intersection you find basically the Syllabus if you scroll down the deliverables right here and But I will also give you announcements whenever you are you know required to do something you see the schedule What you see here is a lot of room e1 or 2 depending on how many of you are going to stay We will probably get rid of e1 or 2 and replace it with IPC for more seating And that's basically it and then in every section and that includes the intro part You will see mandatory reading and when you click on that what happens is you end up on the GitHub repository Where you find all the materials so that's basically the main side of this course Because it has all the materials and then What you can do? Most of you have done this already you can just download the materials and I also show you one more link to that It's the releases thing here This is where you can see what is the current version. So yesterday I Published the version zero six two and I think when most of you Downloaded this it was you know version zero point six one So most likely before every lecture I will make some updates and you will always know that you have to write version by checking the latest version here Okay, and then regarding installation. I think most people got it right and for those of you who didn't You can write me an email and then we'll try to figure out why it doesn't work on your machine And then also one last admin note here The I'm not going to use Jupiter lap in the classroom presentations, but you should use Jupiter lap I'm using a similar tool called Jupiter notebook. It's a little bit different It's a bit leaner and I use I prefer to use it for presentation mode But just don't be confused that some of the stuff looks different on my machine than it does on yours And also I don't know how many of you have a Linux operating system So whenever I do something here Really don't be confused. It's a different operating system. There's nothing you should worry about So let's Start the zeroes lecture. So what's the objective of this course? The objective is to give you some foundation with which you can continue to study Anything that requires you to know some Programming skills that means in this University you have courses for example by a professor muskman Econometrics you have courses by professor spindar called analytics edge You have probably more courses Junior professor browser has a web mining course also starting next quarter. So many many courses Require you to know a little bit of programming and usually what they do is They teach you some theory, you know, maybe some machine learning stuff or some web mining algorithm and so on and you basically look at the example code and then You just you know copy paste it you understand it as you go along But you don't have a real foundation So this course is about giving you some more background knowledge so that it's easier to Do work in more advanced topics? We use python here. I know some other professors here. They use are it's a similar language and Anything that can be done in our could also be done in python and anything that can be done in python could also be done in our So the concepts are also very much the same even though it's of course a different language So that's the objective of this course get you ready for some other things So what are jupyra notebooks and why am I using them here? So as you see I'm in a web browser Google Chrome basically so I'm in a web browser running some stuff and That's the application. That's called Jupiter and Jupiter No matter they're independent of you using either lab or me using the notebook version Can open a format called jupyra notebooks and jupyra notebooks. You see in the repo Are all files that end with I pie and B which stands for iPies notebook, which is the old name for jupyra notebook And these formats you can open in this application in your web browser There are also other applications that can open this but that's one way of you know looking at this and The important thing is for those of you who might have some, you know Other programming knowledge already This is not the only way to do Python programming There's also a way to put the code in real dot pie text files where you just have code That's the more professional way, but since this is a beginner's course I choose the jupyra notebook format because we can combine code with Actual, you know English text and so on and pictures and videos as we will see So this is supposed to make it a little bit easier for you to read through the materials and It's also self-contained so meaning you as you have already seen When you do the reading at home you can actually go through the materials and execute the code play with the code that's what it's supposed to do for you and There's an alternative which if I did this most of you would be scared We could also work in a terminal window, but that's a little bit more advanced But this would basically be what you would learn if you stick longer with programming There's no way really around doing some stuff in the terminal and the terminal even though it looks scary at the at first It's not really scary. Okay, so Whenever you see me doing something in the terminal then yeah, just accept it and there are easy tutorials to learn this as well It's nothing hard also And then of course as I said in this document to the notebook we can execute code So that's the first line of Python code in this course. I executed and I just print out hello world. So that's really pointless to do but it's basically the Introduction example that is usually done in every programming course independent of the language and the nice thing about Python is that basically even a beginner with no knowledge can understand it because it kind of says well print something and It says what to print within parentheses. We know parentheses already from functions in math So the syntax the grammar is kind of the same here or similar. So it's not so hard to read and We will see a lot more of this of course Then one short note on some terms that I think are important So this is a programming course the title says intro to Python and programming what this course is not It's not a computer science course and it's also not an IT course. So these are three different things and For my understanding what I say programming is basically the art of expressing some computation in a Programming language. That's my definition of it. It's always specific. There is no abstract, you know Concepts or there's no abstract notation about it. It always solves a particular problem Computer science is what you are here not studying This is if you went to some other university to the computer science department You would learn for example something about algorithms. You would study them study them in a mathematical way So you would do proofs you would you know, it's basically math at the end of the day and So it's something different and then IT. I just note that IT is anything where I think That has to do with managing let's say hardware in a company that has to do with managing for example a knowledge A base system in the company that goes into what I would consider IT But this is not what we are doing here. So you're not going to learn how to set up I don't know a sequel database or a tableau server or whatever. That's not what we do here That's what it would be. We just learn to program So you might ask yourself why Python Just judging by the number of guest students here I would say I don't have to convince you that Python is a super cool language to learn But I want to give you some more reason about so Why did I choose Python back in the year 2014 when we started the startup? so With my limited knowledge back then I figured okay, let's let's do a survey. What languages do I need? What can I do with what languages and then you will almost certainly get to know that there is a language called JavaScript which is super important if you want to build some web application because nothing in your web browser runs without JavaScript Then you will read about Java, which is something totally different Which is a language that you know is commonly used by big enterprises to write software and Yeah, but you know, it's usually old software usually, you know big enterprise software written in Java Then you have some nice Programming languages for example are that is basically build or MATLAB for this purpose That's basically designed to do numerical computing to basically do what you learn in a math course in an automated fashion For you for bigger matrices for example and stuff like that Then I figured okay, what are we building? We are building an app an Android app an iPhone app so the next thing you do is what programming language does your iPhone support and These will be in other languages. What language is run on? On Android is still a different a different language So the question I asked myself back then was isn't there one language with which I can do a lot of these things You know, maybe not in the very best way But maybe a language that keeps me flexible as a company because if you have a company and you have 10 programming languages You might end up with 10 different developers that don't really understand what they're doing each other So you want to streamline this this process? And back then already I understood that okay in Python I can build back ends and back ends are important to power, you know, your iPhone your Android app and so on With Python you can also do a numerical analysis So we back then we collected data about the art market and we had to run some analysis like what's the you know Average price we had to build price prediction models and so on you can do that in Python Then I figured We had to build scrapers because we had to like aggregate data on the web And the question is what language is good to do that? Well answer is Python So the reason why I chose Python back then is to keep the company flexible So that we have as few languages as possible to do the most different things Because I figure if you're a startup you need to be a child So if the answer to like let's say we need a new feature by next week is we cannot build this feature because The guy that wrote it is gone and nobody understands, you know Java or whatever this language that this person Programmed in that's not good for the company. So in order to keep your company flexible I think you have to keep the number of of programming languages to a minimum and also a company called Google has the same approach so They basically have three dedicated languages that any programmer can use at any time without Asking a manager, but any other than those three languages if they want a program in it some project whatever it is Even a very small project. They have to get approval. So And Python is among those languages and Python is also one of the first languages Google used So there are many many reasons and Then regarding Python in particular Python to make all of this possible It was designed to be a so-called general purpose language So people are often confused when I tell them I can write a web page Basically, or can I can generate a web page basically in Python? I was asked this question why why don't you use Ruby because at this university you also have Other web decides or web development courses that is taught in Ruby I say well Ruby is a good language But the thing about Ruby is you can only do web development You cannot do anything else in Python you can do anything you can do in Ruby plus a whole lot more so that was The reason why we chose it back then and then of course there are some other aspects for example Python is what is called open source So the term open source is super important. It has most for most of you you would think okay It doesn't cost money. It's free. That's what open source is the equivalent of but open source means a whole lot more in Particular it means you can read the source code because it's open and why would that be important? Well, it's super important if you want to let's say put your data in a database and you ask yourself the question Is the encryption that we you know we encrypt our data? Is it working and how do you know if you use someone else's code and that's usually what you do Then you have to rely on what on what they tell you and if someone else tells you okay My code is you know it encrypts your data. It's secure then you have to just rely on it Or you have to check it and one way of checking it I would call I would say of mass checking it maybe is to use open source software because if open source an open source software project grows big you have usually tens of thousands of people using it and reading the source code and For example, if you know an organization like let's say the NSA or the CIA try to build in some backdoor somewhere You know people would see it so they actually tried and the FBI back then and I think Windows XP that was in the early 2000s. They actually had already a backdoor built into windows and Yeah, officially back then and So what do you do if you buy a software product where you know there's a back door in it What do you do and with open source that you know many hackers and also, you know Organizations like the NSA tried to put something in there At the end of the day people saw it and then it was it was not even accepted So that's a way of making software secure the same holds true for bugs So if software is usually buggy and let's say you find a bug in your Mac operating system What do you do? Call Apple and say something doesn't work and then what would Apple do they would say yeah We know it and then half a year later. Maybe someone fixes it You have no chance to fix it on your own Let's say if you're a programmer and you download some open source project and there is something in there it doesn't work you can fix it right now and Then of course the last reason what I what I put in bold here is Python is also able to work with big amounts of data And that is also something that I will put a lot of emphasis in in the course to teach your concepts Allow you to work with big big amounts of data. And now the question is what is big data? What are typical definitions? One definition could be for example, what do you do if the data you work with for example? I work for my research. I work with a company called Fedora and I got a database from them, which is roughly 110 gigabytes of data So I have a super, you know good workstation in my in my Office, but it only holds like 32 gigabytes in memory So what do you do in this case if the data you want to analyze doesn't fit into your computer's memory? Also, what do you do if the data is so big that if you do some analysis by the time you get the result back The data has changed so much that the result doesn't mean anything anymore. For example if Google If Google looks at, you know, there's the data the searches in the last five minutes How, you know, how long does it take to make this analysis and once you get the result back? What does it tell you about the next minute? So what you need, you know to look at, you know, the last two minutes again to do the same analysis because, you know The result has just changed. So there are many many Fields of application and Python can actually work in all of them And then lastly who uses it this is a short slide of big companies and Also, NASA NASA by the way if you talk about big data There is no Field that has more data than astronomy So when people that are astronomers for example from the NASA when they work with data coming from telescopes that They actually have so much data. They cannot even store all the data they get in So you can actually learn as a data scientist the whole lot from from NASA Then that's a graph that's very basically I've just put it in because as business people we like grass going up And that is the development of Python in terms of measured as search requests on Stack overflow and we see that Python just cruise tremendously even in a niche market here Three tips about how you how do you learn to program? First one is what I call ABC rule. It stands for always be coding So that's why you get lots of exercise in this course because we can talk as long as we want all day as long Until you don't call it. You won't learn anything, right? Another big thing make a schedule That's by one of the co-founders of Y Combinator Paul Graham And he wrote it's a it's an old blog post that is referenced also in the materials and it's really worthwhile reading He says there are two types of people people who manage stuff managers They have to like, you know meet people for business lunch or meetings They manage their schedule on an hourly basis, maybe even half hourly basis And then there's makers people that you know work in a creative way and that is not does not necessarily mean Programmers it is also like your average artist, you know Sometimes artists they go to an island for four weeks and they come back and have a new painting And they couldn't do this back home because they just don't have the leisure in their mind And that's the maker and programmers are more likely makers than managers and what this means is If you have a deadline for example the first exercise set for this course is due before the next lecture Then don't start two hours before right you you don't have the time It's rather better to work in a what I call open-end setting And then oftentimes more often than not you are basically done You know a lot faster than you thought but just the the knowledge that you have basically enters amount of time You know might give you the You know the ease in your mind to come up with a solution and many many solutions in the beginning when you start to code They are not as natural right. It's not so intuitive And then the last one is what I call phase iteration So what is phase iteration? usually What we do here in this course is I give you like a linear sequence of stuff every week and you study study study But then you don't build anything you meant you do small exercise you but you don't build You know a product or something the thing is you learn a whole lot by by going in this linear process But then you don't learn to ship a product. So what you should do Maybe in the summer, maybe Whenever you have time is say I want to do a project for example for your thesis You might want to do an analysis involving data that you don't have what could you do? You could build your own scraper and just scrape the data That's how we started our business back then so and I had no knowledge of how to do this And I learned so much over that all the problems that you could run into when you scrape data for example You know people checking your IP address and blocking after 100 Requests and then you are scraper basically dies because it's blocked and Things like that. This is things that you cannot teach in a course so it's important that you find those projects and Always work and then because I call it phase duration. It means you're going back and forth between the two phases so for example now I'm working on another project with Fedora and Once I'm done I will get a new book because I will do something else with for Dora and I really read a book So I will also go back and forth between a project-based analysis and then some you know some tutorial or course or book That's important so That ends the introduction part and now I would say Let's go to coding So what I will do I Will quickly show you this is now chapter the real chapter one the intro chapter and We can see when you open it you have like the book format you have lots of text. I will quickly go into The presentation mode, but before we do that. I want to show you something how you can Move along in a notebook. Let's say I select the header here And now what do I mean by select where we see there is a frame around the cell code So now I use my arrow keys to go up and down and let's say I want to go Not I don't want to move along the cells, but I want to go inside the cell to maybe make a change I just hit enter and now I'm in the cell So now I can edit whatever is in the cell for example Here it says the chapter one heading and there is this pound symbol before and This pound symbol one pound symbol means header of you know the highest order so to say So if I want to make this header a header of a lower order I could say for example, let's put in form three more pounds to have four pounds and Then the heading will be formatted in a smaller way, right and I can go back and Do it back this is a text cell or also called a markdown cell And this is how I formatted this book and this is also how you can format your answers to the exercises So you can you should of course document your the answers to your exercises and that's how we do it And then the question is how do you? You know create a new cell. Well, let's just I'm now in in the first cell again And I'm not in the cell. I'm on the cell so to say so I go in the cell with enter and I go out of the cell with escape Well, I have to execute it, but that's it and now let's say I want to have a new cell below it what I do is I just press the button B and Creates a new cell right and now I'm also I'm on the cell. How do I see that because I don't see a cursor? I can go in by pressing Enter again and now I could write the Python that we've seen before by just saying hello world And then the question is how do you execute the cell? You cannot do that with enter Because enter we use to get into the cell. So what you do is you press control and enter and then the cell is executed, okay and Note that I stay in the cell. I could also do shift and enter and the cell gets executed again and The cursor or the focus jumps to the next cell So this is like navigating in a notebook and let's say I want to create a new cell above the current focus Well, how about just push a if B creates a cell below then a might create a cell above That's creating cells and then maybe the last thing you want to know. How do you get rid of the cells again? Well, you just put your focus on the cell and then you press the button D twice and Then the cell will go away and you do it one more time and the cell is going away. So this is like a one-minute introduction to how to work in triple notebooks and Now we will continue with the content So the question now is What's a good example? So I try to come up with a good example and then With which I can show you some things and for which I can also tell you some story for how you can maybe solve it in a different way So let's say the example is I give you a list of even numbers I give you a list of just whole numbers and then I ask you to calculate the average of all the even numbers in it This sounds like a very simple task and it is But let's say I don't tell you the list yet in the example We will see the list is rather short you could do this by hand now The problem is this list could be very very big in fact It could be so big that the list does not fit into your computer's memory and then the question is how do we do this and Averaging even numbers given a list of just numbers And assuming these are whole numbers can be broken down in two steps, right? We can first go over all the numbers and just select those that are even and then once we've got the even numbers We can do the averaging But then average how do we do averaging where we have to go back? Basically to our very first lesson in in a statistics course Where we basically defined the average or the arithmetic mean to be the sum of the numbers divided by the count of the numbers that's how we average and Of course, we need to teach Python to do that and then of course There might also be you might also have the question that let's say if we know anything about those numbers Anything about the structure of those numbers? Maybe we can exploit some nice properties For example, if I tell you we look at the numbers one to twelve Just whole integers one to twelve a range or as a mathematician would say a series Then maybe you could find a way to derive a formula where you just plug in the Let's say the largest number in the list and you can back get back the number the solution This would be a so-called analytical solution and this is usually what you do in math when you take calculus so when when you take calculus Where most of what you learn is about deriving the slope of some function or the area under a function you derive Formulas out of formulas. This is analytical thinking and Oftentimes, this is enough to get a solution It's important to understand that most of the time if you can find some analytical solution to some problem This might be the best solution you can find because you don't have to calculate you can derive the number by some argument now the thing with analytical solutions is How do you filter out the odd numbers or the even numbers or some numbers? You know that then it gets tricky and this can be worked out But then this would require you to have a little bit more advanced math knowledge and this is when programming is super useful This is the example. So I give you a list of numbers here and Trust me. It's the numbers from one to twelve It's only whole numbers But they are not ordered and this is what I just meant by is there any structural assumption We can make about the data we are given so Obviously, there is no structure all we can say is we have a list of numbers and They are whole numbers. That's it. They're not ordered and because of this We cannot come up with a formula to find a solution in an analytical way And therefore we want to go ahead and write a computer program to solve our problem So that's the type of thinking the of the storyline behind if we could find an analytical solution We would prefer that but we cannot do that and then I just executed the upper code cell here Without telling you any of the rules yet. So what this basically does the single Assignments the single equation sign here is it assigns a new variable called numbers to a list of numbers And then of course because a computer has like a memory what we can do is We can look at the variable numbers and we will get back the list of numbers we entered this seems super simple But regarding lists, it's actually not so easy as we will see later in this lecture So so far so good. We have found a way to model the data in our program. So let's write some code This is basically the code that implements the story that I told you you're given a list of numbers and You first have to filter out some in this case. We have to filter out the odd numbers to only To only be left with the even numbers and then we have to average them somehow So now how do we average a very first naive way is let's go over all the numbers one by one And how do we do this? This is done by this for loop here And we will discuss for loops in great detail In lecture four and five so there is a lot of there is a lot of theory behind the for loops That is basically not visible here yet, and then the the next line of code Which says if number and then there is the percent sign to and then there's a double equals and then a zero And then we must not forget the colon at the end. That's also important This also means something and this may be the first line of code that does not look so intuitive to you So we I have to explain it a little bit. So what does the percent sign do? This is basically what is called model division So it's basically the division that gives you back The rest of a division. So if you have let's say seven divided by two you will get three point five But if I say if I asked you what is the motor load division of seven by two then the answer would not be three point five The answer would be one why one because the number seven divided by two Fits in there three times and then there is a rest of one So two times three would be six and then we still have a rest of one So that is what the motor load division is and we will also look at this later So what this does here? motor load division by two Is a rather a special case of doing motor load division? It divides a number By two and if there's and you know gets the rest So the rest if you divide if you motor divide any number any whole number by two there can only be two outcomes They can the outcome could be zero or one. It would be zero if there's no rest When is there no rest? Well, there is no rest if the number the first number is perfectly divisible by the second number Otherwise there would be a rest and the rest has to be one because we are dividing by two and there can be not the rest Cannot be more than you know, the number by which we divide So what I focused here numbers model or divided by two will end up being zero or one And then I have a double equals here and we've also seen a single equal sign before So the double equal must have a you know a different meaning in a way and it does The double equal Basically is asking python to compare two things with each other and then tell us yes or no if they are the same or not and The single equal sign that we see in the beginning is what we've already discovered before It's assigning something namely the thing on the right hand side to the variable on the left hand side So we must always be careful in the beginning to not mix up the single and a double equal signs here And then let's go To the next block of code and try to understand what goes on here. Well, this is basically implementing the logic of Calculating an average so what this does is first it keeps track of a count Which starts to be a zero and then for every time when we hit an even number We increase count by one and then the second variable called total is our running total So we start also at zero and then we add up the individual number that we loop over and Then at the end of a day the total will be some number It will be the total of all even numbers and then we divide it by the count of all even numbers And that's the definition of an average and how do we get the average? Well At the end I calculated I say total divided by count and I assigned the result to the variable called average So I execute the cell And note how nothing happens. So how do we know that a cell is executed? We know it because it says now the number five in the upper left corner That means it was the fifth code cell that was executed in this running program here But we don't see any output. Now the question is why don't we see any output? So or in other words, how could we see an output? So let's say in the last line of the cell before we had the variable called average and we assigned to it And now if I ask Python, hey, what is average Python tells me it's seven So Python seems to know what the average is the average of all even numbers from one to twelve It's seven, but we have to ask it right. It doesn't print it to us and the reason is as We will see later below Because of the single Equal sign here we called the entire last line to be a statement something that changes the state of the running program and By just typing only average here This is not a statement here. We are just asking Python. Hey, give me something that you have in your computer's memory and So the the upper cell changes the memory the lower cell just asked for what is in the memory? And this is why Python does not print out the first the result of the first cell and To go into a bit more detail regarding, you know, what we see in Jupyter notebooks and what don't we see? Here's another example Two lines of code and you might wonder. Well, is this code? Why is this code? Well, the answer is it is of course code. This is Python's way of Modeling text data. So this is called a string So we write the double columns here the double quotes and then we just write some English word here and or words And we do so in the second line as well. And if I execute this cell, I will only get back the second cell So we learn what do we learn from this? Jupyter notebooks give us back only the value of the last line and Then there's a trick if for whatever reason you don't want this output just put a semicolon at the end This will suppress the output Now the question is What how do we get the output of the first line? Well, there's no way to do so unless we print it out explicitly with for example the print function So this is the same code cell from before just Within the print function if we execute this We get back two lines of output now And Yeah, that's how we get output at any point in time in a program if you wish and you will use lots of print statements in the beginning of your programming career because you will mess up some program you won't understand some value of a variable in between your calculations and you want to see some Intermediate results and what you could do is you can always just put in a print and then you will see all the all the values that are calculated as you go and now Let's continue by looking at what is called operators, so operators in Python are symbols That have a special meaning to Python for example arithmetic operators like plus and minus so Here in this cell I add two numbers 77 plus 13 Python gives us back 90 Subtraction also works so we can use Python as just a calculator, right? Just as your you know average Excel spreadsheet or physical calculator, whatever. This is just the calculator but I want to Show you a little bit what happens in memory if we execute this first cell So this is how to teach you a little bit how Python works in memory, which is important to understand when we execute the first line When the 77 is executed what Python does in the memory section somewhere in memory and memory You should always think of you know Just a big space in your computer some conceptual space That has atreases so we can put something in there and what we can put in a computer's memory will always be once and zeroes And then we can read it out. So what happens is we will put something here and We don't know what is in this box, but whatever is in there means the number 77 and then Python will go ahead and we'll create this when it reads this and then it will read the 13 and it will put a 13 in another box and then This is how it evals so it goes from left to right But it doesn't it basically skips the plus and then once it has created those two numeric objects in memory We go ahead and then it says let's do the plus operation and then what Python does it will create a new thing a new object with the numbers 90 here and this is then and I use dotted lines here given back to us and That's it and now the question is what happens if I execute the cell again Now we see the number 12 next to it because I run it again. So what happens is in the moment The first 90 was given back to me into the notebook Python immediately Forgot this because it was not stored. So it was calculated in memory It was there the ones and zeros were there in memory and it was given back and then when we execute a cell the second time What Python does somewhere else in memory? It creates a new 90 and it gives us back and Then we can we can see it in to the notebook below the cell as out here But then in the moment we see it Python immediately forgets it so that's how memory works and Of course only in this very basic example, but we will come back to that later in How how we can actually create verbs and what happens in memory then let's first continue a little bit with the arithmetic operators so the upper two code cells here is what is called a Binary operation binary because there are two operands two numbers that are added or subtracted the minus Of course, we can also use as a so-called unary operator Which basically goes ahead and flips the sign. So I execute a cell minus one And I tell you a little bit of how Python does that in memory So what happens if Python reads this line? It goes ahead and it first Creates the number one In memory plus one okay, and then it looks at the operator and this operator says give me back the minus one And then Python is smart enough to figure out a new object Called minus one and this is given back to us and once we read it down here in the cell down here It gets immediately forgotten and the plus one is also forgotten So whenever we don't have a way to reference those objects that are in memory They are forgotten and of course by the way those up here. They would also be forgotten right away So this is an example of what we call an expression This is something that something happens in memory, but it has no side effect So if we saw what that means is we can execute all the three cells again And this might sound super weird to you in the beginning, but we get back the same results And the same results we get back with different objects. So every time we execute new objects are created And given back and immediately forgotten. So that's an important concept You should always remember how the memory works because this will basically solve 80 percent of your box in the beginning And it will get a little bit more tricky Then multiplication and division also works Just as we expect but now here we see an example of something That we have not seen before we have but I haven't pointed to attention to it already So I divide 84 by 2 and I get back 42.0 and I multiply 2 by 21 and I get back 42 So the first one is obviously a whole number. This makes sense if I multiply two whole numbers I get back a new whole number But what happens if I divide two whole numbers? well Obviously In this case it could be a whole number But python doesn't know so python says whenever you divide two two whole numbers There is a good chance that what the result will be It's not a whole number and because of that python takes special care So what python really does in memory here? It first creates an object 42 And What it does it tags it by saying int for integer And in the second case python goes ahead And creates this huge box comparably huge and i'm exaggerating a bit but Acceleration is important here. It puts the 42.0 here and it puts something other here namely float because that's a floating point number so What happens in memory is? For us humans, there's a number 42. We don't care how this is stored in memory, right? But in a computer The bits the ones in here was in memory. They matter. So there's a big difference And we will see that the number 42.0 as such is super imprecise So this is actually not 42.0 exactly even though it appears to be 42.0 But this could be let's say 41.99999 and so on we don't know it's it's shown to us as 42.0 But in memory, maybe there is some imprecision. We will see about this in future future lectures So let's go on. How can we avoid this? You know the result to be a float well, we can use two Divide by signs two slashes. So we can say 84 divided by two and the double slash means integer division or whole number division So now the problem is 84 divided by two will give us 42 But what happens if I if I divide 85 by two? Well, the answer is It must give me back also 42 or 43. Maybe it cannot give me back 42.5 Which is what we would expect and why can't I do that? Well, because Python knows or Python is created such that the double slash would always give you back an integer a whole number And a whole number cannot model 42.5. So it has to make a choice here And at first sight it seems like it's rounding down. Why is it rounding down? Well, maybe because the periods the decimals they are cut off So if you look at 42.5 and you cut off the dot 5 then you're left with 42 This could be the explanation. However, it's not as easy as it seems Let's divide 85 minus divided by two We get back negative 43. So Last semester someone said well, this is just always rounding down Well, obviously it's not rounding down. Well, it is rounding down But it's not going to rounding down the absolute value But it's always rounding towards negative infinity And these are you know things that you should have in the back of your mind You know, you should know what you should take from this is if you know that you get back an integer Then don't use numbers that you know will not you know where it does not suffice to have an integer These are sources of mistakes and then of course as we have seen before The percent sign is used to give us back the rest. So 85 Modular divided by two is one. Why because 84 85 divided by two is 42 Plus one rest and that's the one we get back So we have now seen three different ways of doing division And you should you know always remind yourself what you do Now you might wonder the modulo division may not be super useful for you as business students, right? Um, we will find many many applications where modulo division is super useful One we have already seen to check if a number is even or odd We just modulo divide by two and another one is let's see if 49 is perfectly divisible by seven How do we do this? Well, we just use modulo division and if the rest is zero Then we know the number the first number is perfectly divisible by the second number and then there is even more use cases And for example modulo division by 10 or 100 will help us to get back digits From the end of a number like 123 modulo divided by 10 gives us back the last digit Modulo divided by 100 gives us back the last two digits This may be useful if you want to extract let's say, I don't know You can also turn this around of course But let's say you have some number and you just want to extract the millions out of it or something This could be useful And then there is something it's called diff mod which does both of them together So 42 and 10 diff mod will give me four because 42 divided by 10 is four and the rest two So I read it again 42 Divided by 10 will give me four and the rest of two makes sense, right now One thing that is important here diff mod This is not an operator This is what's called a function. So syntactically this is something different But we will come back to that soon Of course exponentiation works. This is two to the power of three. We use two stars And then of course we can go ahead and chain the operators so we can say Three to the power of two times two another question is what's the order of precedence? And in this case python is Very much hands-on it works exactly like you would expect it from math So three to the power of two goes first and then the result is multiplied by two So this is 18 and if you don't believe me, you can always put parentheses to group stuff And then the parentheses will be calculated first and this also follows the same rules that you all know from math And of course we get back a different result if we group differently So now comes A big topic That you have to understand So Let's see Get a new piece of paper here We have seen all three types of data before now Um, and now I what I do is I create three variables called a b and c and I assign them three different things And now let's see what happens in memory So when python Goes ahead and reads the first line What it does it goes to the right hand side first It looks at seven eight nine and then it will go ahead in memory And it will create a box And it will put ones and zeros in there because every box in memory in a computer's memory always has ones and zeros Don't worry about the ones and zeros. I won't ask you that on the exam You just have to understand There is some layer of abstract abstraction here And the ones and zeros they mean the number seven hundred eighty nine And then as we have seen Python marks this back and gives it a type it says that's an integer Now the object is there But now we only have evaluated the right hand side of the assignment statement. The a equals part is still missing So what happens is Python goes ahead now Creates a name called a And makes this name Point at this object Okay, then we go read the second line And python goes ahead Makes a bigger Object more space It says that's a floating point number float And then it will put 42.0 here And then in the next step It will create an available code b and make it point but note how I Go ahead And I draw the object in them on the right side on the memory side first Before I create the name So if something goes wrong on the right hand side If this it's a 42.0 here creates an arrow Then the b will never be created Okay, and now let's do the last line. So this will be Probably even more space And now we write something here str for string You will see in a moment and we write in there Python rocks And then once this object is created we create the variable c make make this point to The object And then we have our model in the memory. So this is how you should think of memory Let's go ahead in the slides So one thing I want you to know and this will for sure be an exam question Every object has three three properties. The first one is the identity So let's call the id function in python with a b and c in it will get back some number What I wanted you to understand is the number we get back Not meaningful. You can as well ignore that number The only thing what this number means is This is basically the the spot in memory here on the left hand side where it is So you should think of the memory like this The memory goes it's based like a matrix. So we go from left to right row by row And every cell so we can we can think of the memory maybe like this We can think of the memory going like first cell second cell and these are different spots and it goes like this And memory is one dimensional. So I have a piece of paper here, which has two dimensions A computer's memory is one dimensional. So once we hit the end the memory just continues And this will be the first You know cell in memory the first one or zero So this might have the number zero Because we start counting at zero as we will see soon. So this is like the first address in memory and we go back there And this may be I don't know 20 million because our memory has many many Ones and zero. So we have nowadays the computers have big memory So this may be a very big memory representation here and the number you see here in the code This is you can think of this is the number at which the object begins. That's the location in memory. It's an address Okay, other than that it has no meaning So if two objects Have the same address. They are the same object. It's literally the same ones and zeros. We look at in memory That's the lesson here That's the first property of three The second property Let's first check how we can actually check this first Property, let's say I create a new variable called d seven eight nine What I will do here in memory Let's see if I still have space Let's say I create a new object and seven eight nine end And then I make a variable called d point at this That's what I did in this line of code that I just executed and then the next code cell I asked pi from the question is a Equal to d and the answer is true. It's correct So what does a double equal do as we saw before it looks at the left hand side And the right hand side and says hey you too. Are you equal? so What does equal mean here? It does not mean the same object. It means Potentially two different objects in memory that have the same ones and zeros inside them. Okay, and now let's look at our diagram of the memory We see We have a pointing at an object and we have d pointing at an object And both have the same ones and zeros inside them. This is why we get a true here But then there is another operator and note how this is an operator By the way, the double equal is also an operator so What i'm saying is python has a lot of non-arithmetic operators and the word is itself is an operator with jack's identity so up here we check for uh equality And down here we check for identity So the question is is a and d the same object and the answer is no because a and d point to two different objects in memory Which is why i get false here So the notion of equality and identity are two different notions and we must never mix them up The second of the three properties every object has a type This is now not surprising a is an integer Appriviated with int and b is a floating point number abbreviated with float And that's exactly what i wrote in the memory diagram at the at the you know to label the box. So to say or the back so That's my view. That's how i think of memory. I just think of many many bags in memory That have a label associated with them int and float in this case The label indicates first how big the bag is and also what the bag can do and Let's see Let's look at b b is a floating point number And we can check if b is a whole number as well So what we do is we we write b and then we write dot which is also an operator by the way And it's the So-called attribute access Operator so b is an object But b comes with properties and one property among them is the presence of this is integer function And we can call this function by just saying b dot is integer So what this means is we ask b. Hey b. Are you a whole number? That's what we do And we get back the number true And that makes sense because the ones and zeroes that are inside Could be represented as an integer type without losing any decimals. Okay, and because of that the answer is true To contrast this Maybe I create a new cell and I call it a variable bb And let's say let's make it 42.1 Execute this oh one see I make the mistake also So let's create a new variable bb Pointing to the to the number 42.1 and now we can ask bb Hey Are you an integer as well and the answer will be false because we would if we if we converted this into an integer type We would lose the decimal And now here's the trick question What do you think happens if I ask the integer a if it is a whole number? Who thinks it's a good idea who thinks we get back to the answer true Okay, so you haven't downloaded my slides before Or not done the reading because everyone who has done the reading knows that there must be an error and the reason is Because what the the mistake you just made is You try to answer my question in a semantic way. So I asked you is the number I don't know seven eight nine and a whole number and you said of course it is But we have to look at this from the point of view of a of a computer of a software and the software just looks at the ones and zeroes and It has to make sense of those here of the ones and zeroes inside And for the integer type seven eight nine we already know it's an integer to begin with Because that's how we defined it. So there is no point in asking an integer Are you a whole number because because we know for every integer. It's a whole number So that's why it's maybe a trick question but Yeah, it's important to understand the idea of type and then what's the type of c It's str which stands for string. That's the the default way of representing text In python and what can we do with string types string objects? Well, we can say well, please lowercase yourself Please uppercase yourself and so on. Okay, so depending on the type we have different functionalities And now there's the third big property of every object Which is the value And now the value this is it looks very trivial But there's an important point behind it. So if I just Ask python. Hey, what are a b and c it will give back to me what I entered them to be in the beginning So there are two points first whenever we ask python, let's say, what's the the value of a in this case It gives me back seven eight nine Some presentation I copy it. I create a new cell. I paste it in and It does not create an error. Okay, and that's important. So what I now have is I have a that points to the number seven eight nine And I get back a representation of value that I can use to create a new object that has the same value So when I enter seven eight nine in the second cell What happens in memory is A new object of type int Is given is created and python immediately forgets it So we created and it immediately forgets it So the important lesson here is it's two different objects with the same value Okay, and we call this the literal representation literal meaning we can literally type it into python and python understands it That's what a literal is And whenever we ask a variable. What's your value? also a subtle difference is a subtle thing to note is The variable a does not have a type So when we say python, what is a python goes in the list of all names It looks up a and then it goes to the int object And then it gives us back the value of this object. So a variable never has a value It's the object that has the value. So a variable points to an object that has a type and a value That's that's how we should think of memory And usually the value as I said is something that we can copy paste back into python and python literally understands it And also the second notion about value is that is now the semantic thing when when I say the word semantic I mean, what do we humans think of this?  It's text the number b Is 42.0. We don't care how this is represent represented and we will see many many ways to represent this number With different data types, but they all mean the same thing and whatever the meaning is to us humans That's what I what I think of as the semantic meaning Or called the value of an object. So value has the semantics with it. Okay Let's continue a little bit So far we have seen How python works and I've already made some mistakes along the way where we saw error messages And let's formalize this a little bit So whenever something goes wrong in the computer programs It is always a case or an example of one of three different types of errors and that's also a nice exam question by the way That's an error. What type of error is it? And then one of the three possible answers is it could be a syntax error So what is a syntax error? Let's say I want to build an accounting program or finance program and I want to add two dollar prices And I write 399 plus 1040 which could be prices of products I add the the dollar symbol behind it. I try to execute it and I get back syntax error So that's what a syntax error is you type something you executed python immediately says I cannot read this I don't understand what you mean. That is a syntax error And syntax is the the computer science term for krammer So, you know in english language a noun can be a subject or an object in a sentence This is what we understand of kramm grammatical rules and there is something similar In in the programming world, which is called syntax and syntax means how can we use different things or how can we use How can we what can we do such as python understands what we mean? And what we cannot do is use invalid symbols because otherwise We get a syntax error and we also see the little arrow here python tells us exactly where the problem is It says I don't understand the dollar symbol Okay, there are other types of syntax errors The one that you will most likely make in the beginning is you will forget a colon here and then you will get a syntax error because In the for loop python needs a way to to know when the line in Of the for loop when the first line of the for loop is done And when the body of the for loop continues and this is done in two ways It's usually done with a colon and then also with intendation, but if I put a colon here this line works And then also here as I just noted now I have the colon, but I don't have indentation And if I execute this I get an indentation error and indentation error is also a type of a syntax error Because python obviously doesn't know how to deal with it That's one type of error the other time that will most likely be more common or I hope it's more common syntax errors. You should not see after Maybe the first two or three weeks so in the beginning you will make lots of syntax errors But once you got the syntactic rules down You will usually write code that works it runs But then oftentimes something else goes wrong and there's something else that can go wrong It's usually a so-called runtime error And the best example is what is one divided by zero and the answer for us humans would be it's undefined So and undefined is again a semantic meaning to us So it's not like one divided one divided by zero has no meaning Because it's a natural law or something it's basically a convention by mathematicians But it's something that we understand as a semantic mathematical meaning here And then in python if you try to execute this you get a zero division error So why is this not a syntax error? It's not a syntax error because let's say I divide by zero point zero zero one I will not get an error. So if I divide by any number close to zero it works So syntactically the code is correct, but once I have a zero here Divide by zero doesn't work in python because it could be made to work But then what would you get back? And we will see a result other than an error In a future lecture. So you have to be careful You do not get this type of error all the time you have to know that you get this error Or you have to also know when you don't get this error even though it's wrong But that's a runtime error And then the third type of error is We have it's called a semantic error and I have already talked a lot about semantics And when I mean semantic And semantic error is something where the computer doesn't See an error the computer just does what you tell the computer to do But the thing that you told the computer to do is wrong in and of itself So in other words your code is wrong, but it doesn't cause an error Or in other words you get back a result that you didn't intend to So what that means is let's look at the intro example again And what I did here is In order to calculate the running total I would always add total plus the number the current number that is even right But let's say I make a copy paste error because we type a lot and you know We copy paste a lot of time and we make just a you know a simple stupid copy and paste error by putting The variable count here instead of number if I execute this I don't get an error But the answer is of course wrong right why because the code is wrong So that's an example of a semantic error, right The code works, but the result for us humans would be wrong And there's a famous example that this where this happened in in practice NASA in they try to send a satellite to mars and Some program or engineer He did not use meters, but he used feet And then the satellite or the the mars I don't know what it was but he tried to land on mars, but it burned once it approached mars And the reason was because a human Mixed up meters and feet. That's a semantic error Right the computer is not to blame here. It's the human that made the mistake So let's look at best practices um The same example rewritten as you would rewrite it in three or four weeks from now This looks a whole lot different So for example instead of a for loop we write the for loop inside the brackets inside the list This is called a list comprehension It does the same thing as a for loop with a list in it But we will look into that in detail in in the later lecture Then we have an intermediate result here called events and then We take events and we sum it up and we take the count and we can do this with so-called built-in functions called sum and len And we can do this to calculate the average and get of course the right result but this avoids writing, you know taking the count ourselves and to calculate the running total and then know about the calculation Manually basically but this is um the best practice and why is it the best practice? Because the code is much cleaner and also the sum and the len function They do the counting and the summing up faster as well because they are built into python and It's just faster If you ever want to know what are good rules to know just type import this And you will get some best practices back. You can read them at home Some of them seem to to be a joke But they really aren't and the interesting thing is and this is also why I think Why I made the the distinction between programming and computer science in the beginning Some of those practices here. They actually contradict each other And in a in a science, you shouldn't have different theories that contradict each other because only one can be true But in a in an art you can you may have different ways of doing something And all is good. So that this is why this is an example of this Okay, let's Look at some harder example And if you understand what I'm about to do on the next memory diagram Then you already understood a big concept. So let's first look at a and b here We just set them to do different numbers And now the interesting thing is What I do here. So let's say I create the float big box 20.0 And I write float here And then I say a points to here And then when I say in the next line a set to the integer 20 what happens is Python will create a new object With less ones and zeros We'll also write 20 here We'll make the reference here go away And we'll make a point to this And this may be confusing for the ones of you that have some experience with other programming languages Usually the type of Something is in many many programming languages associated with the name But in python the type of the things is associated with the object And the name is only the thing that points to the object So in python, it's perfectly fine to change the type. So to say of a variable But that's actually, you know bad english here because when I say I change the type of a what I really mean is I create a new object of a different Type with the same value because 20 point on float and 20 the integer have the same value Semantically for us humans. So I create a new object of a different type And then I make a point at the new object. That's what I really do So what I what I do as a shortcut saying in english I could say I changed the type of a but really I didn't do this in memory something else happens And then I can do things like Like this I can do the assignment and the operator in one statement, which is called update So I can go ahead and I can take the 20 and multiply it by 4 and set it back to 20. So what this does This line it will create 20 times 4 which should be 80 So it will create a new integer And then it will erase this reference and make a point there The next line The double Slash equals by 2 what this does it goes ahead and it divides the 80 By 2 to create 40 and it does not create a float. Why because I use double slashes here and then I it deletes The reference here makes a new reference to this And now by the way, what happens with those objects that are not that have no reference anymore What happens here is we don't know what happens. We have to assume they are gone But python doesn't delete them right away. So in regular intervals python does what is called garbage collection It just goes ahead It looks at memory looks at the memory on the right hand side and checks Is there something on the right hand side that has no reference to it? And if it finds something it goes ahead and deletes it it removes it and once this is deleted We can actually reuse the memory and python does this for us If we were to learn about other languages for example c or c plus plus We would have we would have to do this deleting of objects ourselves often at least we have to You know think a lot harder about how we arrange the memory python does all of this for us automatically And then in the last step I take a and I add 2 to it So what this does of course it creates the number 42 the solution to everything Creates deletes this reference and then creates a new reference here and maybe It deletes this one here, but maybe it doesn't we don't know So this is how those lines of code work and at the end when I evaluate a I just executed the the cell before twice unfortunately, so now I have a 44 but we can quickly fix it by just going back And running all the cells again once and then we will end up with 42 And this is what happens in memory. So this is always what you should have in the back of your mind You don't always have to you know draw this diagram so extensively, but it's really helpful to know To do how to do this in cases where something goes wrong And now I will show you a case where something goes wrong But before that I will also tell you Another secret let's say you call The line before it created the number seven eight nine An integer and made b point at it This is what b does and now I can evaluate b and it's the number seven eight nine But then there is the stale statement Where I can delete b and then once I delete b what happens is this gets deleted on the left hand side The right hand side again is not touched. It may be collected by the garbage collector It may not but once we reference b again, b is of course gone because we deleted the reference the name If you're ever in doubt what names are there just type in dur And call the function then you will see all the names and you will see there are many many names It's actually shortened here. So Output is limited and now comes the the hard example with which I want to conclude today's lecture Let's say Let's go back Let's start again. Just to give you b I deleted So let's say b is now seven eight nine again So I create seven eight nine integer I make b point at it And now I say b is equal to a That what I just said is actually wrong What I should have really said is I said Oh We should have done is the other way around So should have done a here back here. Pardon. We put an a here And then we will go ahead and execute the next say b is equal to a and what this does It creates a new name b that will also point at the same object and that's an important idea two things pointing at the same object And if I now go ahead and set a equal to 123 this will create A new object of type int It will take it will delete this reference Make a point here And now if I go ahead And I say what is a a is 123 because I just created it But when I say what is b, it's of course still Equal to seven eight nine because I never changed where b points at and that's an easy example because An integer number cannot really be changed in memory now. I give you a The harder example, but it's the same thing happening. So I do the same thing the same trick but it just Gives you a little bit of a weird result. So let's look at the list again I create a list 123 now the question is we haven't drawn a list yet in memory So we will do that. How does a list look like? Well, when python reads this from right to left It will go ahead And create a big thing here With slots here And how many there are is not important Type list And then it will go ahead and create An int object or three int objects 123 And make the first slot point here the second slot point here and the third slot point here And once this is done in memory, it will create a name x And make x point here And now in the next line, I set y equal to x. So what this does? I create a new name y And I make it also point to this list here And now the confusion begins First, how can I access those numbers? There's a new notation that we haven't seen before but we will see in detail in future lectures Um called indexing. So I look at x and the zero's entry the zero's element python starts counting at zero So zero really means one So if I write x zero what happens now python goes ahead and checks where is the x Where does x point to x points to this list and then evaluates The the subscript zero the index of zero and it follows this pointer to the one. This is why I get back the one here And now What happens if I change this let's say I set the number 99 to this number So what this line does it creates a new number 99 a new back integer it deletes the reference here And the first element will get a new reference now pointing to the 99 I can see this by printing out x So the first element was changed from one to 99 And now the big question is is what is why right? But the answer is obvious now and why is the answer obvious because I threw the diagram So why of course is also a pointer to the same list. So the first So why is pointing to the same thing and if I ask what is the first element in y It will be 99 of course because I'm following the pointer to the same list And then I follow another pointer to the 99 So now the thing is this I have two different names and I made a change Via one of them via the x and I can see the change via the other variable namely y And this could be a source of confusion if you start to code You know some of the examples problems you will see in the next couple of weeks Because what you should always keep in mind is that more than one variable may be pointing to the same object And whenever this is the case Nothing can go wrong if the object to which you point is simple simple like an integer But a lot of things can go wrong if the object we point to Is an object that can be changed in place like a list So we will see a lot more lists in the future But for now, I think we leave it with that And always make sure that you understand what goes on in memory Okay, so It's now 1115 regarding the The assessment and so on the you have seen on Moodle You have online quizzes and the first ones the first two ones actually are due tonight Are you I actually wanted to make those assessments do before the lecture so that I and for I force you to just have the reading read before the lecture But then I figured okay, maybe someone cannot do that and maybe someone needs to you know Have some clarification question or something So let's make the assessment deadlines always on the day of the lecture at midnight, but it's always after the lecture And only for today you have two quizzes, but it's really one quiz I just split them up in part zero and part one like in the introduction part and the first lecture part And then I will also send an announcement with the coding exercise and the coding exercise Will always be due to the next To the next lecture and how can you do the coding exercise? You are allowed to work in groups up until one from one to three people So you can do it on your own you can do it with three people In the past I had people send it to me via email What we will try to figure out today is to find a way where you can Port the jubilee notebook that you work in into a pdf and then upload the pdf on Moodle So that I have an easier time to correct everything But Moodle so far hasn't been used to create custom groups that you create So far always the teacher had to create the groups and I don't want to create the groups for you I want you to create the groups so we will figure this out and then other than that I will see you on Thursday I think Thursday we have e one or two already in the in the schedule, but I know ipc is also empty around the same time So most likely the lecture will be here in ipc And without that if you have any questions just speak to me after class and I will also stop the recording so you can start With the bad jokes again