- Notifications
You must be signed in to change notification settings - Fork 54
Description
Overall, I worked my way through every file up through the end of the second module; I essentially read everything and tried out all of the examples and reading comprehension questions on my own. I thought the formatting was very elegant, resulting in a "walk-through" that flowed really well. I am going to include general feedback on things I thought could possibly be added in certain sections, suggestions of wording/proofreading, and my opinions on things I found to be very useful inclusions. Finally, if you would be interested in me also reading through and giving feedback on other modules or need help with anything else like content creating or writing reading comprehension questions I would be happy to!
P.S - The titles for sections will be the Jupyter notebook file names. Also, excuse my poor grammar at times, a lot of these were just notes written to myself as I went along
Intro
What this isn't
In the first line, I believe it should be "This is not even close to being an exhaustive treatment of the python language. Currently, there is no "an" there.
Overall, this was a good introduction and was very convincing on why this site will have certain benefits over, say, buying a book
Module 1
Site Formatting
In line 9, above the code that states "x = 1", the text says "the following code assigns the variable x to the integer 1". I believe that this should be "the following code assigns integer 1 to the variable x
My overall impression was that, yes, this is important to have in the beginning; however, this might overwhelm a beginner that doesn't even have python installed yet. Perhaps a disclaimer at the top would be nice saying something along the lines of, do not worry if you don't know what any of this means yet, this is just to provide you with an idea of the layout from here on out.
Getting Started With Python
The links in the section were a nice touch. Also, it was smart to have the readers hold back from jumping the gun and downloading python on their own as there is a nice tutorial for it in soon after
Getting Started With IDEs
While IDEs are nice, maybe give the reader the pros and cons of text editors over vim since I know there are people on both sides of the spectrum in regards to which is better for growing as a programmer
Module 2
Basic Objects
Maybe introduce the shorthand operations of +=, -=, etc.
These are very nice to use, and even come up in examples later on without any real formal introduction
Maybe introduce bitwise operators here? I could see these as being maybe extraneous for the purpose of this guide, but it might prevent any confusion from arising later on between logical and, and bitwise and for example.
I thought that the exercises in this module were very good because they provoke the reader to actually go and look at some of the documentation.
Finally, towards the end where the string exercise solutions are presented, the question was "Convert the integer 12 to the string 12". But, the solution was "str(11)", which I believe should be "str(12)"
Conditional Statements
Maybe make it clearer that you can have multiple if-statements in a row that will all execute as long as they are true, but with an if and elif statements, only one of them will execute. This sort of was hinted at by reading the comments in the coding examples but I don't recall it being that straightforward.
For example, the code below would produce "1st2nd"
x = 10
if (x > 2): print("1st")
if (x > 5): print("2nd)
While the next lines of code would just produce "1st"
x = 10
if (x > 2): print("1st")
elif (x > 5): print("2nd)
Data Structures
Deques and sets both sort of get mentioned without a ton of explanation. They both get talked about more in depth in later sections within module 2 so it might be nice to give a link to where they are discussed further just so no one gets confused.
Sequence Types
Towards the end in "Reading Comprehension, General Understanding", I believe there is a mistake in the solution. The question says to interpret the second half of a list as (n+1)/2 if odd and n/2 if even, BUT, the solution interprets half of a list as (n-1)/2 instead of (n+1)/2.
To fix this, I think the solution should be (len(x)+1) // 2 instead of len(x)//2
Data Structures II
Under the section "What can a dictionary store", it might be good to let the readers know that it isn't usually a good idea to use a float as a key like you did in one of the examples since the computer doesn't always store their exact values. This is kind of the same problem when testing to see if a float is equal to a certain number.
Frozen Sets were briefly mentioned here, but not talked about until a later section I think (the order in the notebook is alphabetical so I'm not actually sure of the true order). But, if this section comes before the one where frozen sets are talked about more extensively, again, maybe include a reference link to that spot.
Finally, I think it was a nice touch to mention ordered dics and why they should still be used for safety despite the new python updates.
Data Structures III
Names Tuples were very interesting. I personally did not know about these, and the example showcasing their utility was very practical as well. Overall, I really liked this module and felt like it is one of the more useful ones to someone already decently familiar with python.
Functions
Perhaps mention **kwargs since you already mentioned *args already.
Generators and Comprehensions
The memory consumption pic didn't show up in the notebook, but I'm not sure if this was something on my end and maybe not a problem on the website version.
Introduction (Control Flow)
There was a note of there being a more efficient way of finding all numbers divisible by three, it might be nice to provide this somewhere?
Scope
Maybe say that variables within a file scope are basically view only within a function. But, you can define the variable as global towards the beginning of the function to enable it to change.
Ex-
x = 10
def numberChange(numb):
global x
x += numb
return x
In [ ]: numberChange(5)
Out[ ]: 15
This would generate "local variable 'x' referenced before assignment" without the statement "global x"