The Complete Python Course | Learn Python by Doing
This course will take you from beginner to expert in Python, easily and smartly. We've crafted every piece of content to be concise and straightforward, while never leaving you confused. This course will dive right into Python and get you productive from the very beginning. This is the best investment you can make in your Python journey.
More
Why Learn Python?
Over the last few years, Python has become more and more popular. Demand for Python is booming in the job market and it is a skill that can help you enter some of the most exciting industries, including data science, web applications, home automation and many more. Python is one of the "most loved” and “most wanted” programming languages according to recent industry surveys. If people are not using Python already, they want to start using Python.
This course will make it easy for you to learn Python and get ahead of your competition.
Why Choose THIS Course?
You will:
Get a broader and deeper experience in Python than with any other Udemy course on the market.
Start at zero and become an expert whilst learning all about the inner workings of Python.
Learn how to write professional Python code like a professional Python developer.
Develop a long-lasting love for Python and programming by creating good programming habits.
Explore the wider possibilities of what you can do with Python, including databases, web development and web scraping.
Become job-ready by learning about best practices, Selenium, unit testing, and all of the major Python topics.
Who Is This Course For?
Beginners who have never programmed before.
Programmers with experience in other languages who want to kickstart their Python programming.
Programmers who know some Python but want to round off their skills and become truly proficient.
What Am I Going to Get From This Course?
Lifetime access to over 250 lectures covering all aspects of Python, from the foundations to advanced concepts.
An interactive screencast video from every lecture AND complete, written notes and code for you to read and refer back to you as you progress through the course.
Milestone projects for you to complete throughout the course. These provide a challenge and an opportunity for you to apply what you've learned. We always go over the code after to show you how we would tackle them.
Guidance on common pitfalls and best practices including how to make your code "Pythonic" (looking like professional code), Object-Oriented Programming, database interactions, and more.
Quizzes and tests for you to check your understanding.
Requirements:
- Access to a computer with an internet connection. Everything else we use in the course is publicly available and we'll guide you through getting it.
- There are no other requirements, besides getting started!
- Beginner programmers who want to get into one of the most popular and loved languages in the world
- Programmers from other languages who want to kickstart their Python journey
- Python programmers who want to refresh their skills and tackle advanced topics like algorithms and asynchronous programming
What you'll learn:
- From foundations to expert, learn about every major Python topic, working with Python 3.
- Write professional-grade Pythonic code with all the best practices and avoiding common pitfalls.
- Master Object-Oriented Programming and structure your Python programs like a professional.
- Swiftly understand complex topics like decorators, algorithms, and asynchronous programming in Python.
- Automate extracting data from websites using web scraping libraries like BeautifulSoup and Selenium.
- Learn how to write desktop applications with Python and Tkinter.
- Interact with REST APIs using Python and build a currency converter!
- Develop a life-long love for programming with Python!
Watch Online The Complete Python Course | Learn Python by Doing
# | Title | Duration |
---|---|---|
1 | Welcome to this course! | 02:29 |
2 | Overview of the course curriculum | 02:49 |
3 | Our Python coding environment | 02:29 |
4 | Writing our first code! Variables and printing | 04:06 |
5 | Community & Support | 06:01 |
6 | Numbers in Python | 03:11 |
7 | Calculating the remainder of a division | 04:10 |
8 | Information before your first coding exercise | 00:57 |
9 | Python strings | 06:58 |
10 | Python string formatting | 07:09 |
11 | Getting user input in Python | 08:08 |
12 | Booleans and comparisons in Python | 04:27 |
13 | and & or in Python | 08:51 |
14 | Lists in Python | 08:06 |
15 | Tuples in Python | 05:30 |
16 | Sets in Python | 02:46 |
17 | Advanced set operations | 04:52 |
18 | Python dictionaries | 07:47 |
19 | Length and sum | 02:48 |
20 | Joining a list | 02:05 |
21 | If statements in Python | 12:22 |
22 | While loops in Python | 06:15 |
23 | For loops in Python | 07:28 |
24 | Destructuring syntax | 03:20 |
25 | Iterating over dictionaries | 02:30 |
26 | Break and continue | 04:12 |
27 | The else keyword with loops | 03:49 |
28 | Finding prime numbers with for loops | 05:36 |
29 | List slicing in Python | 04:03 |
30 | List comprehension in Python | 09:03 |
31 | Comprehensions with conditionals | 06:17 |
32 | Set and dictionary comprehensions | 05:08 |
33 | The zip function | 02:43 |
34 | The enumerate function | 04:44 |
35 | Functions in Python | 04:11 |
36 | Arguments and parameters | 10:16 |
37 | Functions and return values in Python | 09:26 |
38 | Default parameter values | 07:27 |
39 | Lambda functions in Python | 06:09 |
40 | First-class functions in Python | 10:20 |
41 | Installing Python in your computer | 02:19 |
42 | Installing PyCharm in your computer | 02:57 |
43 | Creating our first PyCharm project | 05:46 |
44 | Setting up PyCharm font and display settings | 02:45 |
45 | Milestone Project Brief | 07:28 |
46 | Milestone Project Implementation Video | 11:34 |
47 | Intro to Object-Oriented Programming with Python | 17:03 |
48 | More about classes and objects | 09:18 |
49 | Parameter naming in Python | 03:55 |
50 | Magic methods in Python | 12:58 |
51 | Inheritance in Python | 08:46 |
52 | The @property decorator | 04:20 |
53 | @classmethod and @staticmethod in Python | 07:28 |
54 | More @classmethod and @staticmethod examples | 12:07 |
55 | Intro to errors in Python | 13:14 |
56 | Built in errors in Python | 17:59 |
57 | Raising errors in Python | 10:59 |
58 | Creating our own errors in Python | 13:43 |
59 | Dealing with Python errors | 09:01 |
60 | The on success block and re-raising exceptions | 11:22 |
61 | Handling those pesky user errors! | 14:56 |
62 | Debugging with Pycharm | 16:38 |
63 | Files in Python | 10:56 |
64 | Python Exercise: copying files | 20:39 |
65 | CSV files with Python | 09:36 |
66 | JSON files with Python | 17:34 |
67 | Using the with syntax in Python | 05:02 |
68 | Importing our own files | 10:29 |
69 | Python relative imports: children | 15:19 |
70 | Python relative imports: parents | 05:45 |
71 | Import errors and running as a Python script | 05:27 |
72 | Intro to Milestone Project 2 | 05:54 |
73 | Milestone Project with lists | 17:53 |
74 | Storing books in files | 19:31 |
75 | Using JSON instead of CSV | 09:59 |
76 | Intro to databases with Python | 07:04 |
77 | Using SQLite in Python | 02:38 |
78 | Some database jargon | 04:09 |
79 | Creating our books table using Python | 05:50 |
80 | Inserting books using Python | 06:20 |
81 | SELECT examples | 03:13 |
82 | Getting all our books | 06:31 |
83 | UPDATE and DELETE | 02:15 |
84 | Filtering with WHERE | 05:00 |
85 | Finishing the Milestone Project | 07:47 |
86 | Ordering and limiting | 02:38 |
87 | Developing our context manager in Python | 10:12 |
88 | Errors in context managers | 06:56 |
89 | Typing in Python | 12:11 |
90 | Further reading | 01:45 |
91 | Generators in Python | 12:40 |
92 | Python generator classes and iterators | 08:16 |
93 | Iterables in Python | 07:49 |
94 | The filter() function in Python | 08:44 |
95 | The map() function in Python | 05:40 |
96 | any() and all() in Python | 05:00 |
97 | Mutability in Python | 11:50 |
98 | Argument mutability in Python | 12:17 |
99 | Default values for parameters | 05:04 |
100 | Mutable default arguments (bad idea) | 06:39 |
101 | Argument unpacking in Python | 11:17 |
102 | Queues in Python | 03:21 |
103 | Some interesting Python collections | 25:56 |
104 | Timezones | 08:47 |
105 | Dates and time in Python | 12:47 |
106 | Timing your code with Python | 12:33 |
107 | Regular expressions | 08:29 |
108 | Regex examples | 13:37 |
109 | Regex in Python | 13:08 |
110 | Introduction to logging in Python | 10:36 |
111 | Logging to a file and other features | 04:17 |
112 | Higher-order functions in Python | 09:38 |
113 | Markup Languages: The Structure of HTML Code | 07:33 |
114 | Understanding HTML with BeautifulSoup | 18:45 |
115 | More complex HTML parsing | 22:19 |
116 | Structuring our parsing program better | 05:41 |
117 | Splitting HTML locators out of our Python class | 04:04 |
118 | Understanding HTML with the browser | 06:36 |
119 | Scraping our first website with Python | 06:43 |
120 | Milestone Project 3: A Quote Scraper | 04:14 |
121 | Quotes Project 2: Structuring a scraping app in Python | 02:42 |
122 | Quotes Project 3: Getting our locators | 05:10 |
123 | Quotes Project 4: Crafting our quote parser | 04:52 |
124 | Quotes Project 5: The quotes page | 04:31 |
125 | Quotes Project 6: Recap of the project | 03:55 |
126 | Milestone Project 4: A Book Scraper + application | 05:02 |
127 | Books Project 2: Recap of HTML locators | 04:54 |
128 | Books Project 3: Creating locators in Python | 04:27 |
129 | Books Project 4: Creating our page | 03:28 |
130 | Books Project 5: Creating our book parser | 11:02 |
131 | Books Project 6: Writing our app file | 03:56 |
132 | Books Project 7: Sorting the books | 08:51 |
133 | Books Project 8: Constructing our menu | 06:03 |
134 | ASIDE: The best way to write user menus | 01:29 |
135 | Books Project 9: Getting multiple pages | 02:38 |
136 | Books Project 10: Multiple pages in Python | 05:27 |
137 | Books Project 11: Getting the page count in Python | 06:34 |
138 | Books Project 12: Adding logging to our Python project | 20:29 |
139 | A word on scraping pages with JavaScript | 03:15 |
140 | Introduction to this section | 01:39 |
141 | Review of our quotes scraping code | 05:02 |
142 | Downloading chromedriver | 02:01 |
143 | Using Chrome in our scraping code | 06:27 |
144 | Our new page locators | 03:45 |
145 | Interacting with dropdowns | 04:08 |
146 | Selecting tags | 05:18 |
147 | Searching for quotes | 02:18 |
148 | Encapsulating logic more simply | 05:04 |
149 | Adding some error handling | 01:40 |
150 | Implicit and explicit waits in Selenium | 06:50 |
151 | Adding waits to our program code | 07:05 |
152 | The Dining Philosophers Problem | 07:39 |
153 | Processes and threads | 09:25 |
154 | The Python GIL | 10:31 |
155 | Example: threads in Python | 12:41 |
156 | Using Python concurrent.futures: the ThreadPoolExecutor | 03:09 |
157 | Don't kill threads! | 01:49 |
158 | Multiprocessing in Python | 07:25 |
159 | Using Python concurrent.futures: the ProcessPoolExecutor | 02:16 |
160 | Dealing with shared state in threads | 08:32 |
161 | Queuing in threads with shared state | 12:26 |
162 | Using Python generators instead of threads | 04:51 |
163 | Our first single-threaded task scheduler in Python | 06:05 |
164 | Yielding from another iterator in Python | 05:37 |
165 | Receiving data through yield | 09:35 |
166 | The async and await keywords | 06:11 |
167 | Watch these talks for more explanations and examples! | 01:53 |
168 | Our asynchronous scraper | 04:43 |
169 | Making our first async request in Python | 14:50 |
170 | Getting multiple pages efficiently | 10:24 |
171 | Using async_timeout for security | 01:47 |
172 | Turning our book scraping project async | 10:17 |
173 | A note on HTTPS with Python and Mac OS X | 03:13 |
174 | Running Python in the console | 08:50 |
175 | Terminal video: running Python | 05:51 |
176 | Terminal video: what is a virtualenv? | 10:44 |
177 | Terminal video: navigating the terminal and using virtualenv | 09:50 |
178 | Terminal video: using Pipenv | 09:39 |
179 | Terminal video: Pipenv and virtualenv | 04:06 |
180 | Setting up our project with Pipenv | 05:43 |
181 | Our first Flask endpoint | 07:38 |
182 | Returning information with Flask and Python | 04:56 |
183 | Rendering HTML with Flask and Python | 06:25 |
184 | Error pages and Jinja2 inheritance | 11:40 |
185 | Rendering forms with Flask and Python | 14:22 |
186 | Accessing POST form data with Flask | 04:49 |
187 | Putting our form in a single endpoint | 03:03 |
188 | Using Jinja2 for loops to create a nicer homepage | 07:58 |
189 | Adding navigation to our website | 04:55 |
190 | Signing up to OpenExchangeRates | 01:42 |
191 | Getting all exchange rates from the API | 05:31 |
192 | Creating a currency exchange library | 07:26 |
193 | Caching functions with functools | 04:50 |
194 | TTL caches with cachetools | 02:05 |
195 | A simple decorator in Python | 06:08 |
196 | Using a @syntax | 03:24 |
197 | Functools wraps in Python | 01:56 |
198 | Decorating functions with parameters | 04:57 |
199 | Decorators with parameters | 09:51 |
200 | Functions that accept multiple arguments | 05:30 |
201 | Generic decorators for any function | 03:55 |
202 | Intro to multiple inheritance with Python | 13:24 |
203 | Intro to ABCs in Python | 08:07 |
204 | The usefulness of ABCs | 03:21 |
205 | The relationship between ABCs and interfaces | 06:50 |
206 | The property setter in Python | 11:09 |
207 | Setting up Tkinter | 02:48 |
208 | Hello world in Tkinter | 07:38 |
209 | Labels and fields | 05:23 |
210 | Packing components | 11:58 |
211 | Using frames for different layouts | 03:42 |
212 | Starting our text editor project | 00:57 |
213 | Tkinter notebooks and creating files | 03:33 |
214 | Adding a menu to our application | 04:13 |
215 | Saving files to disk | 08:00 |
216 | Opening files | 04:20 |
217 | Binding shortcuts in Tkinter | 04:43 |
218 | Checking our tabs for unsaved changes | 08:18 |
219 | Confirming exit with unsaved changes | 04:25 |
220 | Closing individual tabs | 05:22 |
221 | Adding another menu | 01:56 |
222 | Adding a permanent scrollbar to our text area | 04:23 |
223 | Introduction to this section | 02:54 |
224 | Testing functions | 07:27 |
225 | Testing for errors | 02:38 |
226 | Testing our multiplication function | 09:09 |
227 | Writing a printer class for testing | 02:00 |
228 | Testing classes | 04:45 |
229 | More Printer tests | 09:27 |
230 | Testing external libraries | 09:54 |
231 | Conclusion of this section | 00:59 |
232 | Presentation: queues, stacks, and complexity | 09:41 |
233 | Presentation: binary search | 06:48 |
234 | Presentation: binary trees | 05:54 |
235 | Presentation: traversal of binary trees | 07:13 |
236 | Presentation: adding elements to a binary tree | 07:01 |
237 | Adding elements to a binary tree in Python | 10:59 |
238 | Recursion and inorder traversal in Python | 14:36 |
239 | Finding nodes in a tree with Python | 03:22 |
240 | How do you delete nodes from a binary tree? | 09:30 |
241 | Deleting nodes in code with Python | 14:12 |
242 | Deleting nodes with two children in code | 18:45 |
243 | Testing our binary tree! | 02:38 |
244 | Python libraries overview | 16:36 |
245 | Using pylint | 12:41 |
246 | Using yapf | 07:43 |
247 | Sending e-mails with smtplib | 07:36 |
248 | Sending e-mails with Mailgun | 09:54 |
249 | Creating a re-usable Mailgun library | 07:12 |
250 | Sneak peek: my IDE setup! | 09:31 |
251 | Variables in Python | 08:27 |
252 | String formatting in Python | 06:27 |
253 | Getting user input | 05:17 |
254 | Lists, tuples, and sets | 06:32 |
255 | Advanced set operations | 04:40 |
256 | Booleans in Python | 05:00 |
257 | If statements in Python | 08:18 |
258 | The in keyword | 02:03 |
259 | If statements with the 'in' keyword | 08:19 |
260 | Loops in Python | 11:08 |
261 | List comprehensions | 07:25 |
262 | Dictionaries | 08:32 |
263 | Destructuring variables | 08:29 |
264 | Functions in Python | 10:42 |
265 | Function arguments and parameters | 07:41 |
266 | Default parameter values | 03:55 |
267 | Functions returning values | 07:20 |
268 | Lambda functions in Python | 07:53 |
269 | Dictionary comprehensions | 04:02 |
270 | Unpacking arguments | 10:25 |
271 | Unpacking keyword arguments | 08:45 |
272 | Object-Oriented Programming in Python | 15:53 |
273 | Magic methods: __str__ and __repr__ | 06:26 |
274 | Class methods and static methods | 14:04 |
275 | Class inheritance | 08:33 |
276 | Class composition | 06:09 |
277 | Type hinting | 05:09 |
278 | How imports work in Python | 09:34 |
279 | Relative imports in Python | 08:53 |
280 | Errors in Python | 12:48 |
281 | Custom error classes | 05:05 |
282 | First-class functions | 07:53 |
283 | Simple decorators in Python | 07:13 |
284 | The 'at' syntax for decorators | 03:34 |
285 | Decorating functions with parameters | 02:25 |
286 | Decorators with parameters | 04:51 |
287 | Mutability in Python | 06:04 |
288 | Mutable default parameters (and why they're a bad idea) | 04:28 |
289 | Thank you for taking the course | 00:51 |