so this is going to be a big wall of text and it's just the tip of the adviceberg, but:
The books may expect you to know basic CS concepts, but imo that's a good thing. Treat it as a sort of puzzle, or like you're trying to track down a piece of information for something you care about, but is kinda niche.
Write down what you don't understand when you encounter it.
Skim the rest of the section noting down other parts you don't understand yet.
then Google search those questions, read the answers, write down what you don't understand, read the chapter again, repeat. Don't worry, you're smart enough, and if you don't understand something it just means you need to figure out how to break it apart into problems you can solve (even if that just means "figure out what name I need to Google to learn more" is the smaller piece )
after awhile you can move to doing chapters this way, then books.
which book doesn't really matter.
the dirty secret is that this field, and everything else, but especially this field of computing, boils down to 3 things: learning, problem solving, and then communicating those solutions to a computer or someone else, along with the how and why.
your notes pictured above look like you're focusing a lot on specific details of the internals of the language. but in my opinion and experience, if you learn more of the language, and start reading and writing more of it, those will come naturally and if not, be easy to practice.
knowing a list exists is important, knowing how to write one less so, at least at the beginning. Think about and note concepts and uses, if you don't memorize it automatically through use, it'll be easier later.
otherwise you can google "list in python" "what are the numbers inside the list called" "list slices python" "how to read a file python" etc. or use something like learnXinYminutes.com to find that language element and what it's called and then search those.
try not to let the small stuff like that slow you down at first. it's learned better through use.
the thing about functions and returns is that there's a few ways to think of them.
functions are keywords that when called, take whatever's optionally within the parentheses, (called "parameters" in function definitions, and "arguments" when being called, but people will understand if you use them interchangeably), they take the values between their parentheses and pass them on to the body of the function, which then runs on them, and "replaces" the instance of that function with the return value.
that is, addTwo(1, 9) and 10 can be read the same way (I'm simplifying here a lot), as can addTwo(x, y) and x+y.
addTwo just looks like this:
def addTwo(first, second):
sum = first + second
return sum
though most people would just return first + second and otherwise not have a function body.
so the running program would be
def addTwo(first, second)
return first + second
def main(): #parameters are optional
result = addTwo(first, second
main() #since this isn't indented, it gets run and isn't part of the above definitions
if it doesn't work put this at the bottom and just ignore the magic for now. __, that is, two underscores, is known as "dunder" in python if you're searching it, double underscore. in general you shouldn't worry about these until you're already good with the basics
if __name__ == "__main__":
main ()