From 6aa0f6bd6799fb547c74a27cbcf40e933a809ceb Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Sun, 18 Oct 2020 17:32:06 -0700 Subject: [PATCH 01/27] lots of new text in the gitHub classroom page! --- source/modules/Py2vsPy3.rst | 4 +- .../01-setting_up/feature_branching.rst | 3 + source/topics/01-setting_up/git.rst | 2 +- source/topics/01-setting_up/git_hints.rst | 29 +-- .../topics/01-setting_up/github_classroom.rst | 233 ++++++++++++++++-- .../images/githubclassroom/clone_url.png | Bin 0 -> 20036 bytes .../images/githubclassroom/code_button.png | Bin 0 -> 29376 bytes .../images/githubclassroom/compare_and_pr.png | Bin 0 -> 18922 bytes source/topics/01-setting_up/index.rst | 2 +- .../01-setting_up/python_and_core_tools.rst | 4 +- source/topics/01-setting_up/virtualenv.rst | 7 + source/topics/01-setting_up/windows_bash.rst | 25 +- 12 files changed, 257 insertions(+), 52 deletions(-) create mode 100644 source/topics/01-setting_up/images/githubclassroom/clone_url.png create mode 100644 source/topics/01-setting_up/images/githubclassroom/code_button.png create mode 100644 source/topics/01-setting_up/images/githubclassroom/compare_and_pr.png diff --git a/source/modules/Py2vsPy3.rst b/source/modules/Py2vsPy3.rst index 555b38d..0c1241d 100644 --- a/source/modules/Py2vsPy3.rst +++ b/source/modules/Py2vsPy3.rst @@ -4,8 +4,9 @@ Python 2 versus Python 3 ######################## +now that Python version 2 has officially reached end of life, most recent information is in/about Python 3. -Much of the example code you'll find online is Python2, rather than Python3 +But you will still find a lot of older example code online in Python2, rather than Python3 For the most part, they are the same -- so you can use those examples to learn from. @@ -98,4 +99,3 @@ Most of the other differences are essentially implementation details, like getti There are also a few syntax differences with more advanced topics: Exceptions, ``super()``, etc. -We'll talk about all that when we cover those topics as well. diff --git a/source/topics/01-setting_up/feature_branching.rst b/source/topics/01-setting_up/feature_branching.rst index 4b9ae68..922bacf 100644 --- a/source/topics/01-setting_up/feature_branching.rst +++ b/source/topics/01-setting_up/feature_branching.rst @@ -2,6 +2,9 @@ Feature Branching ***************** +.. note:: Feature branching is an important topic, but not one you need to know about right off -- if you are brand new to git -- feel free to ignore this, with gitHub classroom, it should handle it for you. + + Why use Feature Branches? ========================= diff --git a/source/topics/01-setting_up/git.rst b/source/topics/01-setting_up/git.rst index b18012f..5e03d19 100644 --- a/source/topics/01-setting_up/git.rst +++ b/source/topics/01-setting_up/git.rst @@ -10,5 +10,5 @@ Git is a very powerful and useful tool. We only use a few of its features for th intro_to_git github_classroom git_overview - feature_branching git_hints + feature_branching diff --git a/source/topics/01-setting_up/git_hints.rst b/source/topics/01-setting_up/git_hints.rst index 7221e9c..c0ab706 100644 --- a/source/topics/01-setting_up/git_hints.rst +++ b/source/topics/01-setting_up/git_hints.rst @@ -8,7 +8,10 @@ git is a very complex system, and can be used in many ways. Because of this, it Every group using git has to establish a standard "work flow". If you google "git workflow" you find a LOT of discussion, and they are not all the same. And depending on the workflow you are using, the problems you'll have and the solutions to them will be different. -We are using a very simplified workflow for this class, and this page seeks to provide solutions to problems that you might encounter specifically with this workflow. +We are using a very simplified workflow with gitHub classroom for this class, and this page seeks to provide solutions to problems that you might encounter specifically with this workflow. + +.. note:: This is a page for reference. It is a bit outdated, and should not be required right off. But do remember that it's here if you get tangled up in git as we move along. + "origin" and "upstream" ======================= @@ -33,27 +36,18 @@ After cloning a repository (from gitHub, for instance) on your machine, is will so I have one remote repository, on gitHub. It is listed twice, as I am both fetching from (pulling) and pushing to the same repository. "origin" is created when you do a clone, and it is the one that is pushed to and pulled from by default. git is so flexible that you could set it up to push and pull be default to two different repos, but I've never seen that done. -In case of the PythonCertclass, we need *another* remote repository: - -There is the central class repository, which only the instructors have permissions to change. But you want to be able to get updated materials from that repository as well. Since this repo is the one your personal repo was "forked" from, the convention is to call it the "upstream" repository. You should have set that up with a command like this: - -.. code-block:: bash +There is often use for having more than one remote repository, to keep various workflows in sync. But with gitHub classroom, you will have one: the "origin" remote that was created when you cloned your gitHub repo. - $ git remote add upstream https://github.com/UWPCE-PythonCert-ClassRepos/Sp2018-Accelerated.git +Adding a remote +--------------- -And it should look something like this when you check your remotes: +If you do need to add a remote, you it's pretty easy: .. code-block:: bash - $ git remote -v - origin https://github.com/PythonCHB/Sp2018-Accelerated.git (fetch) - origin https://github.com/PythonCHB/Sp2018-Accelerated.git (push) - upstream https://github.com/UWPCE-PythonCert-ClassRepos/Sp2018-Accelerated.git (fetch) - upstream https://github.com/UWPCE-PythonCert-ClassRepos/Sp2018-Accelerated.git (push) - -So I now have two more remotes, one for pushing and one for pulling (fetching). + git remote add name_of_remote https://the_long_url_to_the_remote_repo.git -Do this now on your own machine, and make sure that "origin" points to your repo on gitHub, and "upstream" is pointed to the one in the "UWPCE-PythonCert-ClassRepos" gitHub organization. +"upstream" is a common name for antoher remote you need to talk to. Changing a remote ----------------- @@ -66,9 +60,8 @@ If your remotes are not set up right, you can reset them, but removing one: and then adding it back correctly: - $ git remote add upstream https://github.com/UWPCE-PythonCert-ClassRepos/Sp2018-Accelerated.git + $ git remote add upstream https://the_long_url_to_the_remote_repo.git -**make sure to adjust that command for your particular class!** Working with "upstream" ----------------------- diff --git a/source/topics/01-setting_up/github_classroom.rst b/source/topics/01-setting_up/github_classroom.rst index 03162cd..b503d24 100644 --- a/source/topics/01-setting_up/github_classroom.rst +++ b/source/topics/01-setting_up/github_classroom.rst @@ -24,13 +24,14 @@ A software development project is all about continuous improvement: Steps 3-4 will be repeated multiple times until the development team (which could even be a single developer) deems it is ready for release. -In this course, you will not only learn about Python but also about the development process that most Python projects go through. GitHub Classroom allows for the steps indicated above to be completed in an academic environment. +In this course, you will not only learn about Python but also about the development process that most Python projects (and virtually any other programming language) go through. GitHub Classroom allows for the steps indicated above to be completed in an academic environment. -Initial setup + +Initial Setup ============= You will need an account on GitHub to participate in this course. -If you don't have already have a GitHub account or if you would prefer to create a new one for this course, make sure you setup a new account on `GitHub `_. Always keep in mind that your account name will be part of the private repositories that will be created for each of your assignments and it will be visible to both your instructors and your classmates. +If you don't have already have a GitHub account or if you would prefer to create a new one for this course, make sure you setup a new account on `GitHub `_. Always keep in mind that your account name will be part of the private repositories that will be created for each of your assignments and it will be visible to both your instructors and your classmates. Make sure you let your instructors know what your github handle is -- it's not always obvious! You will need to have git setup on the computer you will use for developing your code for this course. You can find instructions for setting up git (and the rest of your development environment) here: @@ -39,20 +40,22 @@ You can find instructions for setting up git (and the rest of your development e Once you have all the tools set up, you will need to create a folder (directory) within your development system for keeping your work. This is the folder where all your assignment repositories will reside. It will be helpful to keep them all together in one place. +This folder (directory) should be somewhere in your "user" or "home" directory. -Accepting an assignment -======================= +Accepting an Assignment +----------------------- -Each assignment page will contain a section named "Accepting your Assignment". Click on the corresponding link, which will take you to GitHub Classroom to accept the corresponding assignment. +On each assignment page there should be a link to the assignment on gitHub classroom. Click on this link, and it should take you to gitHub classroom, and allow you to "Accept this Assignment". +.. note:: The first time you accept an assignment, gitHub will "invite" you to join the class organization. You will need to click the link to accept the invitation. Once you have done that the first time, you shouldn't need to do it again. -Some things to consider: ------------------------- +Some Things to Consider +....................... * You will need to accept each assignment separately. -* Accepting an assignment will trigger the creation of a private repository for you to work on your assignment. +* Accepting an assignment will trigger the creation of a new gitHub repository for you to work on your assignment. That repository will be in your gitHub account. By default it is "private", so that only you and the instructors will be able to see it. * This repository is only assigned to you. @@ -60,22 +63,201 @@ Some things to consider: * The name of the new repository will include your GitHub user name at the end. -Once your repository has been created, go to its link and clone it on your development system, under the folder you selected for this purpose. +Once your repository has been created, go to its link (provided by gitHub) and clone it on your development system, under the folder you selected for this purpose. Here: `Cloning a repo `_ is GitHub's official guide on how to clone a repository. -Before You Start Working on your Assignment -=========================================== -Once your repository is setup, it's good to get familiar with your repository view. -You should see a tab there called "Pull Requests": they indicate code changes that are desired to be pulled into a main repository. -By default you should see one already there called "Feedback". Go ahead and click on it, and take a look at "Files Changed" tab - as of now it should show "No changes to show". As you start committing your code you will see your changes there. +.. _github_classroom_workflow: + +GitHub Classroom Assignment Workflow +==================================== + +The following is the workflow you will need to follow for each individual assignment. + + +Accept the Assignment +--------------------- + +The first step is to click on the link for the assignment in your LMS (Canvas or Edx) -- that will take you to gitHub classroom, where you can accept the assignment. + +When you accept, gitHub will create a new repository for the assignment, in your gitHub account. + + +Clone the Repo +-------------- + +Once the repository has been created on gitHUb, you need to make a copy, or "clone" of it on your local workstation, where you will be writing your code. + +To Clone: +......... + +1) Click on the "Code" button: + +.. image:: images/githubclassroom/code_button.png +.. :width: 600 + +2) Copy the "https: " url that shows up -- you can click the little clipboard icon to copy -- or highlight and copy the url + +.. image:: images/githubclassroom/clone_url.png +.. :width: 600 + +3) Go to your command line in the terminal application (Terminal, git Bash, CMD prompt, etc). Make sure you are "in" the directory that you have set up for this class. ``ls``, ``dir`` and ``pwd`` can be helpful to make sure. + +4) Clone the repo + +:: + + git clone https://github.com/UWPCE-Py310-Fall2020/the_assignment_url.git +(you should be able to type ``git clone`` and then paste the url you copied from gitHub) + +This will create a new directory for the repository, named by the assignment and your giHub handle -- this is where you will put all the work for that assignment. + +5) Start working + +:: + + cd the_name_of_the_assignment_repo + +6) Create a new branch for your work and "check it out" + +:: + + git checkout -b develop + +After that command, git will be "in" the develop branch -- anything you change will only be reflected in that branch. + +.. note:: A git "branch" is an independent "part" of a repo where you can write and change code, create and delete files, etc, and it will be kept separate from the main code. When you are happy with this version, it can be merged into the main branch. For the purposed of this course, it will not be merged into the main branch until it has been reviewed, and both you and your instructors think its done. + +7) Check the git status + +:: + + $ git status + On branch develop + nothing to commit, working tree clean + +That lets you know that you are on the develop branch, and that you haven't made any changes to your files (the "working tree" is the dir and files on your machine) + +8) Add some files. Create a new file or files for the assignment with your text editor. Once they are there, it's a good idea to add them before you do much work on them, but you can add them at any time. + +:: + + git add a_new_file.py + +You can also add all the files in the directory with:: + + git add . + +But be careful -- only do that if you really want everything added to git. + +9) Commit your work. When you have gotten to a good "pause point" in your work -- the first feature works, or you need help from the instructors, etc, you can "commit" the current state of your project. It's a good idea to check the status first. + +:: + + $ git status + On branch develop + Changes to be committed: + (use "git restore --staged ..." to unstage) + new file: a_simple_script.py + new file: another_file.py + new file: install_test.py + + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: install_test.py + +note that in this case, I edited the ``install_test.py`` file after adding it. When you edit a file, git will not track those changes unless you tell it to, which you can to by calling ``git add`` again. So ``git add`` tells git that you want it to keep track of that file -- called "staging for commit":: + + $ git add install_test.py + + $ git status + On branch develop + Changes to be committed: + (use "git restore --staged ..." to unstage) + new file: a_simple_script.py + new file: another_file.py + new file: install_test.py + +Note that after adding the file (again!) it is now ready to be committed:: + + git commit -m "adding the initial files" + +``-m`` means "message" -- you always need to provide a commit message. + +There is a trick to save a step -- you can ask git to commit all changes you've made since the last commit:: + + $ git commit -a -m "initial files added" + + [develop 4985f9d] initial files added + 3 files changed, 17 insertions(+) + create mode 100644 a_simple_script.py + create mode 100644 another_file.py + create mode 100644 install_test.py + +The ``-a`` means "all". Note that you still need to use ``git add`` to ask git to track a new file that it is not already managing. + +10) Push the changes to gitHub: All this adding and committing has only affected the repository on your own machine -- gitHub has not been changed. In order to get your changes up to gitHub you need to "push" them. It's always a good idea to check the status before you push -- to make sure you're ready. + +:: + + $ git status + On branch develop + nothing to commit, working tree clean + +Note that I am on the "develop" branch, which is what's wanted, and nothing new to commit -- all my changes have been committed -- it's time to push. + +:: + + $ git push + fatal: The current branch develop has no upstream branch. + To push the current branch and set the remote as upstream, use + + git push --set-upstream origin develop + +Hmm -- "fatal" -- I don't like the look of that! But it's pretty simple, really. git is telling you that it doesn't know where to push the code to -- your gitHub version of the repo doesn't have a develop branch. But it tells you want to do to create that branch on gitHub (origin), so do that: + +:: + + $ git push --set-upstream origin develop + Enumerating objects: 4, done. + Counting objects: 100% (4/4), done. + Delta compression using up to 4 threads + Compressing objects: 100% (3/3), done. + Writing objects: 100% (3/3), 639 bytes | 319.00 KiB/s, done. + Total 3 (delta 0), reused 0 (delta 0) + remote: + remote: Create a pull request for 'develop' on GitHub by visiting: + remote: https://github.com/UWPCE-Py310-Fall2020/initial-setup-PythonCHB/pull/new/develop + remote: + To https://github.com/UWPCE-Py310-Fall2020/initial-setup-PythonCHB.git + * [new branch] develop -> develop + Branch 'develop' set up to track remote branch 'develop' from 'origin'. + +So good -- now the local develop branch is hooked up to a develop branch on gitHub. And it even tells you what to do next -- see the "Create a pull request for 'develop' on GitHub by visiting:" -- that's exactly what you need to do! + +11) Make a Pull Request: A Pull Request (PR) is a request to "pull" the code you've just written into another branch -- usually the main branch. + In "real" development, this means that you have added a feature, or fixed a bug, and want that code to be deployed. But if you are not the primary developer, or if you work on a team, then the code may be need to be reviewed before it's merged into the production branch. + For this class, we are mimicking that workflow, but it is the instructors that will review your code. When the code has been reviewed, we mill "Merge" the PR into main, indicating that you have completed the assignment. + +Go to assignment gitHub repo in your browser. It should have a note that you have pushed a develop branch, and a button to click to create a PR: + +.. image:: images/githubclassroom/compare_and_pr.png + +Click that button to start making your PR! + + + + +General Advice for working with git +=================================== Committing your code -==================== +-------------------- A "commit" is snapshot of your code (and any other files included in your project). You are encouraged to make frequent commits, as this will make it easier for you to restore your code to an earlier state if things go wrong. @@ -88,9 +270,7 @@ Type the following to add all files and subdirectories in the folder to your com git add . -NOTE: this can be a bit dangerous, as it will add everything! It's usually a bit safer to specifically add the file(s) you want to add:: - - git add some_code.py +.. note:: Using the "." (dot) can be a bit dangerous, as it will add everything in that directory! It's usually a bit safer to specifically add the file(s) you want to add: ``git add some_code.py`` After adding the file(s), you can commit your code by typing the following:: @@ -98,7 +278,12 @@ After adding the file(s), you can commit your code by typing the following:: Note that the commit message should be replaced with something descriptive of what that commit includes ("added new functionality", "fixed floating point error", "ready for review", etc.) that will later help you remember what that particular commit was about. -After every change to the file, you will need to "commit" the changes. +After every change to the file, you will need to "commit" the changes. Keep in mind that git will not commit all the changes you have made, only the ones that are "staged for commit". You can stage them with the ``git add`` command again. So ``add`` means either "add this file" or "stage this file for committing", depending on whether it's already been added or not. + +Alternatively, you can tell git to commit any changes you have made, since the last commit, with the "-a" (all) flag:: + + git commit -a -m "your message" + You can always know what state git is in by using the "git status" command:: @@ -108,7 +293,7 @@ It's a good idea to do that before committing, so you know what will happen. Pushing Your Code -================= +----------------- "Pushing" refers to the process of synchronizing the commits you have made on your development system with your GitHub repository. This is an important process, since it is needed before you can submit your code for review. @@ -118,7 +303,7 @@ You can push your code immediately after every commit or do it once a day (in wh git push -The first time you push your code to a repository, GitHub will ask you to select the remote repository (i.e., your GitHub repository). Just copy the suggested push command (you will only need to do this once per assignment). +The first time you push your code to a repository, GitHub may ask you to select the remote repository (i.e., your GitHub repository). Just copy the suggested push command (you will only need to do this once per assignment). git will also ask you for your gitHUb username and password the first time -- it should remember them after that -- until you try on a new machine. @@ -126,7 +311,7 @@ Asking Coding Questions ======================= While working on your code, you might run into a situation in which you would like one of the instructors to look at it and provide some feedback before actually reviewing and grading it. -In order to do that, go to "Feedback" pull request and write a comment about your question or issue. You should make sure to tag your instructor in your comment, to assure that they are notified of your comment. This is done by writing `@the_instructors_github_handle`, e.g. `@natasha-aleksandrova`. +In order to do that, go to PR you've created and write a comment about your question or issue. You should make sure to tag your instructor in your comment, to assure that they are notified of your comment. This is done by writing `@the_instructors_github_handle`, e.g. `@natasha-aleksandrova`. For example:: @@ -136,7 +321,7 @@ When you submit a comment with a tag, the instructor will be notified by GitHub Submitting your assignment -========================== +-------------------------- Once your assignment is ready for review, copy the link of your Feedback pull request and submit it in the submission form. Here is an example of a submission link (yours will look a little different but will end with `/pull/1`):: diff --git a/source/topics/01-setting_up/images/githubclassroom/clone_url.png b/source/topics/01-setting_up/images/githubclassroom/clone_url.png new file mode 100644 index 0000000000000000000000000000000000000000..05763e86c6faa3f6438a4386320e9c2cf46cef99 GIT binary patch literal 20036 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 kdRGM|FDAK zD4wo~r{4(fWAp{*GiT2Qnk_ii=gN=YRP9DBXz-V#)j*dlX%bgSBV4$UJYVvdOwJJN zZWGx3Akm{oS6_31-8^yPgi3qu)Z;T12aOc*_|f2KRIfIrb@+NaepHw~9y?(ythQ~@ zgqHj|OOcc>H{xR^(J1^*YAsQt8gGe)CIpGb#OO>gD1kJ!AfNU}wS>ot6^mZIe5sN> zd&YTe{X)4QJ~njIGuG~PUL*u==r;spke;>a^_#aUH^NjomO79Zg8{_4)?qatsYn-p ziWPZV%|t*P@3F>>y4P>os>s`$_jH4}wV=N*U*eOJ0fKhG1d%6a4(igOE&cM-6h-3N zbcXuMlrBMQSxa8c<}_&ij)FCofjpzaBCNZ$l@~UwkzZqhuLe20&z#kPuxQbYdjKEF ze97fmUy<$0H|d?>qV6~DFZzrFvn6PnjnJF`vV#sx8GyZ@>+>(t=mc(Xf}moHCF+RHl>&^8bOZ0(-3%$(V>svlpS8r67_ zxS%2{XxPw#SMV+sn4n;;z&eE96@-Bdi^`EAMWzXpr>bV4oaKM6QJ5m#Wi~nF;IPDr z5~}uKR|?1k<_9g94PCu{-S$mi9crB4E|6a>xZUC{r}$1L%p)`B%%fsO3fU)Q9|jbV zHm;Mm^7!!+YT2PHVMhl9go8!-xZF1_RV!6s4A${AJf}=EI^24Oh7as;&p4ALi4$`j z`&HRk@4&TzxVq1rmEjmxfUgZ^Vwkx>3!go2p<@!|_ZAmTlvrm#UsCfL#Um%%I6Ykx zcfS!_pADP;QtevBCeTEDU&Q9Y*DASrzy&_~9)Th@fALZ(m_MI2nQ~*@q*1*(G->J# zr}vLF1J*LEYfaWTe{&nEfWP%B2>lt_uQ&A{HiDL}G^W`gqTz%4sglyBPOTR7ep|Fm z5oKLANyOt-{Cc(Dql0Xoso$)vN(Xx^Oeu~6O&Hoon@-)8HV(4JP5|r%(V{i4s+GzU z7UJ5m#;?sPNCQoE&}Th3?pvh|$K@LuYXP1lOQwv}q`~{txo1B$NZ`lYws{l&o~>*0 z>(S+7>dW@n6@RQzdD=E_tm;R<4;?*Djas!=)xJ}rnA#O|o)_pK(9Aw(TR0Z~Fc_d5 zEU3NTq_ygIr;l1G%@_-r1@q^n7HkRu=~!n!AS)1m!n^W z0Pi8Zmf$EbxAp1viMh^!#b4Yz&G`4@OzPIEP78QD>!0g3n)d}vIa;6?^zG4=cX0ho zrAicaY1Y!|{ox#mwO0E%YcTi9TD+c`S;KU72vZHQHODyVFtUxzJT0}gR;5QC+i~Uk zEy|MN^`~jtOoN-tQJ_V@R_h@JMcq;X~0u|b^GuvfU|m0esrFuV{mX3Xwcdm;TY$OKPcq@ zD=c(kFml#zU+Q<4_Wpwh6gN(sKuKKPXMqx00`Nc`W@ruGudN0j>{@}1TQ9U)k}9V! zxM0?X0q}Li-EYLz{oz<27OUg)@6y?9*)gprzcO!mG4OjTCoJMmoVh?Lk|t8WOZ+yC z!%%Y2p2$3#R>H~wey2k61|0HN5O|{zz`!(scP|~`nN|!Qm_g#h2ltg-CU5jrb>4U( zdFQxDs2~s_5Wq|nnsM@ENdwKmA_M>tpp(9myx8O;z)c}tj5r9u%;?P27;zAgo;o5R zyK5W~5x*cH2nYgxgn*E|A6-o8iXb2e2m+1>2+2DlB7Q+Y5D*0X2mv8^Kf0LG6+u7{ z5Cj|%5R!L9MErt)ARq|%5du-M9Va9O`**eIhia^0I*y-eqE~pd&z9ae84p86;vx(e z9)_|#S%~!bhcn0P7l4`Ni9-+&1Ox#=fTE^M5%@9u;KapB=EIkwi1c3;Q!2bc}GMo9%3A=d! O0000c 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 literal 0 HcmV?d00001 diff --git a/source/topics/01-setting_up/images/githubclassroom/compare_and_pr.png b/source/topics/01-setting_up/images/githubclassroom/compare_and_pr.png new file mode 100644 index 0000000000000000000000000000000000000000..ebb016b09d787454fb74fb904273767b90a349cc GIT binary patch literal 18922 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 mb*Vexw2eEeQyKd?|HykjKj|TI Date: Mon, 19 Oct 2020 00:14:41 -0700 Subject: [PATCH 02/27] finshed new gitHub classroom page --- .../topics/01-setting_up/github_classroom.rst | 219 +++++++++++++----- .../images/githubclassroom/clone_url.png | Bin 20036 -> 21564 bytes .../images/githubclassroom/code_button.png | Bin 29376 -> 31503 bytes .../images/githubclassroom/make_pr.png | Bin 0 -> 148016 bytes .../images/githubclassroom/pr_header.png | Bin 0 -> 74690 bytes 5 files changed, 164 insertions(+), 55 deletions(-) create mode 100644 source/topics/01-setting_up/images/githubclassroom/make_pr.png create mode 100644 source/topics/01-setting_up/images/githubclassroom/pr_header.png diff --git a/source/topics/01-setting_up/github_classroom.rst b/source/topics/01-setting_up/github_classroom.rst index b503d24..ec02e12 100644 --- a/source/topics/01-setting_up/github_classroom.rst +++ b/source/topics/01-setting_up/github_classroom.rst @@ -1,13 +1,13 @@ -.. _github_classroom: +.. _gitHub_classroom: ############################# -Working with GitHub Classroom +Working with gitHub Classroom ############################# -The Python Certificate program uses `GitHub Classroom `_ to manage the submission and review of your coding assignments. +The Python Certificate program uses `gitHub Classroom `_ to manage the submission and review of your coding assignments. -Why GitHub Classroom? +Why gitHub Classroom? ===================== A software development project is all about continuous improvement: @@ -24,14 +24,16 @@ A software development project is all about continuous improvement: Steps 3-4 will be repeated multiple times until the development team (which could even be a single developer) deems it is ready for release. -In this course, you will not only learn about Python but also about the development process that most Python projects (and virtually any other programming language) go through. GitHub Classroom allows for the steps indicated above to be completed in an academic environment. +In this course, you will not only learn about Python but also about the development process that most Python projects (and virtually any other programming language) go through. gitHub Classroom allows for the steps indicated above to be completed in an academic environment. + +In short: you will be using real professional tools and workflow when doing the work for this program. Be patient -- it is a lot to learn, but the goal is for you to learn useful skills, not to complete the coursework as easily as possible. Initial Setup ============= -You will need an account on GitHub to participate in this course. -If you don't have already have a GitHub account or if you would prefer to create a new one for this course, make sure you setup a new account on `GitHub `_. Always keep in mind that your account name will be part of the private repositories that will be created for each of your assignments and it will be visible to both your instructors and your classmates. Make sure you let your instructors know what your github handle is -- it's not always obvious! +You will need an account on gitHub to participate in this course. +If you don't already have a gitHub account, or if you would prefer to create a new one for this course, make sure you setup a new account on `gitHub `_. Always keep in mind that your account name will be part of the private repositories that will be created for each of your assignments and it will be visible to both your instructors and your classmates. Make sure you let your instructors know what your gitHub handle is -- it's not always obvious! You will need to have git setup on the computer you will use for developing your code for this course. You can find instructions for setting up git (and the rest of your development environment) here: @@ -61,52 +63,48 @@ Some Things to Consider * Any work you do there will not affect the work of your classmates. -* The name of the new repository will include your GitHub user name at the end. +* The name of the new repository will include your gitHub user name at the end. Once your repository has been created, go to its link (provided by gitHub) and clone it on your development system, under the folder you selected for this purpose. -Here: `Cloning a repo `_ -is GitHub's official guide on how to clone a repository. - +Here: `Cloning a repo `_ +is gitHub's official guide on how to clone a repository. +.. _gitHub_classroom_workflow: -.. _github_classroom_workflow: - -GitHub Classroom Assignment Workflow +gitHub Classroom Assignment Workflow ==================================== The following is the workflow you will need to follow for each individual assignment. -Accept the Assignment ---------------------- +1) Accept the Assignment +------------------------ The first step is to click on the link for the assignment in your LMS (Canvas or Edx) -- that will take you to gitHub classroom, where you can accept the assignment. -When you accept, gitHub will create a new repository for the assignment, in your gitHub account. +When you accept, gitHub will create a new repository for the assignment in your gitHub account. -Clone the Repo --------------- +2) Clone the Repo +----------------- -Once the repository has been created on gitHUb, you need to make a copy, or "clone" of it on your local workstation, where you will be writing your code. +Once the repository has been created on gitHub, you need to make a copy, or "clone" of it on your local workstation, where you will be writing your code. -To Clone: -......... -1) Click on the "Code" button: +a) Click on the "Code" button in gitHub: -.. image:: images/githubclassroom/code_button.png +.. image:: images/gitHubclassroom/code_button.png .. :width: 600 -2) Copy the "https: " url that shows up -- you can click the little clipboard icon to copy -- or highlight and copy the url +b) Copy the "https: " url that shows up -- you can click the little clipboard icon to copy -- or highlight and copy the url -.. image:: images/githubclassroom/clone_url.png +.. image:: images/gitHubclassroom/clone_url.png .. :width: 600 -3) Go to your command line in the terminal application (Terminal, git Bash, CMD prompt, etc). Make sure you are "in" the directory that you have set up for this class. ``ls``, ``dir`` and ``pwd`` can be helpful to make sure. +c) Go to your command line in the terminal application (Terminal, git bash, CMD prompt, etc). Make sure you are "in" the directory that you have set up for this class. ``ls``, ``dir`` and ``pwd`` can be helpful to make sure. -4) Clone the repo +d) Clone the repo :: @@ -114,15 +112,21 @@ To Clone: (you should be able to type ``git clone`` and then paste the url you copied from gitHub) -This will create a new directory for the repository, named by the assignment and your giHub handle -- this is where you will put all the work for that assignment. +This will create a new directory for the repository, named by the assignment and your gitHub handle -- this is where you will put all the work for that assignment. -5) Start working + +3) Create a develop branch for your work +---------------------------------------- + +Create and check out a new branch for your work. + +a) Change the working directory to the repo just created by the clone: :: cd the_name_of_the_assignment_repo -6) Create a new branch for your work and "check it out" +b) Make a new branch: :: @@ -130,9 +134,9 @@ This will create a new directory for the repository, named by the assignment and After that command, git will be "in" the develop branch -- anything you change will only be reflected in that branch. -.. note:: A git "branch" is an independent "part" of a repo where you can write and change code, create and delete files, etc, and it will be kept separate from the main code. When you are happy with this version, it can be merged into the main branch. For the purposed of this course, it will not be merged into the main branch until it has been reviewed, and both you and your instructors think its done. +.. note:: A git "branch" is an independent "version" of your code where you can write and change code, create and delete files, etc, and it will be kept separate from the main code. When you are happy with this version, it can be merged into the main branch. For the purposed of this course, it will not be merged into the main branch until it has been reviewed, and both you and your instructors think its done. -7) Check the git status +c) Check the git status :: @@ -142,7 +146,10 @@ After that command, git will be "in" the develop branch -- anything you change w That lets you know that you are on the develop branch, and that you haven't made any changes to your files (the "working tree" is the dir and files on your machine) -8) Add some files. Create a new file or files for the assignment with your text editor. Once they are there, it's a good idea to add them before you do much work on them, but you can add them at any time. +4) Start the Assignment +----------------------- + +a) Add some files. Create a new file or files for the assignment with your text editor. Once they are there, it's a good idea to add them before you do much work on them, but you can add them at any time. :: @@ -154,7 +161,7 @@ You can also add all the files in the directory with:: But be careful -- only do that if you really want everything added to git. -9) Commit your work. When you have gotten to a good "pause point" in your work -- the first feature works, or you need help from the instructors, etc, you can "commit" the current state of your project. It's a good idea to check the status first. +b) Commit your work. When you have gotten to a good "pause point" in your work: the first feature works, you need help from the instructors, etc, you can "commit" the current state of your project. It's a good idea to check the status first. :: @@ -171,7 +178,7 @@ But be careful -- only do that if you really want everything added to git. (use "git restore ..." to discard changes in working directory) modified: install_test.py -note that in this case, I edited the ``install_test.py`` file after adding it. When you edit a file, git will not track those changes unless you tell it to, which you can to by calling ``git add`` again. So ``git add`` tells git that you want it to keep track of that file -- called "staging for commit":: +note that in this case, I edited the ``install_test.py`` file after adding it. When you edit a file, git will not track those changes unless you tell it to, which you can do by running ``git add`` again. So ``git add`` tells git that you want it to keep track of that file -- called "staging for commit":: $ git add install_test.py @@ -183,6 +190,8 @@ note that in this case, I edited the ``install_test.py`` file after adding it. W new file: another_file.py new file: install_test.py +(there is no harm done running ``git add`` any number of times on the same file) + Note that after adding the file (again!) it is now ready to be committed:: git commit -m "adding the initial files" @@ -201,7 +210,11 @@ There is a trick to save a step -- you can ask git to commit all changes you've The ``-a`` means "all". Note that you still need to use ``git add`` to ask git to track a new file that it is not already managing. -10) Push the changes to gitHub: All this adding and committing has only affected the repository on your own machine -- gitHub has not been changed. In order to get your changes up to gitHub you need to "push" them. It's always a good idea to check the status before you push -- to make sure you're ready. +5) Push your work to gitHub +--------------------------- + +All this adding and committing has only affected the repository on your own machine -- gitHub has not been changed. +In order to get your changes up to gitHub you need to "push" them. It's always a good idea to check the status before you push -- to make sure you're ready. :: @@ -231,30 +244,126 @@ Hmm -- "fatal" -- I don't like the look of that! But it's pretty simple, really. Writing objects: 100% (3/3), 639 bytes | 319.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: - remote: Create a pull request for 'develop' on GitHub by visiting: + remote: Create a pull request for 'develop' on gitHub by visiting: remote: https://github.com/UWPCE-Py310-Fall2020/initial-setup-PythonCHB/pull/new/develop remote: To https://github.com/UWPCE-Py310-Fall2020/initial-setup-PythonCHB.git * [new branch] develop -> develop Branch 'develop' set up to track remote branch 'develop' from 'origin'. -So good -- now the local develop branch is hooked up to a develop branch on gitHub. And it even tells you what to do next -- see the "Create a pull request for 'develop' on GitHub by visiting:" -- that's exactly what you need to do! +Good -- now the local develop branch is hooked up to a develop branch on gitHub. And it even tells you what to do next -- see the "Create a pull request for 'develop' on gitHub by visiting:" -- that's exactly what you need to do! + +6) Complete the Assignment +-------------------------- + +Now it's time to write your code! As you work on it, make commits as you go along. Making a commit is essentially saving the state of your project -- so do it at each good "break point" -- when you have a feature working, or have fixed a bug. Do a ``git push`` every once in a while, to save your work to gitHub. + +.. note:: One of the really nice things about using gitHub for this (and your own work) is that now your work is all "in the cloud" -- you can make a clone on any other machine (say one at home and one at work), do work on that machine, push it to gitHub, and then retrieve it from somewhere else. If you want to get changes from gitHub that you don't have locally, you need to "pull" them (opposite of push): ``git pull`` should do it. + +7) Make a Pull Request +---------------------- + +When you are done with the assignment, or are at a state where you need some help, it's time to make a Pull Request (PR). +A PR is a request to "pull" the code you've just written into another branch -- usually the main branch. +In "real" development, this means that you have added a feature or fixed a bug, and want that code to be deployed. +But if you are not the primary developer, or if you work on a team, then the code may need to be reviewed before it's merged into the main branch. +For this class, we are mimicking that workflow, but it is the instructors that will review your code. When the code has been reviewed, we will "Merge" the PR into main, indicating that you have completed the assignment. + +You should make the PR when you have finished the assignment, or when you are stuck and need some help. In essence, the PR is a request for review. + +Go to the assignment gitHub repo in your browser. It should have a note that you have pushed a develop branch, and a button to click to create a PR: + +.. image:: images/gitHubclassroom/compare_and_pr.png + +Click the "compare and pull request" button to start making your PR! + +After you click that -- scroll down and you can see what has changed -- it will show you the files added or removed, and the individual lines that have changed in each file. Review that, to make sure the changes are what you expect. + +.. image:: images/gitHubclassroom/make_pr.png + +If so -- put a message in the "leave a comment box", and click "Create Pull Request". + +Note that this message is where you can start communicating with the instructors -- it should let them know why you are making the PR. +If you are all done with the assignment, say so. +If you are partially done, but have a question -- put your question in this comment box. + +Once you create the PR, gitHub will show you the PR view: + +.. image:: images/gitHubclassroom/pr_header.png + +This is the same view that your instructors will see. +If you click on the "conversation" tab, you can see your initial comment and any comments made after the initial PR creation. -11) Make a Pull Request: A Pull Request (PR) is a request to "pull" the code you've just written into another branch -- usually the main branch. - In "real" development, this means that you have added a feature, or fixed a bug, and want that code to be deployed. But if you are not the primary developer, or if you work on a team, then the code may be need to be reviewed before it's merged into the production branch. - For this class, we are mimicking that workflow, but it is the instructors that will review your code. When the code has been reviewed, we mill "Merge" the PR into main, indicating that you have completed the assignment. +If you click on the "files changed" tab, you will see all the changes in this PR. For this class, that should be your entire assignment. -Go to assignment gitHub repo in your browser. It should have a note that you have pushed a develop branch, and a button to click to create a PR: +Put a link to the PR in Canvas or EdX, to let us know that you have "turned in" the assignment. -.. image:: images/githubclassroom/compare_and_pr.png +8) Wait for review +------------------ -Click that button to start making your PR! +Once you make your PR, your instructors will be notified by gitHub (and Canvas), and will review your code. They can make general comments, or comment line by line. When a review is done, you should get an email form gitHub. But you can always go and check the PR yourself and see if anything new is there. +At this point, two things might happen. +* If the work is complete and well done, your instructors will make comments, and merge the PR. This is an indication that you are done. +* If there is still more room for improvement, then your instructors will leave the PR open, and wait for you to push more changes. -General Advice for working with git -=================================== + +14) Update your Code +-------------------- + +If the instructors request a change, or you just want to improve the code, you can make those changes, commit them, and push them to gitHub. +As long as the PR remains open, any new changes you push to the develop branch will show up in the PR. +Please ping your instructors if you have something new to review, by "tagging" them in a PR comment. +(you need to use their gitHub handle to tag them -- make sure you know what it is. +You can figure out what it is, because they will have been commenting on your PRs). You tag with a ``@`` symbol, like so: + +:: + + @PythonCHB: I've fixed that issue. Please review again. And I'm a little unclear on line 64 -- why doesn't ``name.upper()`` change the name? + +15) After the merge +------------------- + +When the assignment is complete and reviewed, your instructors will merge the PR. Then all that code will be in the "main" branch. If you do a ``git pull`` on your machine, and check out the main branch (``git checkout main``) you will see it there. + +16) Want to improve it after it's been accepted? +------------------------------------------------ + +If your instructors approve your code, and merge the PR, but you still want to work on it, do that work in the develop branch, and then push and make a new PR. + + +.. _gitHub_classroom_workflow_summary: + +Workflow Summary +================ + +I'm sure this seems like a lot, but it will get to be a habit, Here are the steps for each assignment: + + 1) Accept the assignment from the gitHub classroom link + + 2) Clone the resulting repo onto your work machine (``git clone``) + + 3) Make a develop branch (``git checkout -b develop``) + + 4) Do the assignment in the develop branch, committing and pushing as you go. (``git add``; ``git commit -a -m "a message"``; ``git push``) + + 5) When complete or when you would like some help, make a PR on gitHub, and post a link to the PR in the LMS (Canvas or EdX) + + 6) Read and respond to the comments on gitHub from your instructors + + 7) Continue working, committing and pushing changes as you go. + + 8) When the PR is accepted -- you are done! + +Is that so bad? + +Remember: this seems like a lot -- but it *does* reflect he real workflow when doing real coding. Even if you work alone, a version control system is a really good idea. + + +General Advice for working with git and gitHub +============================================== Committing your code -------------------- @@ -278,6 +387,8 @@ After adding the file(s), you can commit your code by typing the following:: Note that the commit message should be replaced with something descriptive of what that commit includes ("added new functionality", "fixed floating point error", "ready for review", etc.) that will later help you remember what that particular commit was about. +.. note:: If you omit the message, git will bring up a text editor to let you write one. If you have not configured git to use another editor, it will be "vi", an venerable old Unix editor that is a real challenge for some. To get out of vi, hit the >escape> key, the a colon and an x: ``:x``. You can configure git to use an editor you are familiar with. See: :ref:`install_nano_win` for how to do that on Windows. + After every change to the file, you will need to "commit" the changes. Keep in mind that git will not commit all the changes you have made, only the ones that are "staged for commit". You can stage them with the ``git add`` command again. So ``add`` means either "add this file" or "stage this file for committing", depending on whether it's already been added or not. Alternatively, you can tell git to commit any changes you have made, since the last commit, with the "-a" (all) flag:: @@ -295,29 +406,29 @@ It's a good idea to do that before committing, so you know what will happen. Pushing Your Code ----------------- -"Pushing" refers to the process of synchronizing the commits you have made on your development system with your GitHub repository. +"Pushing" refers to the process of synchronizing the commits you have made on your development system with your gitHub repository. This is an important process, since it is needed before you can submit your code for review. -Also, it makes a copy of your code in your GitHub account that you can later use to restore it if your local development system fails. +Also, it makes a copy of your code in your gitHub account that you can later use to restore it if your local development system fails, or access it from another system. You can push your code immediately after every commit or do it once a day (in which case, several commits will be included in a single push). To do it, simply type:: git push -The first time you push your code to a repository, GitHub may ask you to select the remote repository (i.e., your GitHub repository). Just copy the suggested push command (you will only need to do this once per assignment). +The first time you push your code to a repository, gitHub may ask you to select the remote repository (i.e., your gitHub repository). Just copy the suggested push command (you will only need to do this once per assignment). -git will also ask you for your gitHUb username and password the first time -- it should remember them after that -- until you try on a new machine. +git will also ask you for your gitHub username and password the first time -- it should remember them after that -- until you try on a new machine. Asking Coding Questions ======================= While working on your code, you might run into a situation in which you would like one of the instructors to look at it and provide some feedback before actually reviewing and grading it. -In order to do that, go to PR you've created and write a comment about your question or issue. You should make sure to tag your instructor in your comment, to assure that they are notified of your comment. This is done by writing `@the_instructors_github_handle`, e.g. `@natasha-aleksandrova`. +In order to do that, go to PR you've created and write a comment about your question or issue. You should make sure to tag your instructor in your comment, to assure that they are notified of your comment. This is done by writing `@the_instructors_gitHub_handle`, e.g. `@natasha-aleksandrova`. For example:: @natasha-aleksandrova: I need some help on line 20 -When you submit a comment with a tag, the instructor will be notified by GitHub and will be able to review your question. +When you submit a comment with a tag, the instructor will be notified by gitHub and will be able to review your question. Submitting your assignment @@ -327,8 +438,6 @@ Once your assignment is ready for review, copy the link of your Feedback pull re https://github.com/UWPCE-Py210-SelfPaced-2021/lesson-02-fizzbuzz-exercise-uw-test-student-natasha/pull/1 -As per UW's requirements, you also need to submit a zip file with your code on EdX or Canvas. Note that only the code included in your pull request will be reviewed. - Resubmitting your Assignment ============================ diff --git a/source/topics/01-setting_up/images/githubclassroom/clone_url.png b/source/topics/01-setting_up/images/githubclassroom/clone_url.png index 05763e86c6faa3f6438a4386320e9c2cf46cef99..e476ab51d82bd7da73442607f1d9f7a30268d689 100644 GIT binary patch delta 20662 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 delta 19122 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 Jxscws{{!R9=@S3| literal 29376 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 diff --git a/source/topics/01-setting_up/images/githubclassroom/make_pr.png b/source/topics/01-setting_up/images/githubclassroom/make_pr.png new file mode 100644 index 0000000000000000000000000000000000000000..cce1bbd5acec8f87a592dfaca619daa54aff9d81 GIT binary patch literal 148016 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

Jw*IH2EFuBVNl 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%0DZ+WXR*pDN@ zxawMZp0ocVu+H@~xTYk#z%0|WUf-l7K2=9!Qe-hvV2*Gj`AJg{-*7i8hesmiE5+{% z2D}Wyo<6u`o17;MSmBhs0WTnRc;@B>k4(aGOn58@ttr*gJ~sPfLnFkfI9}3`kK2uL zcOTGIYbCrro z3mdM|0=tK8J^sO!-NQgK9If@TH?J#^{WRx$jGKRgo1_|l(Xx-NXUr2!DF_5vKKi;l z_|a(+2WzxH$DYdl)TABFp&Oam!pWs^hr7efwoehRn2~~eZ*D{Dxy_1h@oUr@bBqIn zPmi1k(`cFfRvho!UFwlQ_C8T7>`OyHY}18vp2G89lxty1cDJ6;%-|c-y`+6_#zXLG zAMe^xeoXOenkN{didJ%eXy=;7rW#x!HAAd0k28xu18QNKw${D@NndjRY@9CaIwQs* zFO)3uvQi!;Y|qxa{{FnUiH&teQ*uyOB2lEhD+|MXe5jTd$Err+Bw0TGjsA-3)~}l6 zeHmC%emDM)3;H_lTFp^1#8M@Ve99mM>-cgukE=U{G5CXPhhfbIZuHoJ&`rwNptMFt z^Ff@2U>Urbv+t^B%FSz5Vhwo>K-owJE!+Y0sDBJ+EN0ty2Q%9uCWA+c9`nDpy3Z3S zCL69~9}{XV3MWzFp0GRa%@Yk3ax=lKq<)n*9IkW4R4dsEl(#~TWZE2VkeqvSDHw;u z{>31qodx*Ws{Y_qJ?7Y_FXq=n1cZe>1$*8M&GAR;j(-OxPtNUjdeDk3>7xmee z)_8=*tkQGZWksq`=ZqwO@uw2d76*Oyp{!>uDgSDd72$L-|4{Xed}KD~4=30B7hpRW z2fq@{caLMe`eJY(a@MORflI;;i!FOa4swW$d?kxVDuMJ4Ah?;1RA)dYovf#nLq*^1 z@UPoZ8SXTmDydbABe_f-i&xwA*aT5<^+UB5HB;y^h!TZPzUdg2rlkho%^a$I1+YsV zF&jOv^nZwpOssl3Z1_3ukn8#9)j3IE%T~VERE@JX8_cWpQXFkI8;LLJm`vH$EIBK{ z{l?TAJhUV9OAk`oZ&R^THz2Clzuxqg_L!4}a@_@$IH4FtiJ4fQQso4MC6*(JuJyyu zC_WW5z_TX0U`)ag3QR^f$G_&qTMm#5z(^gLXs#6e034Y6SPskEP4RLJNL6T|@m{>p z;)@+}1D6}TElI~n%51%=YkK@ImPm(*H6kNr%+*h(ad%w z;WB>oiEv^cbpPx)v@+0P{tXaYZ8asjnd~I#%8`C>^AaT9aKBJF82O%w_(QQe_zSgW z?L58;mqM?zf}+i!=cDsxJ;rcR=~wkfwVuZ^O)nvb>(3loICeDD?hJ5~m0EjC4rz*t zad{0bs-oAd4A?{3!r8cE?TsVTN=V$NY(E`8qg`{O-*UEu=u_2;x|3ysfh{>dT#aVsD;juE>Q2JP{G4je8q4EoY9x&p2 zekE$AQV>P*omiuKqo9dHx8Y4>=QxEvh_HN2Qpx#ipi)Rbj1hC$dMTMY#r+4fIkw3i|B2% zs`!D|P7t1yzj{E|@@;?adja#slWTjc(hKLTt!j`{eE46X_N!)pOHJrX;-$?g3oX0$ zGDo{2E5l^2LTWSsOnzX!ly_wyxH7$vEj33am0Qpa4c2%3jEU@A_r@LN8OFK|tmrxK z?``O1$`Fqg!gLmp$tKs@4KAvn+{Db}s2u{xseDA?&!EG_la)B6x|={m@v?MUwHY!V zO4N0O5^Y-OHxhoUc2qG{0{3>?NHsQkbKrZj1* $!mM1E4)=Tb_df9CKVgwl1}8 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�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 tWg-GT|XDaw$SZj(an@z1Yl{S`0Vo zx`>H`-9sxw+Fh28T84c=)%`*g>k``c`8qLMvE4y&zSSSMy#3Xow)1x(-wy>e5Tom( z4Oec%=keGWnIZHLZ{lFx-UM^>WtSQuq$$Ii>I&XuWA&kA<#>RPIcMHBYY7WHJ$R;+g@E{#SIxWB)Lu{NHyDcArq`SuhT+sHl)eSXAZtk2aGq|tRc z@Te}cJq;3jKbilvl)}%D=#Z5lT5EMJYpuf%<2^o>>q5N(u?9J*=2BxHx3OT9MUNM2 zqLFgp2MRJnfouV*Zh?>O*0T+V+bOTC>#^Hbt|Q^W3Y_St?C%Xxns2AHPCv&;^9Oh% zbW%l8=b@mdFT08TRQ4;TU?UkK3RcKh<}v)1mVA*Pa8M$h?&sgd|unvFaKkXh2tb6K63JmcX?Bfh9NC-KG!=V05AFI`cLc zD2fHDa+qx3V4gEZTCJWz7b`V1-<03!Hn0393mG*0#UHO#K500i39#PU!W}@@UTB=J zm?xy{sx5vR5BYZdI@>`0)GS=Vn6ePmcH@s*|3kl-s5Bm~Vz-LsMkj3Pt+Qj(9;mh& zIP`;B-3otuhyte~Lc$=KUamH@DnLQhU?{QdDv7l@LfDX21Mb|K!^Oo14}at^p3GcK zZMH@MxwO8w+SIQl0$_O7ks<8YPS^X`lv#)4KpXfj`Y9v;AU3h-cjW3U?8oGV3g4>p z?e>Wx{!*^t-napc>#V*___B7o~tUS5_AxE3ZfH1!qH79wt zQO)xde+*Kkgi7_HVU^}|(eg?-(^)%NrX3P3K$#p%&~}db=+YGB5^ynuCV6$ZT%v~k z+c`~D`PY3Wf{B-zTUxF9ezcyN9363s~9@sF~?=vzZ_^1;s5~0_g8yS#X*7 zpx8yGjPsC_?VWP%vc^8)(dC$g!-b#0K%Dty*r*Kh6~9UaQIZCG+;e-_9ub@34*l{6 zupbH$lPDqqSF1QIbfRsqDS`E@8zEB@h-|uBI1#*44Zv|UO5c5!*=+K>LGOZ|ew6Ol zB~hDp^m!Se;IJ&}-kwF7<#e!E=>%X&8otnNFU@+Ef0;Vpj_1fUY;~UBY$Xg9Z#N~M z}fU?>O`erKza6H--yc3;4hp0HLRlyB1#Uqd}T+p6&bW zoTY9y{fY!Lld^o_5`C6&ZTwR?;U1hcPaj03ly$3LX0_$2tc7JB7%2e%t4_bF)`eet!@ui!@~~-*%sVjmvMDC$Ocq63 zp)8fKfwwrp*@4M>R{KSMUHwEZ3sj1|QT4XBHrvv;3C9Tg7PZv;g@M%o4pM{Jy@&v_ z;_=YCr{Gba_X|NalYed^@*;g%KEjf8TBAifV%-r7^rZ!E0am{hZ_xV7Rm{7AQ;9z| zxQ`Azr;5RgGk$kUwe+K+yO%CjqA^)jfxRZ?DEMixED_Xp`D$^xcy;NcSGgvY2BX;s z`mgzDxE5VLDP3`$S?KL6qWUax86<_`pJblt9@eK%G22XZ=Ot-pcLPV(OTo+?seo(_ z^?#y{b~kI(ERBg!D;7`rKsPfR4AD^GAC7^UU=uahF4=ZwME-SbjB<}Y(t11jZ&Z-+U{cht$8}%EhKRNoOE0S)oG6rWIBL%R{+qN>274?@HDznV`M&zIhhc1A z)RMHrpG=6)saKUlT854M&_ljD3QSr^rr>kRt%kBFQ9F~yR(!Z6sSzSxA z^Nltw3XerfPYQj?Qc#?ElNHC1l!B&%bvirQfyJO;~`9T_JXbTIP>Av95n;MD36uUfzr2VH}hj zPn%CUrtTxqtD5x}<*NMI*x4(O zH@?OUdqns_DY|Gr3n~5+wy%u=wwKxsu-c!}_6j|bc(@7Ty)slN0P%{|tOUf6O51k8 zzhkCIoODRfj#}#XCbGGhhUGu-Abh%7vn%V^b zGN?xOHg!ikql=DOgjy|~PvqU7%tq(ROmj;@43t`iDjbx64Qa`QV}GG@llusJ)jmt* z68Ffa3X@*nTZTA8Ad@8e-W~{WY0{|BFpPeTUsH%#avBdBllu8NmZW1lk@R?Tq3#?~ zp-Xw_BrF3uSl#i^73%84?5WDNXmKysUz@7r*Sg{|Yzg7lDtvhFYcv?t;-`fk(l^v_ zqU-a#F!wQphdVWk(IyG=LUrBVc}sUd1XX|fE-T|yr<2v1kMSDBal`c`quxs4SL$Kx zd$QX00h1-bmwMPD~KJ0+Jdt*?EgHEhy@c(+1NwPvz>U;VV}fz!J_I^4@JOUHaii5D&L8 zAWP7{w|H&f3j{zYq3QJt%oe@*llAyHMRPejti=Kz=ldfuCpX{B82i6PyWwr?o8HJY z%J5!`kl9AC)_TuiqLXFt%L?ApPLobEOgHOu$Pqo6l1YBzaN=yjo6cv&0DY;>b9(ZH z<&to*07cV{Ot*L_=0x6z=Ma6#$vd0Z=7oak`g=J)YuVQq&Q>5^7RF3qSrZ>9 zP{+DtKGJ=+C|{y2@9xezkXdrI^PG7^OOu@YO&t-JM-J0x@)(m!2{QFJ&b zSANIQ-JOEAW?4~Xfn;6&{{OQCqJ%3u7_`62wW}mQ)F%F+_3V=Vv%nUMP;$3t%8Xw5_Fr0FaDQaDW40K3x_N%WhlQ>ShPvhNuj_d({g93WS(a_-tQIpCqkh2?|EK z0~2sYss%ac=}*_$Tr_9P*Y5U9I~oTsYegNOd$1&?4XYBl%WbPTw;A@`;5UjvL9HRcsT0}u`n=g zf^l6zd*E^O4wGN*3OT!Hza?~5R^FcxC~7njF-Uvap~KwTfC?Z|SR41`9%Oh(!HdH; zD*_4`@Db$H*F7(kUF*|ikq7c+Xo(nSqoxm`uM12cV;k42j(FbdGX6D)_2KRDi)1R4 z8<%nP1Ai;mS($!5ASyiYDkzo(=_o(`kgVsPgq1Hu?G%^6;g%Oz@wQ!?VO+a4qem#z zok&NDc36H8Hu&C?%GT++>E;{pLVWLg6-|7R2BEx1Jf~< zaLMr4%*jy4UwPaaf{UYM%~GY;g+ow*bR=e!?g3jYqe!pOF(dsSxlw|NWk5Pq-!|hn zJ$K`I4d*+uUJVUAuM`I+%dQ{cFxv0IuqkxTk6VsW~O0aAVXAtONIO(N}OQ(M*foy_gx z816-gyn^S0On?O>C@E#75(HjFn#sorfmeuNVH;9Sr}rmgpf6wpA#4R8&TI^)RX&-I z^=Jr=JnD4%`vWxL*NDCXvUJu%67<$zOjFo2j|&is4cqyFRb5H*p{o`S0mweJR$Ln5 zOyXfg1eZyT^zQ12GM?3(^5PA7;fZCqyLt2b`OH;E!?GBmM_r2Fj}yczz-(5k0Hk0l zreG5$oLHjUJA5W$Rr}d2A#xgmSfdlnmh0D>0vGMoytV>qp4&_4ZqRsq3k(VkjQ0$^ zdUusTmYN?SLTL=bv9vir&h!q#1M}(~t~ar+CWWQ*M_@&N89Tgfvj^Gpx!RZ(K-5|O z41T9`=4B_i2rE^1O|=Bg;F92R*DB;NkE}k>-fVh*O0Ow~3;}^rDJIDOmC$f1v&<@v z>)35;U4n;5-ir@{nq{Bso7C3= zIeup!or8%^#n9p=e~FAdEYk}wG!_;Z;rtq11J~GhrL8orT2P)d6hwp8EVd-{c=Mim zo=&a!kAh+`m>)lGx9^S%9_C=Er-Ib4b&NtU1xnM8#M&3>)>1L)zJ4?u1tfoUdWc6$ z>`e1MD?Q8l5)a?B3oy7-SHN58bHm1$p0(2LM7qr`d}D?I8D_66 zX&jHsr=A~q&E?ukI#U8(D%y~d<+20XK8WX@} z(0?MM*l$bq6LYw_`u-h+4C^+EabPR8)OK5fg>S1>mVlFpx_@o22e?JJyxv3x)>b?5G!dg)7I#1v z39s_zV$=Njcc_B#S_o?ta%*WkUg1j9Ns{y@gbNI7MsitBb!ZS=a7l+Hz4htf;a7?0PBz{iA{;b&~BEj1uh~K~Mz}s?lWA6vx;;6VYF>Knf`A zq!@G=wnk%_-!yB#UxnKiuJ7`EF4`yIaLZJ3m^;smlu*65DQf|Dm-H=;H#^_I(!p1w z3St7H3s^PL$cVbfk<+^~K=xVZ6EvK{yEg+`1JvtIwMeWSn<2lzH!pemoA|oiIsqESr282iq zhLbTwg5ROtXCY)FT0xwM2k$vXXY>bQ$$>J+X9a0CUXIlfRAFqyh z4at0{%{yqlXM&PGV!tPp``|*TC};L)lrTfRTw&<=*=nm%ye_xlsor?f<@>|!e#yGd z^3&s5tVxQt1*Uhcg_5CwdFrFZ-GEV;z+O;furqQ})qc$~3?lpO2Dji`HDXlD@}1#w zvva=sV}nV5!Bv?x!nevDmNZ3*OzR1m_uAs&Jrnelqt7hr<~bdg;R_aTh)w`TzQHVz zaL-P6xxX2+Eqm90ta@`k%o`QlxRZ`ZQgT4yJ$`&yKnLtO9`i#~IVMx=Renvi-F_P* zen-;?d9edT9wr)~yDTLGhoWf{R7ZomWfHk4uMTDlmh$ZF-fK`RGG=?-JQ9u!;~cve zY;;`i>o!U^qCC89hI`2DE&n6$RkSq@K#PXdboO#*dzqQwhd7;-6C+SJf)P?~+ zSCAuWWO8<^zFOVnQ$RD{1GJb>Y==d9}^0?b|Lcg?fd((ur_4$Su6Po%L- zEU#O0*>om2*D@1v5R67E%i>KAzQ#0Jt#v_T5>`tWX*4Tu^u>+O$pqj#p=5UE^f~@1 zr~qjWgYN8XPwi8eA(|@Qc^~D-fJkoCONWHzKrBYI4x|F`?V;8lgqy5w^vZv)GToaX zt}M{0dc7wOs9X@ci^6y0H)jCop&$8%z|1QzIg4{D9s0$iax7R$944uZ9HSjU7d+0x zw{^!+e1&@-?wwyU#s!;Ere`^A4{ZZ6-u=w;<4Bu7sHZ-qsSzdKgm0xi>YFU+yhDO7 zBU^<}6}iq#lSURb|7JR8Q%?0-snrMoloB=_TOBqQ{*cxHuC;t_)LiR3nvfMz*9V-$ zi{I7A)!i4ds)9A%z1LO{Bi4VN7z#TK9wSqykwDJl)L}Gxtz_SI=8Cj03?&BNk=`7j z@E9GbVM5dddxN+4ZwBJh0B_UDp7f<0)UpcoE#Nzu)rjKe2L< zkqQxC!Yzk6hQXr!MipQ4-2l^zJyNg#A~R#Y+xWPc7p=-jlvZ?WeQRnT^6jN)~&HvUh{gN#>*3ZBU*vXM85k zkmYX}jp!Qs$fq9$9I+rq^y;hRku1=lUM(RCN#olC2o`Y!E|ja=ZbuIJcORgVqdt;` z#>1de*erO7z2unmDt<6u;?g!`PMUO)%xY-(Mo zmFYLRr9q|P;#4sEmwu}xK}ERhdHR@}av(^u>?3{a;CW$N`OG(gl)_+*6)K#;Y2NUw zp88CrEAb2Q$vORe=g8`Z&Mn&IfMu6?Q*}scp4H!1TM1^UNc)qRN@8s1yI*byMMGqg zt|k8jz{G%vdR!!Y$V(K}zM89tNBePY7yG<8|-a`j}5G<4{7 zW;RcGMz%{i#wri+g%lX+J_{;1WJ1(9COxd%^G!@&Oi474W5_4$e}=_$iJ|^r?7G5h zv5=|7W>u#mmo=6%SKXf60lSbT_{?Zv2%JA1C_}+#vOwi!g&e%g1L|8V14X*R<{m&l zLQlIwtITG&DH4F zVAsDPSpqn=XxT62;j4tt%zPPdSL3?3q^QdV+QZI{g=a;7TC4h25=@_celKRul5|h33a(LxWTEOR6OF(${^wTv7I!gnYcteS| zN{P4EnwD3~6>Ei`+`RX$u#U!<#GwtkBypqq7XUp2Kbkn^9M$4ROW?~hA5imN8nDTr z7cY#j5yST@(d=;oAi3go|577VB0x9CH)Oj*CHx=K9-(fUFTyTnBH80Zp6ABQ75j!6xuhKkXNV5EI=2;0OQlvJ`RSUs^i~EBpP& z`~P~42WFN3iG2ML|N76@wP4_J%j+Ix?LV32|8$K1;YJF8jHNu5|7$V+S$f#vT1VYN zhChA8KS##Dzi}f6TnKra`QIyydoAE`3>LVV6l4DsllZgG|5JVWFjCv(BUb)OQv3I1 z_@nb)40Ztx5NA0e#HIerVf>d`rvjFiCk99y{g-0=8I(MFkp-{|3B>$UC*Y59_n)sL zfH_T&{ttZrmx=uQQlZ)bj|Vo0biH{Qe1GF*2#7&^M}PR6h4JMC9`9QG0RHu-Kl)E? z{@33>xl1~D{$)47%wl`U5gH$}UG=|zeJv6Km~MAH!T;sCf3~<+?M~xckN;r2|6*3| z_N1+t$)`6H$_D@P*}v}yA;A8hKKz~b1fJ=j1y~X5SEFTX|Gtm@r3XLRpSk|kVE?Sr zzrP_i1FQ|VCL|d1&yD=QFYo_UE43}+8TxOQ!%_lRSkyXO7qb5?(+LHf$OF;eY;<4M z7t1-!0C)cHUH{K&8=h=D{|)GuDdqjhAZ_xW!X0+_gJ$zI$f4@fcb r?|G&d6G!=fCjS33{r{UL{)7VSFe~9 Date: Mon, 19 Oct 2020 23:25:37 -0700 Subject: [PATCH 03/27] removed creation of develop branch -- it should be there. --- .../topics/01-setting_up/github_classroom.rst | 50 ++++++++----------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/source/topics/01-setting_up/github_classroom.rst b/source/topics/01-setting_up/github_classroom.rst index ec02e12..e932f80 100644 --- a/source/topics/01-setting_up/github_classroom.rst +++ b/source/topics/01-setting_up/github_classroom.rst @@ -115,10 +115,10 @@ d) Clone the repo This will create a new directory for the repository, named by the assignment and your gitHub handle -- this is where you will put all the work for that assignment. -3) Create a develop branch for your work ----------------------------------------- +3) Use the develop branch for your work +--------------------------------------- -Create and check out a new branch for your work. +Check out a different branch for your work. a) Change the working directory to the repo just created by the clone: @@ -126,11 +126,13 @@ a) Change the working directory to the repo just created by the clone: cd the_name_of_the_assignment_repo -b) Make a new branch: +b) Checkout the develop branch :: - git checkout -b develop + git checkout develop + +Note: there should be a "develop" branch already in the repo. If not, you will get an error, but you can create the branch by hand by adding the ``-b`` flag: ``git checkout -b develop`` After that command, git will be "in" the develop branch -- anything you change will only be reflected in that branch. @@ -225,33 +227,21 @@ In order to get your changes up to gitHub you need to "push" them. It's always a Note that I am on the "develop" branch, which is what's wanted, and nothing new to commit -- all my changes have been committed -- it's time to push. :: - $ git push - fatal: The current branch develop has no upstream branch. - To push the current branch and set the remote as upstream, use - - git push --set-upstream origin develop + Enumerating objects: 5, done. + Counting objects: 100% (5/5), done. + Delta compression using up to 4 threads + Compressing objects: 100% (3/3), done. + Writing objects: 100% (3/3), 354 bytes | 354.00 KiB/s, done. + Total 3 (delta 1), reused 0 (delta 0) + remote: Resolving deltas: 100% (1/1), completed with 1 local object. + To https://github.com/UWPCE-Py310-Fall2020/fizz-buzz-PythonCHB.git + 46d868a..fe3e479 develop -> develop -Hmm -- "fatal" -- I don't like the look of that! But it's pretty simple, really. git is telling you that it doesn't know where to push the code to -- your gitHub version of the repo doesn't have a develop branch. But it tells you want to do to create that branch on gitHub (origin), so do that: +.. note:: If you don't have a develop branch up on gitHUb, you will get a "fatal" Error. Scary, but it's pretty simple, really. git is telling you that it doesn't know where to push the code to -- your gitHub version of the repo doesn't have a develop branch. But it tells you want to do to create that branch on gitHub (origin), so do that: ``git push --set-upstream origin develop`` -- and you should be good to go. -:: +Now the local develop branch is hooked up to a develop branch on gitHub. - $ git push --set-upstream origin develop - Enumerating objects: 4, done. - Counting objects: 100% (4/4), done. - Delta compression using up to 4 threads - Compressing objects: 100% (3/3), done. - Writing objects: 100% (3/3), 639 bytes | 319.00 KiB/s, done. - Total 3 (delta 0), reused 0 (delta 0) - remote: - remote: Create a pull request for 'develop' on gitHub by visiting: - remote: https://github.com/UWPCE-Py310-Fall2020/initial-setup-PythonCHB/pull/new/develop - remote: - To https://github.com/UWPCE-Py310-Fall2020/initial-setup-PythonCHB.git - * [new branch] develop -> develop - Branch 'develop' set up to track remote branch 'develop' from 'origin'. - -Good -- now the local develop branch is hooked up to a develop branch on gitHub. And it even tells you what to do next -- see the "Create a pull request for 'develop' on gitHub by visiting:" -- that's exactly what you need to do! 6) Complete the Assignment -------------------------- @@ -345,7 +335,7 @@ I'm sure this seems like a lot, but it will get to be a habit, Here are the step 2) Clone the resulting repo onto your work machine (``git clone``) - 3) Make a develop branch (``git checkout -b develop``) + 3) Switch to the develop branch (``git checkout develop``) 4) Do the assignment in the develop branch, committing and pushing as you go. (``git add``; ``git commit -a -m "a message"``; ``git push``) @@ -359,7 +349,7 @@ I'm sure this seems like a lot, but it will get to be a habit, Here are the step Is that so bad? -Remember: this seems like a lot -- but it *does* reflect he real workflow when doing real coding. Even if you work alone, a version control system is a really good idea. +Remember: this seems like a lot -- but it *does* reflect the real workflow when doing real coding. Even if you work alone, a version control system is a really good idea. General Advice for working with git and gitHub From 1245eb95e59d27426866dd1cdbb8460de58acf3b Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Wed, 21 Oct 2020 12:15:49 -0700 Subject: [PATCH 04/27] fixed link to setup details --- source/topics/01-setting_up/python_and_core_tools.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/topics/01-setting_up/python_and_core_tools.rst b/source/topics/01-setting_up/python_and_core_tools.rst index 5963f6a..ff53c41 100644 --- a/source/topics/01-setting_up/python_and_core_tools.rst +++ b/source/topics/01-setting_up/python_and_core_tools.rst @@ -18,7 +18,9 @@ Although it is OK to use different tools, there are some requirements to success #. A way to run your code -- command line, IDE, etc. #. A way to use the "git" source code version control system -You can be successful in the program as long as you have the above. If you don't already have a setup that fulfills those requirements -- read on. +You can be successful in the program as long as you have the above. If you don't already have a setup that fulfills those requirements: read on. + +If you are not sure -- you can go here to test your setup out: :ref:`testing_your_setup` -- if you get stuck, then come back here, and read on. Platforms --------- @@ -81,7 +83,7 @@ In order to be productive in this program, you need to be able to do the followi If you are not set up and comfortable with doing all that, read and follow these instructions: -:ref:`installing_python` +:ref:`setup_details` Then come back and follow the rest of this review. From fee198b894ddc081389c60d5c35651efe470a2e8 Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Tue, 27 Oct 2020 21:20:24 -0700 Subject: [PATCH 05/27] a little more explaination for slicing lab. --- source/exercises/slicing.rst | 2 + source/modules/Sequences.rst | 75 ++++++++++++---- source/modules/StaticAndClassMethods.rst | 16 ++-- source/modules/Unicode.rst | 65 ++++++++------ source/topics/01-setting_up/git_hints.rst | 6 +- .../topics/01-setting_up/github_classroom.rst | 88 +++++++++++++------ 6 files changed, 164 insertions(+), 88 deletions(-) diff --git a/source/exercises/slicing.rst b/source/exercises/slicing.rst index 50247fa..6f8b19f 100644 --- a/source/exercises/slicing.rst +++ b/source/exercises/slicing.rst @@ -20,6 +20,8 @@ Write some functions that take a sequence as an argument, and return a copy of t * with the elements reversed (just with slicing). * with the last third, then first third, then the middle third in the new order. + - Example: ``(1,2,3,4,5,6)`` should return: ``(5,6,1,2,3,4)`` (start with a length that's a multiple of three, but make sure it doesn't crash for other lengths) + **NOTE:** These should work with ANY sequence -- but you can use strings to test, if you like. Your functions should look like: diff --git a/source/modules/Sequences.rst b/source/modules/Sequences.rst index 76faf35..12dc20b 100644 --- a/source/modules/Sequences.rst +++ b/source/modules/Sequences.rst @@ -771,39 +771,75 @@ Other Gotchas Easy container setup, or deadly trap? -(note: you can nest lists to make a 2D-ish array) +Say you want something like sort of like a 2D array -- one way to do that is to nest lists -- make a list of lists. + +ONe seemingobvious way to create an empty list of lists would be to use multiplcation of lists -- make a list with one list in it, and then multiply it by the number of lists you want: .. code-block:: ipython - In [13]: bins = [ [] ] * 5 + In [12]: bins = [ [] ] * 5 - In [14]: bins - Out[14]: [[], [], [], [], []] + In [13]: bins + Out[13]: [[], [], [], [], []] - In [15]: words = ['one', 'three', 'rough', 'sad', 'goof'] +OK -- that worked -- you have a list with five empty lists in it. So let's try using that. This is a very contrived example, but say you have list of words: - In [16]: for word in words: - ....: bins[len(word)-1].append(word) - ....: +.. code-block:: ipython -So, what is going to be in ``bins`` now? + In [14]: words = ['one', 'three', 'rough', 'sad', 'goof'] + +and you want to put one in each of the "inside" lists: + +.. code-block:: ipython + + + In [15]: # loop five times + ...: for i in range(5): + ...: # add a word to the corresponding bin + ...: bins[i].append(words[i]) + +So, what is going to be in ``bins`` now? Think for a bit first -- you added one word to each bin, yes? But are those "sublists" independent? There is only **One** bin ------------------------- .. code-block:: ipython - In [65]: bins - Out[65]: + In [16]: bins + Out[16]: [['one', 'three', 'rough', 'sad', 'goof'], ['one', 'three', 'rough', 'sad', 'goof'], ['one', 'three', 'rough', 'sad', 'goof'], ['one', 'three', 'rough', 'sad', 'goof'], ['one', 'three', 'rough', 'sad', 'goof']] -We multiplied a sequence containing a single *mutable* object. +Whoa! So we don't have 5 lists -- we have five *references* to the same list. Remember that in Python you can have any number of names "bound" to any object -- and any object can be contained in any number of containers, or multiple times in one container. -We got a list containing five references to a single *mutable* object. +So when we multiplied a sequence containing a single *mutable* object. We got a list containing five references to a single *mutable* object. + +Since it's mutable -- you can change it "in place", and when you change it -- the change shows everywhere that list is referenced. + +So how to make a list of independent lists? You need to loop and call that code that makes an empty list each time in the loop, something like this: + +.. code-block:: ipython + + In [21]: bins = [] + + In [22]: for i in range(5): + ...: bins.append([]) + ...: + + In [23]: bins + Out[23]: [[], [], [], [], []] + + In [24]: # loop five times + ...: for i in range(5): + ...: # add a word to the corresponding bin + ...: bins[i].append(words[i]) + ...: + + In [25]: bins + Out[25]: [['one'], ['three'], ['rough'], ['sad'], ['goof']] Mutable Default Argument @@ -858,12 +894,13 @@ This will ensure that a new list will be created if one is not passed-in. Mutable Sequence Methods ======================== -In addition to all the methods supported by sequences we've seen above, mutable sequences (the List), have a number of other methods that are used to change it in place. +In addition to all the methods supported by sequences we've seen above, mutable sequences (the list), have a number of other methods that are used to change it in place. You can find all these in the Standard Library Documentation: https://docs.python.org/3/library/stdtypes.html#typesseq-mutable + Assignment ----------- @@ -913,11 +950,11 @@ You can pass any sequence to ``.extend()``: ['beans', 'spam', 'eggs', 'ham', 'sushi', 'bread', 'water', 's', 'p', 'a', 'g', 'h', 'e', 't', 't', 'i'] -So be careful -- a string is a single object --but also a sequence of characters. +So be careful -- a string is a single object -- but also a sequence of characters (technically a sequence of length-1 strings). -Shrinking the List ------------------- +Shrinking a list +---------------- ``.pop()``, ``.remove()`` @@ -1130,8 +1167,8 @@ Otherwise ... taste and convention. Convention ---------- -Lists are homogeneous collections: --- they alway contain values of the same type +Lists are typically homogeneous collections: +-- they always contain values of the same type -- they simplify iterating, sorting, etc Tuples are mixed types: diff --git a/source/modules/StaticAndClassMethods.rst b/source/modules/StaticAndClassMethods.rst index 5ef64ca..1ea8919 100644 --- a/source/modules/StaticAndClassMethods.rst +++ b/source/modules/StaticAndClassMethods.rst @@ -8,8 +8,7 @@ Static and Class Methods You've seen how methods of a class are *bound* to an instance when it is created. -And you've seen how the argument ``self`` is then automatically passed to -the method when it is called. +And you've seen how the argument ``self`` is then automatically passed to the method when it is called. And you've seen how you can call *unbound* methods on a class object so long as you pass an instance of that class as the first argument. @@ -36,9 +35,6 @@ A *static method* is a method that doesn't get self: Out[37]: 9 -.. [demo: :download:`static_method.py <../../Examples/Session08/static_method.py>`] - - Where are static methods useful? Usually they aren't. It is often better just to write a module-level function. @@ -80,9 +76,6 @@ argument Out[42]: 16 -.. [demo: :download:`class_method.py <../../Examples/Session08/class_method.py>`] - - Why? ---- @@ -102,6 +95,9 @@ Consider this: in a class method: Out[45]: 64 +``a_class_method`` is defined in the ``Classy`` class (see above). +And it prints the class that it is called on. But despite being defined in ``Classy``, it gets the ``SubClassy`` class object as the first parameter (``cls``). +So a classmethod will "do the right thing" when used in a subclass. Alternate Constructors ----------------------- @@ -123,7 +119,6 @@ keys: TypeError: cannot convert dictionary update sequence element #0 to a sequence - The stock constructor for a dictionary won't work this way. So the dict object implements an alternate constructor that *can*. @@ -144,8 +139,7 @@ implements an alternate constructor that *can*. See also ``datetime.datetime.now()``, etc.... -Properties, Static Methods and Class Methods are powerful features of Python's -OO model. +Properties, Static Methods and Class Methods are powerful features of Python's OO model. They are implemented using an underlying structure called *descriptors* diff --git a/source/modules/Unicode.rst b/source/modules/Unicode.rst index 9f2ca51..881cfef 100644 --- a/source/modules/Unicode.rst +++ b/source/modules/Unicode.rst @@ -26,7 +26,7 @@ What the heck is Unicode anyway? * First there was chaos... * Different machines used different encodings -- different ways of mapping - binary data that the computer stores to letters. + the binary data that the computer stores to letters. * Then there was ASCII -- and all was good (7 bit), 127 characters @@ -84,7 +84,7 @@ http://www.joelonsoftware.com/articles/Unicode.html Actually, dealing with numbers rather than bytes is big --- but we take that for granted +-- but we take that for granted. Mechanics @@ -98,11 +98,11 @@ Py2 strings were simply sequences of bytes. When text was one per character tha Py3 strings (or Unicode strings in py2) are sequences of "platonic characters". It's almost one code point per character -- there are complications -with combined characters: accents, etc -- but we can mostly ignore those -- you will get far thiking of a code point as a character. +with combined characters: accents, etc -- but we can mostly ignore those -- you will get far thinking of a code point as a character. Platonic characters cannot be written to disk or network! -(ANSI: one character == one byte -- so easy!) +(ANSI: one character == one byte -- it was so easy!) Strings vs Unicode @@ -132,7 +132,7 @@ And two ways to work with binary data: py3 is more clear: ``str`` for text - ``byte`` for binary data + ``bytes`` for binary data Unicode -------- @@ -154,12 +154,12 @@ If you need to deal with the actual bytes for some reason, you may need to conve And can get even more confusing with py2 strings being *both* text and bytes! -This is actually one of the biggest differences between Python 2 and Python 3. As an ordinary user (particularly one that used English...), you may not notice -- text is text, and things generally "just work", but under the hood it is very different, and folks writing libraries for things like Internet protocols struggle with the differences. +This is actually one of the biggest differences between Python 2 and Python 3. As an ordinary user (particularly one that used English...), you may not notice -- text is text, and things generally "just work", but under the hood it is very different, and folks writting libraries for things like Internet protocols struggled with the differences. Using Unicode in Py2 ---------------------- +-------------------- -If you do need to write Python2 code, you really should use Unicode. +If you do need to write Python2 code, you really should use Unicode. If you don't -- skip ahead to "Unicode Literals". Here are the basics: @@ -214,7 +214,9 @@ Encoding and Decoding Unicode Literals ------------------- +---------------- + +How do you get text that isn't plain English text? 1) Use Unicode in your source files: @@ -226,6 +228,8 @@ Unicode Literals 2) Escape the Unicode characters: +Either by its hexadecimal value, or its name: + .. code-block:: python print u"The integral sign: \u222B" @@ -239,7 +243,7 @@ One example: http://inamidst.com/stuff/unidata/ Using Unicode --------------- +------------- Use ``unicode`` objects in all your code @@ -251,14 +255,17 @@ Many packages do this for you: *XML processing, databases, ...* **Gotcha:** -Python has a default encoding (usually ascii) +Python has a default encoding. On Mac and Unix systems, it's usually utf-8 -- Windows? not nearly as consistent. .. code-block:: ipython - In [2]: sys.getdefaultencoding() - Out[2]: 'ascii' + In [7]: sys.getdefaultencoding() + Out[7]: 'utf-8' + +Try this on your machine, and see what you get. -The default encoding will get used in unexpected places! +The default encoding will get used in unexpected places! +Notably in text files by default. Using Unicode Everywhere ------------------------- @@ -329,12 +336,13 @@ UTF-16 Kind of like UTF-8, except it uses at least 16bits (2 bytes) for each character: NOT ASCII compatible. -But is still needs more than two bytes for some code points, so you still can't process it as two bytes per character. +But it still needs more than two bytes for some code points, so you still can't simply process it as two bytes per character. -In C/C++ held in a "wide char" or "wide string". +In C/C++, it is held in a "wide char" or "wide string". MS Windows uses UTF-16, as does (I think) Java. + UTF-16 criticism ----------------- @@ -362,7 +370,7 @@ A 1-byte per char encoding. * The most common one-byte per char encoding for European text. -* Nice property -- every byte value from 0 to 255 is a valid character ( at least in Python ) +* Nice property -- every byte value from 1 to 255 is a valid character ( at least in Python ) * You will never get an UnicodeDecodeError if you try to decode arbitrary bytes with latin-1. @@ -384,27 +392,25 @@ http://docs.python.org/howto/unicode.html "Reading Unicode from a file is therefore simple" -use io.open: +use plain old open: .. code-block:: python - from io import open - io.open('unicode.rst', encoding='utf-8') + open('unicode.rst', encoding='utf-8') for line in f: print repr(line) -(https://docs.python.org/2/library/io.html#module-interface) - -.. note: This is all for Python 2 -- the built in ``open`` in Py3 does utf-8 by default. Encodings Built-in to Python: - http://docs.python.org/2/library/codecs.html#standard-encodings + http://docs.python.org/3/library/codecs.html#standard-encodings Gotchas in Python 2 --------------------- +------------------- -file names, etc: +(Probaly do'nt need to worry about this anymore!) + +File names, etc: If you pass in unicode, you get unicode @@ -438,7 +444,7 @@ Exception messages: :download:`exception_test.py <../examples/unicode/exception_test.py>`. Unicode in Python 3 ----------------------- +------------------- The "string" object **is** Unicode (always). @@ -456,7 +462,8 @@ It's all much cleaner. (by the way, the recent implementations are very efficient...) So you can pretty much ignore encodings and all that for most basic text processing. -If you do find yourself needing to deal with binary data, you ay need to encode/decode stuff yourself. IN which case, Python provides an ``.encode()`` method on strings that encode the string to a bytes object with the encoding you select: +If you do find yourself needing to deal with binary data, you ay need to encode/decode stuff yourself. +In which case, Python provides an ``.encode()`` method on strings that encode the string to a bytes object with the encoding you select: .. code-block:: ipython @@ -477,7 +484,7 @@ It's all quite simple an robust. But there are a couple key points to remember: - * The primary people struggling were those that wrote (or wored with) libraries that had to deal with protocols that used both binary and text data in the same data stream. + * The primary people struggling were those that wrote (or worked with) libraries that had to deal with protocols that used both binary and text data in the same data stream. * As of Python 3.4 or so, the python string object had grown the features it needed to support even those ugly binary+text use cases. diff --git a/source/topics/01-setting_up/git_hints.rst b/source/topics/01-setting_up/git_hints.rst index c0ab706..5beff97 100644 --- a/source/topics/01-setting_up/git_hints.rst +++ b/source/topics/01-setting_up/git_hints.rst @@ -246,7 +246,7 @@ It's a good way to work -- branching and merging is easy enough it git that it p Above, we talked about using ``git checkout`` to restore a file to the state it was in in a previous commit, like so:: - git checkout 8e5908a37d7d examples/Session05/maillroom_test.py + git checkout 8e5908a37d7d examples/Session05/mailroom_test.py But what happens if you do a checkout with a commit, and no specific file? @@ -266,7 +266,7 @@ It does what you might expect -- puts ALL the files back the way they were at th HEAD is now at c03bb5b adding print_grid from class -So the files are set to the old state -- but now there is that note about "detached HEAD" -- this means that changes you make, even commits, will not effect the git repo. IF you want to start from here and make changes that will stick, you need to do what it says, and make a new branch. But what it DOESN'T tell you is how to simpel "re-attach" the HEAD. Turns out there is an easy way:: +So the files are set to the old state -- but now there is that note about "detached HEAD" -- this means that changes you make, even commits, will not effect the git repo. If you want to start from here and make changes that will stick, you need to do what it says, and make a new branch. But what it DOESN'T tell you is how to simply "re-attach" the HEAD. Turns out there is an easy way:: $ git checkout - Previous HEAD position was c03bb5b adding print_grid from class @@ -277,7 +277,7 @@ the dash means "the branch or commit you were on before your last checkout comma For more info about "detached HEAD", see: -https://howtogit.net/recipes/getting-out-of-detached-head-state.html +https://www.cloudbees.com/blog/git-detached-head diff --git a/source/topics/01-setting_up/github_classroom.rst b/source/topics/01-setting_up/github_classroom.rst index e932f80..8f54f6c 100644 --- a/source/topics/01-setting_up/github_classroom.rst +++ b/source/topics/01-setting_up/github_classroom.rst @@ -38,7 +38,7 @@ If you don't already have a gitHub account, or if you would prefer to create a n You will need to have git setup on the computer you will use for developing your code for this course. You can find instructions for setting up git (and the rest of your development environment) here: -:ref:`installing_python` +:ref:`setup_details` Once you have all the tools set up, you will need to create a folder (directory) within your development system for keeping your work. This is the folder where all your assignment repositories will reside. It will be helpful to keep them all together in one place. @@ -48,9 +48,17 @@ This folder (directory) should be somewhere in your "user" or "home" directory. Accepting an Assignment ----------------------- -On each assignment page there should be a link to the assignment on gitHub classroom. Click on this link, and it should take you to gitHub classroom, and allow you to "Accept this Assignment". +On each assignment page in your LMS (Canvas or Edx), there should be a link to the assignment on gitHub classroom. Click on this link, and it should take you to gitHub classroom, and allow you to "Accept this Assignment". + + +Possible Confusions: +.................... + +The first time you accept an assignment, gitHub will "invite" you to join the class organization. You will need to click the link to accept the invitation. Once you have done that the first time, you shouldn't need to do it again. However, gitHub seems to get confused, and may continue to tell you about the invitation. You can ignore it if the invitation is working. + + +When accepting the assignment, gitHub will take a little while to set it up. after waiting a minute or two, you can refresh the browser window, and you should get a link to your assignment repo. If you get an error you can do what it suggests, and go back and try to accept the assignment again. It usually works after a try or two. -.. note:: The first time you accept an assignment, gitHub will "invite" you to join the class organization. You will need to click the link to accept the invitation. Once you have done that the first time, you shouldn't need to do it again. Some Things to Consider ....................... @@ -81,7 +89,7 @@ The following is the workflow you will need to follow for each individual assign 1) Accept the Assignment ------------------------ -The first step is to click on the link for the assignment in your LMS (Canvas or Edx) -- that will take you to gitHub classroom, where you can accept the assignment. +The first step is to click on the link for the assignment in your LMS -- that will take you to gitHub classroom, where you can accept the assignment. When you accept, gitHub will create a new repository for the assignment in your gitHub account. @@ -115,10 +123,10 @@ d) Clone the repo This will create a new directory for the repository, named by the assignment and your gitHub handle -- this is where you will put all the work for that assignment. -3) Use the develop branch for your work ---------------------------------------- +3) Create a develop branch for your work +---------------------------------------- -Check out a different branch for your work. +Create and check out a new branch for your work. a) Change the working directory to the repo just created by the clone: @@ -126,18 +134,34 @@ a) Change the working directory to the repo just created by the clone: cd the_name_of_the_assignment_repo -b) Checkout the develop branch +b) Make a new branch: :: - git checkout develop - -Note: there should be a "develop" branch already in the repo. If not, you will get an error, but you can create the branch by hand by adding the ``-b`` flag: ``git checkout -b develop`` + git checkout -b develop After that command, git will be "in" the develop branch -- anything you change will only be reflected in that branch. .. note:: A git "branch" is an independent "version" of your code where you can write and change code, create and delete files, etc, and it will be kept separate from the main code. When you are happy with this version, it can be merged into the main branch. For the purposed of this course, it will not be merged into the main branch until it has been reviewed, and both you and your instructors think its done. +If you get an error from this command that says:: + + fatal: A branch named 'develop' already exists + +That means two things: + + 1) You have already created a develop branch. IN which case you chould already be using it, or you can "check it out" again: `git checkout develop` + +or + + 2) That branch was created already by gitHub classroom. Which you'd think would be nice, but it turns out that the way it's created doesn't allow the next steps: the Pull Request. THe solution in this case is to use a different name for your working branch, e.g. + +:: + + git checkout -b develop2 + +Then be sure to use the "develop2" branch when you make your PR to accept the assignment (see step 7). It doesn't really matter what you call this branch, as long as it's a new one you create. + c) Check the git status :: @@ -227,21 +251,33 @@ In order to get your changes up to gitHub you need to "push" them. It's always a Note that I am on the "develop" branch, which is what's wanted, and nothing new to commit -- all my changes have been committed -- it's time to push. :: + $ git push - Enumerating objects: 5, done. - Counting objects: 100% (5/5), done. - Delta compression using up to 4 threads - Compressing objects: 100% (3/3), done. - Writing objects: 100% (3/3), 354 bytes | 354.00 KiB/s, done. - Total 3 (delta 1), reused 0 (delta 0) - remote: Resolving deltas: 100% (1/1), completed with 1 local object. - To https://github.com/UWPCE-Py310-Fall2020/fizz-buzz-PythonCHB.git - 46d868a..fe3e479 develop -> develop + fatal: The current branch develop has no upstream branch. + To push the current branch and set the remote as upstream, use + + git push --set-upstream origin develop -.. note:: If you don't have a develop branch up on gitHUb, you will get a "fatal" Error. Scary, but it's pretty simple, really. git is telling you that it doesn't know where to push the code to -- your gitHub version of the repo doesn't have a develop branch. But it tells you want to do to create that branch on gitHub (origin), so do that: ``git push --set-upstream origin develop`` -- and you should be good to go. +Hmm -- "fatal" -- I don't like the look of that! But it's pretty simple, really. git is telling you that it doesn't know where to push the code to -- your gitHub version of the repo doesn't have a develop branch. But it tells you want to do to create that branch on gitHub (origin), so do that: -Now the local develop branch is hooked up to a develop branch on gitHub. +:: + $ git push --set-upstream origin develop + Enumerating objects: 4, done. + Counting objects: 100% (4/4), done. + Delta compression using up to 4 threads + Compressing objects: 100% (3/3), done. + Writing objects: 100% (3/3), 639 bytes | 319.00 KiB/s, done. + Total 3 (delta 0), reused 0 (delta 0) + remote: + remote: Create a pull request for 'develop' on gitHub by visiting: + remote: https://github.com/UWPCE-Py310-Fall2020/initial-setup-PythonCHB/pull/new/develop + remote: + To https://github.com/UWPCE-Py310-Fall2020/initial-setup-PythonCHB.git + * [new branch] develop -> develop + Branch 'develop' set up to track remote branch 'develop' from 'origin'. + +Good -- now the local develop branch is hooked up to a develop branch on gitHub. And it even tells you what to do next -- see the "Create a pull request for 'develop' on gitHub by visiting:" -- that's exactly what you need to do! 6) Complete the Assignment -------------------------- @@ -286,12 +322,12 @@ If you click on the "conversation" tab, you can see your initial comment and any If you click on the "files changed" tab, you will see all the changes in this PR. For this class, that should be your entire assignment. -Put a link to the PR in Canvas or EdX, to let us know that you have "turned in" the assignment. +Put a link to the PR in the LMS, to let us know that you have "turned in" the assignment. 8) Wait for review ------------------ -Once you make your PR, your instructors will be notified by gitHub (and Canvas), and will review your code. They can make general comments, or comment line by line. When a review is done, you should get an email form gitHub. But you can always go and check the PR yourself and see if anything new is there. +Once you make your PR, your instructors will be notified by gitHub (and the LMS), and will review your code. They can make general comments, or comment line by line. When a review is done, you should get an email form gitHub. But you can always go and check the PR yourself and see if anything new is there. At this point, two things might happen. @@ -335,7 +371,7 @@ I'm sure this seems like a lot, but it will get to be a habit, Here are the step 2) Clone the resulting repo onto your work machine (``git clone``) - 3) Switch to the develop branch (``git checkout develop``) + 3) Make a develop branch (``git checkout -b develop``) 4) Do the assignment in the develop branch, committing and pushing as you go. (``git add``; ``git commit -a -m "a message"``; ``git push``) @@ -349,7 +385,7 @@ I'm sure this seems like a lot, but it will get to be a habit, Here are the step Is that so bad? -Remember: this seems like a lot -- but it *does* reflect the real workflow when doing real coding. Even if you work alone, a version control system is a really good idea. +Remember: this seems like a lot -- but it *does* reflect he real workflow when doing real coding. Even if you work alone, a version control system is a really good idea. General Advice for working with git and gitHub From 522645628b130442e4e5b94847dc5321c5e79e88 Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Sun, 1 Nov 2020 12:04:02 -0800 Subject: [PATCH 06/27] added a bit more explaination to the slicing lab --- source/exercises/slicing.rst | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/source/exercises/slicing.rst b/source/exercises/slicing.rst index 6f8b19f..987c030 100644 --- a/source/exercises/slicing.rst +++ b/source/exercises/slicing.rst @@ -31,6 +31,20 @@ Your functions should look like: def exchange_first_last(seq): return a_new_sequence + +**Hint:** + +Your functions should work with ALL sequences. That means that you cannot use list methods, like ``.append``, because that won't work with strings and tuples. But all sequences support concatenation with the ``+`` operator. + +Item or Sequence? +................. + +A key difference between using a single index: ``seq[i]`` and using a slice: ``seq[i:j], seq[:i], seq[i:]`` is that using an index returns a single item, whereas a slice always returns a sequence -- even if that sequence is of length one or even empty. And concatenation requires a sequence, so make sure you use slicing if you want to concatenate the results. + +.. note:: Python "gotcha" with strings. Python does not have a character type. Instead of a character, you get a length-one string. This can cause confusion sometimes, as other sequences return a single item when you index, so when you index into a list of numbers, you get number -- which is not a list (or any type of sequence). But with strings, when you index into (or loop through) a string, you get a length-one string, which is, itself a string, and therefor a valid sequence. So: ``a_string[i] + another_string`` works, but ``a_list[i] + another_list`` does not work. + + + Tests: ------ From 03348c7b462714a3e940b165a9d864820fa6b76b Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Sun, 8 Nov 2020 23:19:41 -0800 Subject: [PATCH 07/27] fixed a couple typos. --- .../mailroom/mailroom_with_tests.rst | 14 +++++-- source/exercises/string_formatting.rst | 24 ++++++----- .../unit_testing/test_walnut_party.py | 42 +++++++------------ 3 files changed, 39 insertions(+), 41 deletions(-) diff --git a/source/exercises/mailroom/mailroom_with_tests.rst b/source/exercises/mailroom/mailroom_with_tests.rst index 6ec6ac7..9f694a7 100644 --- a/source/exercises/mailroom/mailroom_with_tests.rst +++ b/source/exercises/mailroom/mailroom_with_tests.rst @@ -19,7 +19,11 @@ Guidelines Here are some suggestions on what should be refactored in your mailroom code. -As mentioned above, testing user interaction code (code with ``print`` and ``input`` functions) is harder than testing the rest of your code. Testing user interaction code requires more advanced unit testing methodologies that will be revisited in future courses. Therefore, you should refactor your code so that the user interaction code contains as little business logic as possible. It should only interact with the user either by asking them for input or by responding to their request to print out data. Separating business logic from user interaction code is a good practice in general and we will come back to this concept in later lessons. +As mentioned above, testing user interaction code (code with ``print`` and ``input`` functions) is harder than testing the rest of your code. +Testing user interaction code requires more advanced unit testing methodologies that will be revisited in future courses. +Therefore, you should refactor your code so that the user interaction code contains as little business logic as possible. +It should only interact with the user either by asking them for input or by responding to their request to print out data. +Separating business logic from user interaction code is a good practice in general and we will come back to this concept in later lessons. The refactoring in this lesson will allow you to unit test the functions with business logic, even if you don't test the user interaction code. @@ -68,7 +72,9 @@ Send Letters ............ This function should require very little or no change to make it unit-testable. -To make it testable, you'll need to follow the same "separation of concerns" approach: the code that creates the letters should be separate from the code that prints them to the screen. This both allows you to test the letter creation, and leaves the door open to do something else with the letters: save to to a file, send as an email, etc. So the code that makes a letter likley will return a string with the entire letter contents. +To make it testable, you'll need to follow the same "separation of concerns" approach: the code that creates the letters should be separate from the code that prints them to the screen. +This both allows you to test the letter creation, and leaves the door open to do something else with the letters: save to to a file, send as an email, etc. +So the code that makes a letter likely will return a string with the entire letter contents. For example: @@ -83,7 +89,7 @@ For example: expected = "Frank, thanks a lot!" assert get_letter_text("Frank") == expected -Note that some thought should go into the test of the letter. IF it's really simple, then checking comparing to a full letter is OK. But it might be better to test the important parts of the letter: Does it contain the correct name? does it contain the right amounts of money? rather than the entire text. +Note that some thought should go into the test of the letter. If it's really simple, then simiply comparing to a full letter is OK. But it might be better to test the important parts of the letter: Does it contain the correct name? does it contain the right amounts of money? rather than the entire text. When you are done, every function in mailroom that does not contain a ``print`` or ``input`` call should be tested. @@ -91,7 +97,7 @@ And, critically: every function that contains a ``print`` or ``input`` should co Yes, that does mean that that you'll have some very simple functions like: -..code-block:: python +.. code-block:: python def print_letter(donor): print(make_letter(donor)) diff --git a/source/exercises/string_formatting.rst b/source/exercises/string_formatting.rst index 4b0efc6..ed20aea 100644 --- a/source/exercises/string_formatting.rst +++ b/source/exercises/string_formatting.rst @@ -10,21 +10,24 @@ In this exercise we will reinforce the important concepts of string formatting, Procedure ========= -Create a new file called ``strformat_lab.py`` in the exercise repo. +Create a new file called ``string_formatting.py`` in the exercise repo -- or use the one that's there, if there is one. When the empty script is available and runnable, complete the following four tasks. Task One -------- -* Write a format string that will take the following four element tuple: +* Write a format string that will take the following four values: - ``( 2, 123.4567, 10000, 12345.67)`` + ``(2, 123.4567, 10000, 12345.67)`` and produce: ``'file_002 : 123.46, 1.00e+04, 1.23e+04'`` +It should look like: + + ``print("some_stuff_in_here".format(2, 123.4567, 10000, 12345.67))`` Let's look at each of the four tuple elements in turn: @@ -61,7 +64,7 @@ So you need to find a string formatting operator that will "pad" the number with Task Two -------- -Using your results from Task One, repeat the exercise, but this time using an alternate type of format string (hint: think about alternative ways to use .format() (keywords anyone?), and also consider f-strings if you've not used them already). +Using your results from Task One, repeat the exercise, but this time use an alternate type of format string (hint: think about alternative ways to use .format() (keywords anyone?, or indexes?), and also consider f-strings if you've not used them already). Task Three @@ -87,7 +90,7 @@ Hint: You can pass in a tuple of values to a function with a ``*``: The idea here is that you may have a tuple of three numbers, but might also have 4 or 5 or 2 or.... -so you can dynamically build up the format string to accommodate the length of the tuple. +So you can dynamically build up the format string to accommodate the length of the tuple. The string object has the ``format()`` method, so you can call it with a string that is bound to a name, not just a string literal. For example: @@ -187,7 +190,7 @@ or Task Six ---------- +-------- Often it's convenient to display data in columns. String formatting helps to make this straightforward. Suppose you'd like to display something like: @@ -206,7 +209,7 @@ Then you will need to use alignment specifiers. Do some research on this using t * Write some Python code to print a table of several rows, each with a name, an age and a cost. Make sure some of the costs are in the hundreds and thousands to test your alignment specifiers. -* And for an extra task, given a tuple with 10 consecutive numbers, can you work how to quickly print the tuple in columns that are 5 charaters wide? It can be done on one short line! +* And for an extra task, given a tuple with 10 consecutive numbers, can you work how to quickly print the tuple in columns that are 5 characters wide? It can be done on one short line! Resources on string formatting @@ -227,10 +230,11 @@ https://mkaz.blog/code/python-string-format-cookbook/ Submitting Your Work ==================== -Put the file in your student directory in a new subdirectory named for this lesson, and add it to your clone early. + +Add the file to the develop brnach of your repo for this excercise. Make frequent commits with good, clear messages about what you're doing and why. -When you're done and ready for the instructors to review your work, push your changes to your gitHub fork and then go to the gitHub website and make a pull request. +When you're done and ready for the instructors to review your work, push your changes to gitHub fork and then go to the gitHub website and make a pull request. -Copy the gitHub link to the pull request, and use the +Submit Assignment link located in the top right corner to submit the URL here. +Copy the gitHub link to the pull request, and provide it to the insstructors when you submit it in your LMS. diff --git a/source/exercises/unit_testing/test_walnut_party.py b/source/exercises/unit_testing/test_walnut_party.py index 62f226d..9789afe 100644 --- a/source/exercises/unit_testing/test_walnut_party.py +++ b/source/exercises/unit_testing/test_walnut_party.py @@ -21,45 +21,33 @@ # from walnut_party import walnut_party3 as walnut_party -def test_1(): - assert walnut_party(30, False) is False +def test_too_few(): + assert not walnut_party(30, False) -def test_2(): - assert walnut_party(50, False) is True +def test_middle(): + assert walnut_party(50, False) -def test_3(): - assert walnut_party(70, True) is True +def test_too_many(): + assert walnut_party(70, True) -def test_4(): - assert walnut_party(30, True) is False +def test_middle50(): + assert walnut_party(50, True) -def test_5(): - assert walnut_party(50, True) is True +def test_upper_bound(): + assert walnut_party(60, False) -def test_6(): - assert walnut_party(60, False) is True +def test_just_too_big(): + assert not walnut_party(61, False) -def test_7(): - assert walnut_party(61, False) is False +def test_lower_bound(): + assert walnut_party(40, False) -def test_8(): - assert walnut_party(40, False) is True - - -def test_9(): +def test_just_too_small(): assert walnut_party(39, False) is False - - -def test_10(): - assert walnut_party(40, True) is True - - -def test_11(): - assert walnut_party(39, True) is False From 8275c9e5fc16bcb80891619ce009cb8561b8c391 Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Tue, 10 Nov 2020 14:45:27 -0800 Subject: [PATCH 08/27] added a link to advanced testing. --- source/exercises/mailroom/mailroom_with_tests.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/exercises/mailroom/mailroom_with_tests.rst b/source/exercises/mailroom/mailroom_with_tests.rst index 9f694a7..2ba4935 100644 --- a/source/exercises/mailroom/mailroom_with_tests.rst +++ b/source/exercises/mailroom/mailroom_with_tests.rst @@ -104,7 +104,9 @@ def print_letter(donor): But trust me -- that is a Good Thing™ +.. note:: Testing print() is rearely neccesasry if you factor your code correctly. But it would be able to test your menu code with `input()` in it. This is a pretty advanced topic, but if you want to give it a try, there is more on advanced testing here: :ref:`advanced_testing` + From d29ef297901c0214262cc5e8463b323c9ec2a88e Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Tue, 10 Nov 2020 14:47:51 -0800 Subject: [PATCH 09/27] fixed a formatting error --- source/exercises/mailroom/mailroom_with_tests.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/exercises/mailroom/mailroom_with_tests.rst b/source/exercises/mailroom/mailroom_with_tests.rst index 2ba4935..acf3c9a 100644 --- a/source/exercises/mailroom/mailroom_with_tests.rst +++ b/source/exercises/mailroom/mailroom_with_tests.rst @@ -99,8 +99,8 @@ Yes, that does mean that that you'll have some very simple functions like: .. code-block:: python -def print_letter(donor): - print(make_letter(donor)) + def print_letter(donor): + print(make_letter(donor)) But trust me -- that is a Good Thing™ From f69ce1c700573a7d7739d83cd2a8901f8763a9d4 Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Tue, 10 Nov 2020 16:24:14 -0800 Subject: [PATCH 10/27] a little clarification of the unit tested mailroom --- .../mailroom/mailroom_with_tests.rst | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/source/exercises/mailroom/mailroom_with_tests.rst b/source/exercises/mailroom/mailroom_with_tests.rst index acf3c9a..a7bc268 100644 --- a/source/exercises/mailroom/mailroom_with_tests.rst +++ b/source/exercises/mailroom/mailroom_with_tests.rst @@ -35,18 +35,24 @@ For unit testing framework you should use `pytest Date: Mon, 23 Nov 2020 23:30:01 -0800 Subject: [PATCH 11/27] updated pacakging pages. --- source/exercises/mailroom/mailroom-pkg.rst | 8 +- .../packaging/capitalize/cap_script.py | 4 - source/exercises/trigrams/test_trigrams.py | 4 + source/modules/Packaging.rst | 102 ++++++++++++------ 4 files changed, 81 insertions(+), 37 deletions(-) diff --git a/source/exercises/mailroom/mailroom-pkg.rst b/source/exercises/mailroom/mailroom-pkg.rst index 6a867d3..1888716 100644 --- a/source/exercises/mailroom/mailroom-pkg.rst +++ b/source/exercises/mailroom/mailroom-pkg.rst @@ -20,7 +20,7 @@ The first step is to re-structure your code into separate files: You should have all this pretty distinct after having refactored for the unit testing. If not, this is a good time to do it! -In addition to those three, you will want to write a top-level script file (probably called ``mailroom.py``) that does little but import the ui code and run a ``main()`` function. It should look something like this: +In addition to those three, you will want to write a top-level script file (perhaps called ``mailman.py``) that does little but import the ui code and run a ``main()`` function. It should look something like this: .. code-block:: python @@ -32,6 +32,8 @@ In addition to those three, you will want to write a top-level script file (prob Yes, that's it! This has the advantage of keeping the top-level script really simple, as it has to get put somewhere else and it can keep the "real" code in the package where it belongs. +.. note:: Be careful here -- it is important not to call your top-level script the same thing as your package, in this case ``mailroom.py``. If you do, than when installed, python will find the script, rather than the package, when you do ``import mailroom``. You can call it ``mailroom`` without the Python, but that may confuse Windows. + Making the Package ------------------ @@ -49,7 +51,7 @@ Put all these in a python package structure, something like this:: test_model.py test_cli.py bin - mailroom.py + mailman.py You will need to import the logic code from model.py in the cli code in order to use it. You can wait until you learn about mocking to write the code in test_cli.py (so you can leave that out) @@ -63,6 +65,8 @@ To get the script installed you have two options. I prefer the more straightforw But if you want to get fancy, you can use ``setuptools``'s `entry points `_ +.. note:: On Unix systems, including the Mac, the simple ``scripts`` keyword argument method works well and is simple. But it may not work as well on Windows -- it relies in your script being named ``something.py`` and that Windows is configured to run all files with ``.py`` extensions. Not all windows systems are set up this way. But the "entry points" method builds a little exe file to call your script, so it's more reliable. + Including data files -------------------- diff --git a/source/exercises/packaging/capitalize/cap_script.py b/source/exercises/packaging/capitalize/cap_script.py index 76daf96..498f88b 100755 --- a/source/exercises/packaging/capitalize/cap_script.py +++ b/source/exercises/packaging/capitalize/cap_script.py @@ -3,11 +3,7 @@ """ A really simple script just to demonstrate packaging """ - -import sys, os -import capital_mod import main - if __name__ == "__main__": main.main() diff --git a/source/exercises/trigrams/test_trigrams.py b/source/exercises/trigrams/test_trigrams.py index 00cfd8d..200bce1 100644 --- a/source/exercises/trigrams/test_trigrams.py +++ b/source/exercises/trigrams/test_trigrams.py @@ -119,6 +119,10 @@ def test_make_sentence(): as it is supposed to be random, this tests for things other than the actual results. + Which means that it does NOT test everything! This test could pass + with a very broken make_sentence function. So you should probably + add a few more things to this test. + NOTE that this test relies on the build_trigram() function, so it will fail if that doesn't work. """ diff --git a/source/modules/Packaging.rst b/source/modules/Packaging.rst index f3a0f2a..3511c60 100644 --- a/source/modules/Packaging.rst +++ b/source/modules/Packaging.rst @@ -331,9 +331,10 @@ Widely used by the scipy community: (lots of hard to build stuff that needs to work together...) * Anaconda (https://store.continuum.io/cshop/anaconda/) and `miniconda `_ + * ActivePython (http://www.activestate.com/activepython) -Anaconda has seen a LOT of growth recently -- it's based on the open-source conda packaging system, and provides both a commercial curated set of packages, and a community-developed collection of packages known as conda-forge: +Conda has seen a LOT of growth in the last few years -- it's based on the open-source conda packaging system, and provides both a commercial curated set of packages, and a community-developed collection of packages known as conda-forge: https://conda-forge.org/ @@ -548,7 +549,7 @@ You can find some additional notes here: :ref:`virtualenv_section` Building Your Own Package ========================= -The term "package" is overloaded in Python. AS defined above, it means a collection of python modules. But it often is used to refer to not just the modules themselves, but the whole collection, with documentation and tests, bundled up and installable on other systems. +The term "package" is overloaded in Python. As defined above, it means a collection of python modules. But it often is used to refer to not just the modules themselves, but the whole collection, with documentation and tests, bundled up and installable on other systems. Here are the very basics of what you need to know to make your own package. @@ -567,7 +568,7 @@ structured package eases development. What is a Package? --------------------- +------------------ **A collection of modules** @@ -583,7 +584,7 @@ What is a Package? Python packaging tools: ------------------------- +----------------------- The ``distutils``:: @@ -591,20 +592,21 @@ The ``distutils``:: Getting klunky, hard to extend, maybe destined for deprecation... -But it gets the job done -- and it does it well for the simple cases. +You really need to use ``setuptools`` these days, which fortunatly has a similar API: :: -``setuptools``: for extra features + from setuptools import setup ``pip``: for installing packages ``wheel``: for binary distributions -These last three are pretty much the standard now -- very well maintained by: +These are pretty much the standard now -- very well maintained by: "The Python Packaging Authority" -- `PaPA `_ This all continues to change quickly, see that site for up to date information. + Where do I go to figure this out? --------------------------------- @@ -684,8 +686,9 @@ Basic Package Structure: (http://docutils.sourceforge.net/rst.html) -``setup.py``: distutils script for building/installing package. +(those are all "metadata" critical if you are distributing to the world -- not so much for your own use) +``setup.py``: ``distutils``/``setuptools`` script for building/installing the package. ``bin/``: This is where you put top-level scripts @@ -697,30 +700,33 @@ Basic Package Structure: ``test/``: your unit tests. Options here: -Put it inside the package -- supports :: +Put it inside the package -- this results in the tests getting isntalled with the package, so they can be run after installation, with:: $ pip install package_name >> import package_name.test >> package_name.test.runall() -Or keep it at the top level. +or :: + + $ pytest --pyargs package_name + + +Or, if you have a lot of tests, and do not want the entire set installed with the package, you can keep it at the top level. Some notes on that: `Where to put Tests `_ The ``setup.py`` File ----------------------- +--------------------- -Your ``setup.py`` file is what describes your package, and tells the distutils how to package, build, and install it +Your ``setup.py`` file is what describes your package, and tells the setuptools how to package, build, and install it It is python code, so you can add anything custom you need to it. But in the simple case, it is essentially declarative. - ``http://docs.python.org/3/distutils/`` - An example: ........... @@ -729,12 +735,15 @@ An example: from setuptools import setup setup( + # the critical stuff name='PackageName', + packages=['package_name', 'package_name.test'], + scripts=['bin/script1','bin/script2'], + + # the good to have stuff: particularly if you are distributing it version='0.1.0', author='An Awesome Coder', author_email='aac@example.com', - packages=['package_name', 'package_name.test'], - scripts=['bin/script1','bin/script2'], url='http://pypi.python.org/pypi/PackageName/', license='LICENSE.txt', description='An awesome package that does something', @@ -745,6 +754,7 @@ An example: ], ) + ``setup.cfg`` -------------- @@ -770,7 +780,7 @@ Note that an option spelled ``--foo-bar`` on the command-line is spelled f``foo_ Running ``setup.py`` -------------------- -With a ``setup.py`` script defined, setuptools can do a lot: +With a ``setup.py`` script defined, setuptools, along with pip, can do a lot: * builds a source distribution (a tar archive of all the files needed to build and install the package):: @@ -790,6 +800,12 @@ With a ``setup.py`` script defined, setuptools can do a lot: python setup.py install +or:: + + pip install . + +(the dot means "this directory" -- pip will look in the current dir for a ``setup.py`` file) + * install in "develop" or "editable" mode:: python setup.py develop @@ -798,6 +814,7 @@ or:: pip install -e . +.. note:: setuptools can be used by itself to build and install packages. But over the years, pip has evolved to a more "modern" way of doing things. When you install from source with pip -- it is using setuptools to do the work, but it changes things around, and installs things in a more modern, up to date, and compatible way. For much use, you won't notice the difference, but it setuptools still has some old crufty ways of doing things, so it's better to use pip as a front end as much as possible. setuptools ----------- @@ -816,17 +833,18 @@ This buys you a bunch of additional functionality: * **develop mode** * a LOT more +In fact, virtually all python packages use setuptools these days, and there is currently discussion of deprecating distutils, and making setuptools "official". So you really want to use it. + http://pythonhosted.org//setuptools/ wheels -------- +------ Wheels are a binary format for packages. http://wheel.readthedocs.org/en/latest/ -Pretty simple, essentially a zip archive of all the stuff that gets put -in ``site-packages``. +Pretty simple, essentially a zip archive of all the stuff that gets installed, i.e. put in ``site-packages``. Can be just pure python or binary with compiled extensions @@ -836,17 +854,9 @@ Building a wheel:: python setup.py bdist_wheel -Create a set of wheels (a wheelhouse):: - - # Build a directory of wheels for pyramid and all its dependencies - pip wheel --wheel-dir=/tmp/wheelhouse pyramid - - # Install from cached wheels - pip install --use-wheel --no-index --find-links=/tmp/wheelhouse pyramid - ``pip install packagename`` will find wheels for Windows and OS-X and "manylinux" -``pip install --no-use-wheel`` avoids that. +``pip install --no-use-wheel`` avoids that, and forces a source install. manylinux --------- @@ -876,7 +886,6 @@ To upload your package to PyPi:: python setup.py sdist bdist_wheel upload - http://docs.python.org/2/distutils/packageindex.html NOTE: only do this if you really want to share your package with the world! @@ -885,7 +894,7 @@ NOTE: only do this if you really want to share your package with the world! Under Development ------------------ -Develop mode is *really* *really* nice:: +Develop mode (or "editable install") is *really* *really* nice:: $ python setup.py develop @@ -1127,6 +1136,36 @@ To use pkg_resources, you include the files with ``package_data`` in setup.py bu http://setuptools.readthedocs.io/en/latest/pkg_resources.html#resourcemanager-api +Command line scripts +-------------------- + +The "easy" and traditional way to isntall command line scripts is with the ``scripts`` keyword argument to the ``setup()`` command:: + + + setup(... + ... + scripts = ["bin/a_script.py"] + ... + ) + +This works well on Unix systems (including the mac), but is not as reliable on Windows. All it really does is put a slightly altered copy of the script on PATH -- so it will work if it is named with the ``.py`` extension and the system is set up to run ``.py`` files. + +entry points +............ + +A more complicated, but better maintained and robust way is to use setuptools "entry points". Entry points can provide a number of functions, but one of them is to make console scripts. Also an argument to ``setup()``, It is done like so:: + + setup( + ... + entry_points = { + 'console_scripts': ['script_name=package_name.module_name:main'], + } + ... + ) + +What this does is tell setuptools to make a little wrapper program called "script_name" that will start up python, and run the function called ``main`` in the package.module module. + + Getting Started With a New Package ---------------------------------- @@ -1147,6 +1186,7 @@ or use "Cookie Cutter": https://cookiecutter.readthedocs.io/en/latest/ + LAB: A Small Example Package ---------------------------- From 01a8dcd158fc69cca3029bd8e2d93ea071d7ec3c Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Wed, 25 Nov 2020 12:37:39 -0800 Subject: [PATCH 12/27] a bit more on including files in packages --- source/exercises/mailroom/mailroom-pkg.rst | 10 +++++----- source/modules/Packaging.rst | 6 ++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/source/exercises/mailroom/mailroom-pkg.rst b/source/exercises/mailroom/mailroom-pkg.rst index 1888716..28fe14d 100644 --- a/source/exercises/mailroom/mailroom-pkg.rst +++ b/source/exercises/mailroom/mailroom-pkg.rst @@ -50,8 +50,6 @@ Put all these in a python package structure, something like this:: __init__.py test_model.py test_cli.py - bin - mailman.py You will need to import the logic code from model.py in the cli code in order to use it. You can wait until you learn about mocking to write the code in test_cli.py (so you can leave that out) @@ -61,11 +59,13 @@ Now write your ``setup.py`` to support your package. Making the top-level script runnable ------------------------------------ -To get the script installed you have two options. I prefer the more straightforward one, `the scripts keyword argument `_ +To get the script installed you have two options. I used to prefer the more straightforward one, `the scripts keyword argument `_ -But if you want to get fancy, you can use ``setuptools``'s `entry points `_ +But it turns out that while the simple ``scripts`` keyword argument method works well and is simple, it may not work as well on Windows -- it relies in your script being named ``something.py`` and that Windows is configured to run all files with ``.py`` extensions. Not all windows systems are set up this way. But the "entry points" method builds a little exe file to call your script, so it's more reliable. -.. note:: On Unix systems, including the Mac, the simple ``scripts`` keyword argument method works well and is simple. But it may not work as well on Windows -- it relies in your script being named ``something.py`` and that Windows is configured to run all files with ``.py`` extensions. Not all windows systems are set up this way. But the "entry points" method builds a little exe file to call your script, so it's more reliable. +And the Python community has moved very much towards using setuptools entry points, so That's really the way to go now: + +http://python-packaging.readthedocs.io/en/latest/command-line-scripts.html#the-console-scripts-entry-point Including data files diff --git a/source/modules/Packaging.rst b/source/modules/Packaging.rst index 3511c60..3025046 100644 --- a/source/modules/Packaging.rst +++ b/source/modules/Packaging.rst @@ -1086,10 +1086,16 @@ I personally like the simplest one with the least magic: ... ) +This is a dict with the keys being the package(s) you want to add data files to. This is required, as a single setup command can install more than one package. The value(s) is a list of filenames, *relative to the package* - note that in the above example, the "pkg_name" is not part of the path to the file. + +WARNING: For some reason, setuptools does not give you an error or warning if it can't find the files you specify -- which is a real shame - makes it harder to debug. + https://packaging.python.org/tutorials/distributing-packages/#package-data Then you'll get the data file included in the package in the same place relative to your code regardless of how (or whether) it is installed. +.. note:: Debugging package building can be kind of tricky: if you install the package, and it doesn't work, what went wrong?!? One approach that can help is to "build" the package, separately from installing it. setuptools provides a build command: ``python setup.py build`` that does just that. It will create a ``build`` directory, and in there, a ``lib`` dir. In there is what will actually get installed -- your "built" package. So you can look there and see if your data files are getting included, and everything else about the package. + Now you'll need to write your code to find that data file. You can do that by using the ``__file__`` module attribute -- then the location of the data file will be relative to the ``__file__`` that your code is in. A little massaging with a ``pathlib.Path`` should do it. Putting the path to the data directory in the package's ``__init__.py`` provides a way for the rest of your code to find it. In ``pkg_name/__init__.py``: From 2bfd21a248de01a952b948801384b31ca04dba96 Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Sat, 28 Nov 2020 23:10:34 -0800 Subject: [PATCH 13/27] updated oo_intro example code --- source/exercises/oo_intro/report.py | 53 ++++++++++++------------ source/exercises/oo_intro/test_report.py | 34 ++++++++++++--- 2 files changed, 56 insertions(+), 31 deletions(-) diff --git a/source/exercises/oo_intro/report.py b/source/exercises/oo_intro/report.py index 3633b54..f5b3e8c 100644 --- a/source/exercises/oo_intro/report.py +++ b/source/exercises/oo_intro/report.py @@ -25,7 +25,7 @@ def __str__(self): class Report: - def __init__(self, limit: int): + def __init__(self, limit): self.limit = limit self.rows = [] @@ -44,7 +44,8 @@ def size(self): def get_number_of_pages(self): """ Get how many pages the report has; this will be based on limit variable. - If your limit=4 and rows list has 6 records then there are two pages: page1 has 4 records, page2 has 2 records + If your limit=4 and rows list has 6 records then there are two pages: + page1 has 4 records, page2 has 2 records hint: you'll want to round up """ pass @@ -75,43 +76,43 @@ def get_paged_rows(self, sort_field, page): pass -if __name__ == "__main__": - - report = Report(4) +def run_report(sort_field): + print(f"... PAGED REPORT SORTED BY: '{sort_field}'...") + page = 1 + while True: + rows = report.get_paged_rows(sort_field, page=page) - report.add_row(Row("natasha", "smith", "WA")) - report.add_row(Row("devin", "lei", "WA")) - report.add_row(Row("bob", "li", "CA")) - report.add_row(Row("tracy", "jones", "OR")) - report.add_row(Row("johny", "jakes", "WA")) - report.add_row(Row("derek", "wright", "WA")) + if not rows: + break + input(f"Press ENTER to see page {page}") - def run_report(sort_field): - print(f"... PAGED REPORT SORTED BY: '{sort_field}'...") - page = 1 - while True: - rows = report.get_paged_rows(sort_field, page=page) + print(f"PAGE: {page} of {report.get_number_of_pages()}") + print("---------------------------------------------------------------") - if not rows: - break + for row in rows: + print(row) - input(f"Press ENTER to see page {page}") + print("---------------------------------------------------------------") - print(f"PAGE: {page} of {report.get_number_of_pages()}") - print("---------------------------------------------------------------") + page += 1 - for row in rows: - print(row) - print("---------------------------------------------------------------") +if __name__ == "__main__": - page += 1 + report = Report(4) + report.add_row(Row("natasha", "smith", "WA")) + report.add_row(Row("devin", "lei", "WA")) + report.add_row(Row("bob", "li", "CA")) + report.add_row(Row("tracy", "jones", "OR")) + report.add_row(Row("johny", "jakes", "WA")) + report.add_row(Row("derek", "wright", "WA")) run_report("fname") - print(f"\n\nRemoving student: {report.rows[1].fname} [{report.rows[1].row_id}]... \n\n") + print("\n\nRemoving student: " + f"{report.rows[1].fname} [{report.rows[1].row_id}]... \n\n") report.remove_row(report.rows[1].row_id) diff --git a/source/exercises/oo_intro/test_report.py b/source/exercises/oo_intro/test_report.py index 289976a..8c705eb 100644 --- a/source/exercises/oo_intro/test_report.py +++ b/source/exercises/oo_intro/test_report.py @@ -5,9 +5,20 @@ from report import Row, Report +def example_report(report): + """ + utility function to provide a fresh report to test with + """ + report = Report(limit=4) + + populate_report(report) + return report + + def populate_report(report): """ - utility function to populate a Report with some data + utility function to populate an existing Report with + some additional data :param report: the report object to populate @@ -24,8 +35,9 @@ def populate_report(report): def test_row_init(): - """You can initialize a Row, and it stores the attributes""" - + """ + test that a new row has the proper attributes initialized + """ row1 = Row("Joe", "Camel", "WA") assert row1.fname == "Joe" @@ -42,9 +54,21 @@ def test_row_id_unique(): def test_report_length(): - report = Report(4) - populate_report(report) + """ + test report size method + """ + report = example_report() # the test data has 8 rows assert report.size() == 8 + +def test_number_of_pages(): + """ + check that the number of pages is correct + """ + report = example_report() + + assert report.get_number_of_pages() == 2 + + From 33a236d9b976e54a4dcf40ccacf0b5a1de91bc54 Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Sun, 29 Nov 2020 00:39:40 -0800 Subject: [PATCH 14/27] cleaned up and fixed a bug in Row.__str__ --- source/exercises/oo_intro/report.py | 4 +++- source/exercises/oo_intro/test_report.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/source/exercises/oo_intro/report.py b/source/exercises/oo_intro/report.py index f5b3e8c..2b9596f 100644 --- a/source/exercises/oo_intro/report.py +++ b/source/exercises/oo_intro/report.py @@ -21,7 +21,7 @@ def __init__(self, fname, lname, state): self.state = state def __str__(self): - return f"| {self.row_id} | {self.fname + ' ' + self.lname:<15} | {self.state} |" + return f"| {self.id} | {self.fname + ' ' + self.lname:<15} | {self.state} |" class Report: @@ -72,6 +72,8 @@ def get_paged_rows(self, sort_field, page): with slicing you'll want to offset your list by 4 in this case (extra hint: we can define offset as `offset = (page - 1) * self.limit`) + Remember to write tests first! You'll need a few of them to test all the + functionality. """ pass diff --git a/source/exercises/oo_intro/test_report.py b/source/exercises/oo_intro/test_report.py index 8c705eb..df51fa4 100644 --- a/source/exercises/oo_intro/test_report.py +++ b/source/exercises/oo_intro/test_report.py @@ -5,7 +5,7 @@ from report import Row, Report -def example_report(report): +def example_report(): """ utility function to provide a fresh report to test with """ From 4ea13ad278b1d25f4cc702b0d51a49fca513e347 Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Mon, 14 Dec 2020 13:39:45 -0800 Subject: [PATCH 15/27] removed an old bit of submission instructions. --- source/exercises/list_lab.rst | 27 +++---- source/exercises/mailroom/mailroom-oo.rst | 82 ++++++++++++-------- source/topics/01-setting_up/git_workflow.rst | 4 +- 3 files changed, 66 insertions(+), 47 deletions(-) diff --git a/source/exercises/list_lab.rst b/source/exercises/list_lab.rst index f4c7860..b366e56 100644 --- a/source/exercises/list_lab.rst +++ b/source/exercises/list_lab.rst @@ -29,9 +29,9 @@ to query the user for info at the command line, you use: Procedure --------- -In your student dir in the class repo, create a ``lesson03`` dir and put in a new ``list_lab.py`` file. +In the github classroom repo for this exercise, you will find a``list_lab.py`` file (if it not there, you can create it and add it to git yourself). -The file should be an executable Python script. That is to say that one +The file should be made an executable Python script. That is to say that one should be able to run the script directly like so: .. code-block:: bash @@ -50,11 +50,11 @@ should be able to run the script directly like so: The file will also need this on the first line:: - #!/usr/bin/env python3 + #!/usr/bin/env python -This is known as the "she-bang" line -- it tells the shell how to execute that file -- in this case, with ``python3`` +This is known as the "she-bang" line -- it tells the shell how to execute that file -- in this case, with ``python`` -NOTE: on Windows, there is a python launcher which, if everything is configured correctly will look at that line to know you want python3 if there is more than one python on your system. +NOTE: on Windows, there is a python launcher which, if everything is configured correctly will look at that line to know you want python if there is more than one python on your system. If this doesn't work on Windows, just run the file some other way: @@ -63,14 +63,11 @@ If this doesn't work on Windows, just run the file some other way: - from your IDE or editor is you are using one -Add the file to your clone of the repository and commit changes frequently +Make sure the file is added to your clone of the repository and commit changes frequently while working on the following tasks. When you are done, push your changes to -GitHub and issue a pull request. +GitHub and issue a pull request to let the instructors know it is ready for review. -(if you are still struggling with git -- just write the code for now). - -When the script is run, it should accomplish the following four series of -actions: +When the script is run, it should accomplish the following four series of actions: Series 1 -------- @@ -79,8 +76,8 @@ Series 1 - Display the list (plain old ``print()`` is fine...). - Ask the user for another fruit and add it to the end of the list. - Display the list. -- Ask the user for a number and display the number back to the user and the - fruit corresponding to that number (on a 1-is-first basis). Remember that Python uses zero-based indexing, so you will need to correct. +- Ask the user for a number and display the number back to the user + and the fruit corresponding to that number (on a 1-is-first basis). Remember that Python uses zero-based indexing, so you will need to correct for that. - Add another fruit to the beginning of the list using "+" and display the list. - Add another fruit to the beginning of the list using ``insert()`` and display the list. @@ -105,8 +102,8 @@ Again, using the list from series 1: - Ask the user for input displaying a line like "Do you like apples?" for each fruit in the list (making the fruit all lowercase). - For each "no", delete that fruit from the list. -- For any answer that is not "yes" or "no", prompt the user to answer with one - of those two values (a while loop is good here) +- For any answer that is not "yes" or "no", prompt the user to answer + with one of those two values (a while loop is good here) - Display the list. Series 4 diff --git a/source/exercises/mailroom/mailroom-oo.rst b/source/exercises/mailroom/mailroom-oo.rst index 0a84e9b..5484002 100644 --- a/source/exercises/mailroom/mailroom-oo.rst +++ b/source/exercises/mailroom/mailroom-oo.rst @@ -8,9 +8,7 @@ Making Mailroom Object Oriented. **Goal:** Refactor the mailroom program using classes to help organize the code. -The functionality is the same as the earlier mailroom: - -:ref:`exercise_mailroom_part1` +The functionality is the same as the earlier mailroom(s). But this time, we want to use an OO approach to better structure the code to make it more extensible. @@ -32,6 +30,9 @@ As you design appropriate classes, keep in mind these three guidelines for good There should be no use of the ``input()`` function in the classes that hold the data! Nor any use of ``print()`` -- these are for user interaction, and you want the data handling code to be potentially usable with totally different user interaction -- such as a desktop GUI or Web interface. +In the spirit of separation of concerns, you also want keep your Command Line Interface code in a separate file(s), as they already should be in your mailroom-as-a-package version. In fact, you should be able to keep the structure of your package pretty much the same -- simply replacing the model code with classes. + + 3) As always: **DRY** (Don't Repeat Yourself): Anywhere you see repeated code; refactor it! @@ -52,7 +53,14 @@ For this simple problem, simple tuples could work fine. However, in order for th So now you have to think about using a dict or class. Again for flexibility, a dict is a bit easier; you can add fields to it very easily. However, with a class, you can build some functionality in there, too. This is where encapsulation comes in. For instance, one thing you might want to do is get the total of all donations a donor has made in the past. If you add a method to compute that (or a property!), then the rest of the code doesn't need to know how the donations are stored. -Consider ``data[0]`` vs ``data["name"]`` vs ``data.name``. Which one is more readable? Keep in mind that another benefit of using OO for data encapsulation is ability of modern IDEs to provide auto-completion, which reduces the number of bugs and helps to produce code faster. +Consider ``data[0]`` (stored in a tuple) vs ``data["name"]`` (stored in a dict) vs ``data.name`` (a class). +Which one is more readable? +Keep in mind that another benefit of using OO for data encapsulation is ability of modern IDEs to provide auto-completion, which reduces the number of bugs and helps to produce code faster. + +Another way to think about it is "data" vs "code" -- dicts are for data, classes are for code. +Sometimes it's not totally clear which is which, but if you think about how static is, that can be be a guide. +In this example, every donor is going to have a name, and a donation history, and maybe in the future a bunch of other information (address, email, phone number ....). +Whatever it is, every donor will have the same set -- so it's good to use code to manage it. Below are more detailed suggestions on breaking down your existing code into multiple modules that will be part of a single mailroom program. @@ -60,26 +68,32 @@ Below are more detailed suggestions on breaking down your existing code into mul Modules and Classes ................... -You may organize your code to your preference and keep it simple by having all of the code in a single file. +You may organize your code to your preference and keep it simple by having all of the model code in a single file. But you should at least separate the code that manipulates data (the "model" code) from the command line interface code, as you did for mailroom-as-a-package. -Optionally, you could organize your code into modules, which helps to keep code organized and re-usable. +Optionally, you could further organize your model code into separate modules: maybe one for the Donor object, one for the DonorCollection object. What is a module? A module is a python file with a collection of code that can be imported into other python files. Modules can contain functions, classes, and even variables (constants). -Here is an example file structure for ``mailroom_oo`` package that contains 3 modules: +Here is an example file structure for ``mailroom_oo`` package -- it should be similar to what you already have: -.. code-block:: bash +:: - └── mailroom_oo - ├── cli_main.py - ├── donor_models.py - └── test_mailroom_oo.py + └── mailroom + ├── __init__.py + ├── cli.py + ├── model.py + └── tests + ├── __init__.py + ├── test_cli.py + └── test_model.py -The module ``donor_models.py`` can contain the ``Donor`` and ``DonorCollection`` classes. -The module ``cli_main.py`` would include all of your user interaction functions and main program flow. +The module ``model.py`` can contain the ``Donor`` and ``DonorCollection`` classes. + +The module ``cli.py`` would include all of your user interaction functions and main program flow (and a ``main()`` function that can be called to start up the program (and used as an entry_point). + ``Donor`` Class ............... @@ -117,7 +131,9 @@ This design allows you to quickly look up donor by their name and get a donor ob Another option is to simply use a list of donor objects. You get to choose which you think is more appropriate. -Remember that you should use `self.donors` attribute any time you want to work with data about a single donor, most of your methods in this class will utilize it in some way. This is really what classes are desined for. +Remember that you should use `self.donors` attribute in any methods that need access the individual donors. Most of your methods in this class will utilize it in some way. This is really what classes are designed for. + +Note that external code probably shouldn't access the ``.donors`` list (or dict, or ...) directly but rather ask the DonorCollection class for the information it needs: e.g. if you need to add a new donation to a particular donor, calla method like ``find_donor()`` to get the donor you want, and then work with that Donor object directly. **Examples:** @@ -125,17 +141,15 @@ Generating a thank you letter to a donor only requires knowledge of that one don Generating a report about all the donors requires knowledge of all the donors, so that code belongs in the ``DonorCollection`` class. -Hint: -You've previously sorted simple data structures like list and dictionaries, but here we're dealing with objects - not to worry that is a really simple thing to do with python! -You can use `operator.attrgetter` with a sorted function (review python docs for usage documentation). +.. note:: You've previously sorted simple data structures like list and dictionaries, but here we're dealing with objects -- not to worry, that is a really simple thing to do with python! You can use ``operator.attrgetter`` with the ``sorted`` function (review the python docs for usage documentation) to make it easy to sort based on various attributes of a Donor. + Command Line Interface ....................... **Module responsible for main program flow (CLI - Command Line Interface)** -Let's call this module ``cli_main.py`` to represent the entry point for the mailroom program. -This module will be using the classes we defined: ``Donor`` and ``DonorCollection``. +Let's call this module ``cli.py``. This module will be using the classes we defined: ``Donor`` and ``DonorCollection``. It will also handle interaction with the user via the ``input`` function calls that gather user input and to provide the output to the console. What should go into this module? @@ -152,6 +166,10 @@ The idea here is that we should be able to fairly easy replace this CLI program such as a GUI (Graphical User Interface), without having to make any changes to our data classes. If that was the case, then you would implement the GUI elements and use your data classes the same way as they are used in CLI. +Note that this arrangement is a one-way street: the CLI code will need to know about the Donor and DonorCollection classes, but the model code shouldn't need to know anything about the CLI code: it manages the information, and returns what's asked for (like a donor letter or report), but it doesn't know what is done with that information. + +In short: the cli.py module will import the model module, but the model module shouldn't import the cli module. + Test-Driven Development ----------------------- @@ -170,15 +188,15 @@ That is, rather than take a non-OO function and try to make it a method of a cla You should expect to re-use a lot of the command line interface code, while refactoring most of the logic code. -If you are not sure at the start what functionality you data classes will need, you can start with the CLI code, and as you find the need for a function, add it to your data classes (after writing a test first, of course). +If you are not sure at the start what functionality you data classes will need, you can start with the CLI code, and as you find the need for a function, add it to your model classes (after writing a test first, of course). Exercise Guidelines =================== -OO mailroom is the final project for the class. +OO mailroom is the final step in the mailroom project. And you are near the end of the class. -So this is your chance to really do things "right". Strive to make this code as good, by every definition, as you can. +So this is your chance to really do things "right". Strive to make this code as good, by every definition, as you can. If you have gotten feedback from your instructors, now is the chance to incorporate recommended changes. With that in mind: @@ -209,9 +227,9 @@ Functionality - You should be able to re-use all the logic code with a different UI -- Web App, GUI, etc. - - There should be no ``input()`` or ``print`` functions in the logic code. + - There should be no ``input()`` or ``print()`` functions in the logic code. - - The logic code should be 100% testable (without mocking input() or any fancy stuff like that) + - The logic code should be 100% testable (without mocking ``input()`` or any fancy stuff like that) .. rubric:: Testing @@ -231,9 +249,8 @@ Functionality .. rubric:: The "soft" stuff: Style: - - conform to PEP8! (or another consistent style) - - - You can use 95 or some other reasonable number for line length + - Conform to PEP8! (or another consistent style) + (You can use 95 char or some other reasonable number for line length) Docstrings: Functions and classes should all have good docstrings. They can be very short if the function does something simple. @@ -241,13 +258,16 @@ Docstrings: Naming: All classes, functions, methods, attributes, variables should have appropriate names: meaningful, but not too detailed. + Extra Ideas: ------------ In case you are bored -- what features can you add? -* How about an html report using your html_render code? - * Fancier reporting -* The sky's the limit +* More error checking -- does the user really want to create a new donor? or was it a typo in the donor name? + +* The next project is an html renderer -- maybe use it to make a nice html report? + +* The sky's the limit! diff --git a/source/topics/01-setting_up/git_workflow.rst b/source/topics/01-setting_up/git_workflow.rst index 47dc3f4..763dead 100644 --- a/source/topics/01-setting_up/git_workflow.rst +++ b/source/topics/01-setting_up/git_workflow.rst @@ -1,6 +1,7 @@ :orphan: .. NOTE: This is the "old" version, before we adopted gitHub Classroom +.. It is not currently published. .. _git_workflow: @@ -9,7 +10,7 @@ git Workflow Git is a very flexible system that can be used in a lot of different ways to manage code development. This page describes the workflow we are using for this class -- about as simple a workflow as you can have with git. -We start with an overview of the usual process. This overview may be all you need for future work, once you have created your home directory within the students directory. +We start with an overview of the usual process. This overview may be all you need for future work, once you have set up git on your workstation. The instructions following the overview are very explicit for those new to git and the command line. @@ -18,6 +19,7 @@ The usual process This is the usual series of steps you will want to go through when you do a new project / assignment. + First make sure you are on the command line "in" your copy of the class repo. Remember that ``git status`` is your friend -- when in doubt, run that command to see what's going on in your repo. From 0b172a4e4ee7b0660dbcf8b6213a9d94e7e73e5b Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Sun, 27 Dec 2020 21:40:08 -0800 Subject: [PATCH 16/27] clarify the script entry point. --- source/exercises/mailroom/mailroom-pkg.rst | 79 +++++++++++++--------- source/exercises/python_pushups.rst | 3 +- 2 files changed, 50 insertions(+), 32 deletions(-) diff --git a/source/exercises/mailroom/mailroom-pkg.rst b/source/exercises/mailroom/mailroom-pkg.rst index 28fe14d..faa8a62 100644 --- a/source/exercises/mailroom/mailroom-pkg.rst +++ b/source/exercises/mailroom/mailroom-pkg.rst @@ -10,29 +10,25 @@ Code Structure Start with your existing version of mailroom. -It should already be structured with the "logic" code distinct from the user interface (yes, a command line *is* a user interface). But you may have it all in one file. This isn't *too* bad for such a small program, but as a program grows, you really want to keep things separate, in a well organized package. +It may already be structured with the "logic" code distinct from the user interface (yes, a command line *is* a user interface). But you may have it all in one file. This isn't *too* bad for such a small program, but as a program grows, you really want to keep things separate, in a well organized package. The first step is to re-structure your code into separate files: - - one (or more) for the logic code: the code than manipulates the data - - one for the user-interface code: the code with the interactive loops and all the "input" and "print" statements - - one (or more) for tests. + - One (or more) for the logic code: the code that manipulates the data + - One for the user-interface code: the code with the interactive loops and all the "input" and "print" statements + - One (or more) for the unit tests. You should have all this pretty distinct after having refactored for the unit testing. If not, this is a good time to do it! -In addition to those three, you will want to write a top-level script file (perhaps called ``mailman.py``) that does little but import the ui code and run a ``main()`` function. It should look something like this: +In addition to those three, you will need a single function to call that will start the program. +That can be defined in a new file, as a "script", but for something as simple as this, it can be in with your interface code. +That file can then have an ``if __name__ == "__main__"`` block +which should be as simple as: .. code-block:: python - #!/usr/bin/env python - from mailman import cli - if __name__ == "__main__": - cli.main() - -Yes, that's it! This has the advantage of keeping the top-level script really simple, as it has to get put somewhere else and it can keep the "real" code in the package where it belongs. - -.. note:: Be careful here -- it is important not to call your top-level script the same thing as your package, in this case ``mailroom.py``. If you do, than when installed, python will find the script, rather than the package, when you do ``import mailroom``. You can call it ``mailroom`` without the Python, but that may confuse Windows. + main() Making the Package @@ -51,9 +47,10 @@ Put all these in a python package structure, something like this:: test_model.py test_cli.py -You will need to import the logic code from model.py in the cli code in order to use it. You can wait until you learn about mocking to write the code in test_cli.py (so you can leave that out) +You will need to import the logic code from model.py in the cli code in order to use it. +You can wait until you learn about mocking to write the code in test_cli.py (so you can leave that out) -Now write your ``setup.py`` to support your package. +Now write a ``setup.py`` file to support the installation of your package. Making the top-level script runnable @@ -61,17 +58,42 @@ Making the top-level script runnable To get the script installed you have two options. I used to prefer the more straightforward one, `the scripts keyword argument `_ -But it turns out that while the simple ``scripts`` keyword argument method works well and is simple, it may not work as well on Windows -- it relies in your script being named ``something.py`` and that Windows is configured to run all files with ``.py`` extensions. Not all windows systems are set up this way. But the "entry points" method builds a little exe file to call your script, so it's more reliable. +But it turns out that while the simple ``scripts`` keyword argument method works well and is simple, it may not work as well on Windows -- it relies in your script being named ``something.py`` and that Windows is configured to run all files with ``.py`` extensions. Not all windows systems are set up this way. But the "entry points" method builds a little ``.exe`` file to call your script, so it's more reliable. -And the Python community has moved very much towards using setuptools entry points, so That's really the way to go now: +And the Python community has moved very much towards using setuptools entry points, so that's really the way to go now: http://python-packaging.readthedocs.io/en/latest/command-line-scripts.html#the-console-scripts-entry-point +In this case, that will look a lot like this: + +.. code-block:: python + + entry_points={'console_scripts': ['mailroom=mailroom.cli:main']}, + +That's a bit complicated, so I'll break it down for you. In this case, we only want a single script, but setuptools allows multiple types of entry points, and multiple instances of each type (e.g. you can have more than one script) to the code, so the argument is a potentially large dictionary. +The keys of the dict are the various types of entry points. +In this case, we want a single script that can be run in a terminal (or "console"), so we have a dict with one key: ``console_scripts``. + +The value of that entry is a list of strings -- each one describing the console script. This string is of the form:: + + SCRIPTNAME=MODULE:FUNCTION_NAME + +setuptools will create a wrapper script with the name given, and that wrapper will call the function in the module that is specified. +So: ``'mailroom=mailroom.cli:main'`` means: create a start up script called "mailroom" that will then call the ``main`` function in the ``cli`` module in the ``mailroom`` package. + +Once this is all set up, and you install the package (either in editable mode or not):: + + pip install -e ./ + +you should then be able to type "mailroom" at the command line and have your program run. + -Including data files +Including Data Files -------------------- -NOTE: If you have a database of donors in a file that you load, then that should go in the package as well. Probably inside the mailroom dir, in a ``data`` dir or similar. Then you need to add it to your setup.py to make sure it gets copied into the installed package. +If you have a database of donors in a file that you load, then that should go in the package as well. Probably inside the mailroom dir, in a ``data`` dir or similar. Then you need to add it to your setup.py to make sure it gets copied into the installed package. + +(If you are not saving the donor data to a file -- that's fine. You can ignore this section for now) There are a few ways to do this: @@ -83,7 +105,10 @@ I personally like the simplest one with the least magic: Then you'll get the data file included in the package in the same place. -Now you'll need to write your code to find that data file. You can do that by using the __file__ module attribute -- then the location of the data file will be relative to the __file__ that your code is in. A little massaging with a ``pathlib.Path`` should do it. +Now you'll need to write your code to find that data file. +You can do that by using the ``__file__`` module attribute, which is the path to a python module at run time -- then the location of the data file will be relative to the path that your code is in. +A little massaging with a ``pathlib.Path`` should do it. + Testing your Package -------------------- @@ -104,7 +129,7 @@ When that is done, you should be able to run the top-level script from anywhere: .. code-block:: bash - $ mailroom.py + $ mailroom and run the test from within the package: @@ -112,15 +137,7 @@ and run the test from within the package: $ pytest --pyargs mailroom -If you installed in editable mode, then you can update the code and re-run the tests or the script, and it will use the new code right away. - - - - - - - - - +(or run the tests from the test dir as well) +If you installed in editable mode, then you can update the code and re-run the tests or the script, and it will use the new code right away. diff --git a/source/exercises/python_pushups.rst b/source/exercises/python_pushups.rst index 39b4e5b..61f13bc 100644 --- a/source/exercises/python_pushups.rst +++ b/source/exercises/python_pushups.rst @@ -4,7 +4,8 @@ Python Pushups ############## -These are a couple exercises to kick you off with Python +These are a quick exercise to kick you off with Python: + Explore Errors ============== From 3442eb7304c4d3b4ef84b81be4443139f8765d25 Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Mon, 8 Feb 2021 23:26:18 -0800 Subject: [PATCH 17/27] moved tag rendering out of loops in examples --- .../html_renderer/html_renderer_tutorial.rst | 58 +++++++++++-------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/source/exercises/html_renderer/html_renderer_tutorial.rst b/source/exercises/html_renderer/html_renderer_tutorial.rst index 762688c..7600acd 100644 --- a/source/exercises/html_renderer/html_renderer_tutorial.rst +++ b/source/exercises/html_renderer/html_renderer_tutorial.rst @@ -110,13 +110,13 @@ But this one failed: assert file_contents.startswith("") assert file_contents.endswith("") -OK -- this one really does something real -- it tries to render an html element -- which did NOT pass -- so it's time to put some real functionality in the Element class. +OK -- this one really does something real -- it tries to render an html element -- which did NOT pass -- so it's time to put some real functionality in the ``Element`` class. This is the code: .. code-block:: python - class Element(object): + class Element: def __init__(self, content=None): pass @@ -139,7 +139,7 @@ So we need to add a tiny bit of code: .. code-block:: python - class Element(object): + class Element: tag = "html" @@ -492,7 +492,8 @@ Part A .. rubric:: Instructions: -"Create a couple subclasses of ``Element``, for each of ````, ````, and ``

`` tags. All you should have to do is override the ``tag`` class attribute (you may need to add a ``tag`` class attribute to the ``Element`` class first, if you haven't already)." +"Create a couple subclasses of ``Element``, for each of ````, ````, and ``

`` tags. +All you should have to do is override the ``tag`` class attribute (you may need to add a ``tag`` class attribute to the ``Element`` class first, if you haven't already)." So this is very straightforward. We have a class that represents an element, and the only difference between basic elements is that they have a different tag. For example:: @@ -509,7 +510,9 @@ and::

-The ```` tag is for the entire contents of an html page, and the ``

`` tag is for a paragraph. But you can see that the form of the tags is identical, so we don't have to change much to make classes for these tags. In fact, all we need to change is the ``tag`` class attribute. +The ```` tag is for the entire contents of an html page, and the ``

`` tag is for a paragraph. +But you can see that the form of the tags is identical, so we don't have to change much to make classes for these tags. +In fact, all we need to change is the ``tag`` class attribute. Before we do that -- let's do some test-driven development. Uncomment the next few tests in ``test_html_render.py``: ``test_html``, ``test_body``, and ``test_p``, and run the tests:: @@ -546,7 +549,8 @@ Before we do that -- let's do some test-driven development. Uncomment the next f ====================== 3 failed, 4 passed in 0.08 seconds ====================== So we have three failures. Of course we do, because we haven't written any new code yet! -Yes, this is pedantic, and there is no real reason to run tests you know are going to fail. But there is a reason to *write* tests that you know are going to fail, and you have to run them to know that you have written them correctly. +Yes, this is pedantic, and there is no real reason to run tests you know are going to fail. +But there is a reason to *write* tests that you know are going to fail, and you have to run them to know that you have written them correctly. Now we can write the code for those three new element types. Try to do that yourself first, before you read on. @@ -664,24 +668,28 @@ Uncomment ``test_subelement`` in the test file, and run the tests:: out_file = <_io.StringIO object at 0x10325b5e8> def render(self, out_file): + out_file.write("<{}>\n".format(self.tag)) # loop through the list of contents: for content in self.contents: - out_file.write("<{}>\n".format(self.tag)) > out_file.write(content) E TypeError: string argument expected, got 'P' html_render.py:26: TypeError ====================== 1 failed, 7 passed in 0.11 seconds ====================== -Again, the new test failed; no surprise because we haven't written any new code yet. But do read the report carefully; it did not fail on an assert, but rather with a ``TypeError``. The code itself raised an exception before it could produce results to test. +Again, the new test failed; no surprise because we haven't written any new code yet. +But do read the error report carefully; it did not fail on an assert, but rather with a ``TypeError``. The code itself raised an exception before it could produce results to test. So now it's time to write the code. Look at where the exception was raised: line 26 in my code, inside the ``render()`` method. The line number will likely be different in your code, but it probably failed on the render method. Looking closer at the error:: > out_file.write(content) E TypeError: string argument expected, got 'P' -It occurred in the file ``write`` method, complaining that it expected to be writing a string to the file, but it got a ``'P'``. ``'P'`` is the name of the paragraph element class. -So we need a way to write an element to a file. How might we do that? Inside the element's render method, we need to render an element... +It occurred in the file ``write`` method, complaining that it expected to be writing a string to the file, but it got a ``'P'``. +``'P'`` is the name of the paragraph element class. +So we need a way to write an element to a file. How might we do that? + +Inside the element's render method, we need to render an element... Well, elements already know how to render themselves. This is what is meant by a recursive approach. In the ``render`` method, we want to make use of the ``render`` method itself. @@ -696,25 +704,25 @@ it becomes clear -- we render an element by passing the output file to the eleme .. code-block:: python def render(self, out_file): + out_file.write("<{}>\n".format(self.tag)) # loop through the list of contents: for content in self.contents: - out_file.write("<{}>\n".format(self.tag)) out_file.write(content) out_file.write("\n") - out_file.write("\n".format(self.tag)) + out_file.write("\n".format(self.tag)) So let's update our render by replacing that ``out_file.write()`` call with a call to the content's ``render`` method: .. code-block:: python def render(self, out_file): + out_file.write("<{}>\n".format(self.tag)) # loop through the list of contents: for content in self.contents: - out_file.write("<{}>\n".format(self.tag)) # out_file.write(content) content.render(out_file) out_file.write("\n") - out_file.write("\n".format(self.tag)) + out_file.write("\n".format(self.tag)) And let's see what happens when we run the tests:: @@ -779,20 +787,21 @@ There are a number of approaches you can take. This is a good time to read the n You may want to try one of the more complex methods, but for now, we're going to use the one that suggests itself from the error. We need to know whether we want to call a ``render()`` method, or simply write the content to the file. How would we know which to do? Again, look at the error: + We tried to call the render() method of a piece of content, but got an ``AttributeError``. So the way to know whether we can call a render method is to try to call it -- if it works, great! If not, we can catch the exception, and do something else. In this case, the something else is to try to write the content directly to the file: .. code-block:: python def render(self, out_file): + out_file.write("<{}>\n".format(self.tag)) # loop through the list of contents: for content in self.contents: - out_file.write("<{}>\n".format(self.tag)) try: content.render(out_file) except AttributeError: out_file.write(content) out_file.write("\n") - out_file.write("\n".format(self.tag)) + out_file.write("\n".format(self.tag)) And run the tests again:: @@ -815,7 +824,7 @@ So what are the downsides to this method? Well, there are two: 1. When we successfully call the ``render`` method, we have no idea if it's actually done the right thing -- it could do anything. If someone puts some completely unrelated object in the content list that happens to have a ``render`` method, this is not going to work. But what are the odds of that? -2. This is the bigger one: if the object *HAS* a render method, but that render method has something wrong with it, then it could conceivably raise an ``AttributeError`` itself, but it would not be the Attribute Error we are expecting. The trick here is that this is very hard to debug. +2. This is the bigger one: if the object *HAS* a render method, but that render method has something wrong with it, then it could conceivably raise an ``AttributeError`` itself, but it would not be the ``AttributeError`` we are expecting. The trick here is that this can be very hard to debug. However, we are saved by tests. If the render method works in all the other tests, It's not going to raise an ``AttributeError`` only in this case. Another reason to have a good test suite. @@ -965,14 +974,14 @@ So how do we get this test to pass? We need a new render method for ``OneLineTag class OneLineTag(Element): def render(self, out_file): + out_file.write("<{}>".format(self.tag)) # loop through the list of contents: for content in self.contents: - out_file.write("<{}>".format(self.tag)) try: content.render(out_file) except AttributeError: out_file.write(content) - out_file.write("\n".format(self.tag)) + out_file.write("\n".format(self.tag)) Notice that I left the newline in at the end of the closing tag -- we do want a newline there, so the next element won't get rendered on the same line. And the tests:: @@ -1109,7 +1118,7 @@ Now that we know how to initialize an element with attributes, and how it should # but it starts the same: assert file_contents.startswith("\n") out_file.write("".join(open_tag)) @@ -1205,7 +1213,7 @@ Note that I added a space after the ``p`` in the test. Now my test is failing on A paragraph of text

-However, my code for rendering the opening tag is a bit klunky -- how about yours? Perhaps you'd like to refactor it? Before you do that, you might want to make your tests a bit more robust. This is really tricky. It's very hard to test for everytihng that might go wrong, without nailing down the expected results too much. For example, in this case, we haven't tested that there is a space between the two attributes. In fact, this would pass our test:: +However, my code for rendering the opening tag is a bit klunky -- how about yours? Perhaps you'd like to refactor it? Before you do that, you might want to make your tests a bit more robust. This is really tricky. It's very hard to test for everything that might go wrong, without nailing down the expected results too much. For example, in this case, we haven't tested that there is a space between the two attributes. In fact, this would pass our test::

A paragraph of text @@ -1315,7 +1323,7 @@ You'll need to override the ``render()`` method: What needs to be there? Well, self closing tags can have attributes, same as other elements. So we need a lot of the same code here as with the other ``render()`` methods. You could copy and paste the ``Element.render()`` method, and edit it a bit. But that's a "Bad Idea" -- remember DRY (Don't Repeat Yourself)? You really don't want two copies of that attribute rendering code you worked so hard on. -How do we avoid that? We take advantage of the power of subclassing. If you put the code to render the opening (and closing) tags in it's own method, then we can call that method from multiple render methods, something like: +How do we avoid that? We take advantage of the power of subclassing. If you put the code to render the opening (and closing) tags in its own method, then we can call that method from multiple render methods, something like: .. code-block:: python From b1c2a488afb722be82c58d9e34528617838107aa Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Wed, 10 Feb 2021 22:31:45 -0800 Subject: [PATCH 18/27] cleaned up a few typos. --- source/exercises/html_renderer/html_renderer_tutorial.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/exercises/html_renderer/html_renderer_tutorial.rst b/source/exercises/html_renderer/html_renderer_tutorial.rst index 7600acd..f34f2c4 100644 --- a/source/exercises/html_renderer/html_renderer_tutorial.rst +++ b/source/exercises/html_renderer/html_renderer_tutorial.rst @@ -261,12 +261,12 @@ So the method looks something like this: .. code-block:: python def render(self, out_file): + out_file.write("<{}>\n".format(self.tag)) # loop through the list of contents: for content in self.contents: - out_file.write("<{}>\n".format(self.tag)) out_file.write(content) out_file.write("\n") - out_file.write("\n".format(self.tag)) + out_file.write("\n".format(self.tag)) Now run the tests again:: @@ -854,7 +854,7 @@ OK, that should have been straightforward. Now this part: Some html elements don't tend to have a lot of content, such as the document title. So it makes sense to render them all on one line. This is going to require a new render method. Since there are multiple types of elements that should be rendered on one line, we want to create a base class for all one-line elements. It should subclass from ``Element``, and override the render method with a new one, which will be pretty much the same as the main ``Element`` method, but without the newlines. -Before we do that though -- let's write a test for that! Because the ``ONeLineTag`` class is a base class for actual elements that should be rendered on one line, we really don't need to write a test directly for it. We can write one for its first subclass: ``Title``. The title elements should be rendered something like this:: +Before we do that though -- let's write a test for that! Because the ``OneLineTag`` class is a base class for actual elements that should be rendered on one line, we really don't need to write a test directly for it. We can write one for its first subclass: ``Title``. The title elements should be rendered something like this:: PythonClass - title example From e04369f9ecc7ab579c8d4e2f09a4dbefb849d349 Mon Sep 17 00:00:00 2001 From: Natasha Date: Sun, 7 Mar 2021 12:54:52 -0800 Subject: [PATCH 19/27] Update Packaging.rst --- source/modules/Packaging.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/modules/Packaging.rst b/source/modules/Packaging.rst index 3025046..9b5524a 100644 --- a/source/modules/Packaging.rst +++ b/source/modules/Packaging.rst @@ -405,7 +405,7 @@ Current State of Packaging To build packages: setuptools ............................. - * https://pythonhosted.org/setuptools/ + * https://setuptools.readthedocs.io/en/latest/ setuptools provides extensions to the build-in distutils: From 9a212445c88cd600a71ddbea30641230c53ec137 Mon Sep 17 00:00:00 2001 From: Natasha Date: Sun, 14 Mar 2021 12:06:17 -0700 Subject: [PATCH 20/27] clarify data structure example --- source/exercises/mailroom/mailroom_tutorial.rst | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source/exercises/mailroom/mailroom_tutorial.rst b/source/exercises/mailroom/mailroom_tutorial.rst index 4d9cc8e..9c2f9ff 100644 --- a/source/exercises/mailroom/mailroom_tutorial.rst +++ b/source/exercises/mailroom/mailroom_tutorial.rst @@ -136,12 +136,14 @@ Here is a potential data structure to consider: .. code-block:: python - donor_db = [("William Gates, III", [653772.32, 12.17]), + donor_db = [("William Gates, III", [100.0, 120.10]), ("Jeff Bezos", [877.33]), - ("Paul Allen", [663.23, 43.87, 1.32]), - ("Mark Zuckerberg", [1663.23, 4300.87, 10432.0]), + ("Paul Allen", [663.23, 343.87, 411.32]), + ("Mark Zuckerberg", [1660.23, 4320.87, 10432.0]), ] +Here we have the first item in a tuple as a donor name, which we will use to determine if we need to add to existing donor or add a new one and the second item is a list of donation values. + Why choose tuples for the inner donor record? Well, another part of using the right data structure is to reduce bugs; you are setting clear expectations that a single donor entry only contains two items. From 9b30e8cf6ccc901c01476660f3c6905dd663eb61 Mon Sep 17 00:00:00 2001 From: danieldh206 Date: Mon, 10 May 2021 22:32:06 -0700 Subject: [PATCH 21/27] Update html_renderer_tutorial.rst Line 269 needs to be correct so lines 324 through 329 are correct. Daniel --- source/exercises/html_renderer/html_renderer_tutorial.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/exercises/html_renderer/html_renderer_tutorial.rst b/source/exercises/html_renderer/html_renderer_tutorial.rst index f34f2c4..6539107 100644 --- a/source/exercises/html_renderer/html_renderer_tutorial.rst +++ b/source/exercises/html_renderer/html_renderer_tutorial.rst @@ -266,7 +266,7 @@ So the method looks something like this: for content in self.contents: out_file.write(content) out_file.write("\n") - out_file.write("\n".format(self.tag)) + out_file.write("\n".format(self.tag)) Now run the tests again:: From 5ffb85ae224a48a65876e83c969635741d306982 Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Thu, 6 Jan 2022 20:44:10 -0800 Subject: [PATCH 22/27] fixed some typos --- source/modules/Decorators.rst | 3 +-- .../topics/01-setting_up/github_classroom.rst | 27 ++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/source/modules/Decorators.rst b/source/modules/Decorators.rst index 4234f11..105cc64 100644 --- a/source/modules/Decorators.rst +++ b/source/modules/Decorators.rst @@ -43,8 +43,7 @@ So many, that we give it a special name: An Example ---------- -Imagine you are trying to debug a module with a number of functions like this -one: +Imagine you are trying to debug a module with a number of functions like this one: .. code-block:: python diff --git a/source/topics/01-setting_up/github_classroom.rst b/source/topics/01-setting_up/github_classroom.rst index 8f54f6c..36274ee 100644 --- a/source/topics/01-setting_up/github_classroom.rst +++ b/source/topics/01-setting_up/github_classroom.rst @@ -33,7 +33,9 @@ Initial Setup ============= You will need an account on gitHub to participate in this course. -If you don't already have a gitHub account, or if you would prefer to create a new one for this course, make sure you setup a new account on `gitHub `_. Always keep in mind that your account name will be part of the private repositories that will be created for each of your assignments and it will be visible to both your instructors and your classmates. Make sure you let your instructors know what your gitHub handle is -- it's not always obvious! +If you don't already have a gitHub account, or if you would prefer to create a new one for this course, make sure you setup a new account on `gitHub `_. +Always keep in mind that your account name will be part of the private repositories that will be created for each of your assignments and it will be visible to both your instructors and your classmates. +Make sure you let your instructors know what your gitHub handle is -- it's not always obvious! You will need to have git setup on the computer you will use for developing your code for this course. You can find instructions for setting up git (and the rest of your development environment) here: @@ -142,19 +144,19 @@ b) Make a new branch: After that command, git will be "in" the develop branch -- anything you change will only be reflected in that branch. -.. note:: A git "branch" is an independent "version" of your code where you can write and change code, create and delete files, etc, and it will be kept separate from the main code. When you are happy with this version, it can be merged into the main branch. For the purposed of this course, it will not be merged into the main branch until it has been reviewed, and both you and your instructors think its done. +.. note:: A git "branch" is an independent "version" of your code where you can write and change code, create and delete files, etc, and it will be kept separate from the main code. When you are happy with this version, it can be merged into the main branch. For the purposed of this course, it will not be merged into the main branch until it has been reviewed, and both you and your instructors think it's done. If you get an error from this command that says:: fatal: A branch named 'develop' already exists -That means two things: +That means one of two things: - 1) You have already created a develop branch. IN which case you chould already be using it, or you can "check it out" again: `git checkout develop` + 1) You have already created a develop branch. In which case you should already be using it, or you can "check it out" again: `git checkout develop` or - 2) That branch was created already by gitHub classroom. Which you'd think would be nice, but it turns out that the way it's created doesn't allow the next steps: the Pull Request. THe solution in this case is to use a different name for your working branch, e.g. + 2) That branch was created already by gitHub classroom. Which you'd think would be nice, but it turns out that the way it's created doesn't allow the next steps: the Pull Request. The solution in this case is to use a different name for your working branch, e.g. :: @@ -204,7 +206,7 @@ b) Commit your work. When you have gotten to a good "pause point" in your work: (use "git restore ..." to discard changes in working directory) modified: install_test.py -note that in this case, I edited the ``install_test.py`` file after adding it. When you edit a file, git will not track those changes unless you tell it to, which you can do by running ``git add`` again. So ``git add`` tells git that you want it to keep track of that file -- called "staging for commit":: +Note that in this case, I edited the ``install_test.py`` file after adding it. When you edit a file, git will not track those changes unless you tell it to, which you can do by running ``git add`` again. So ``git add`` tells git that you want it to keep track of that file -- called "staging for commit":: $ git add install_test.py @@ -234,12 +236,12 @@ There is a trick to save a step -- you can ask git to commit all changes you've create mode 100644 another_file.py create mode 100644 install_test.py -The ``-a`` means "all". Note that you still need to use ``git add`` to ask git to track a new file that it is not already managing. +The ``-a`` means "all". Note that you still need to use ``git add`` to ask git to track a new file that it is not already managing. And be sure to run ``git status`` first to make sure you haven't accidentally added things you didn't want to. 5) Push your work to gitHub --------------------------- -All this adding and committing has only affected the repository on your own machine -- gitHub has not been changed. +All this adding and committing has only affected the repository on your own machine -- the one on gitHub has not been changed. In order to get your changes up to gitHub you need to "push" them. It's always a good idea to check the status before you push -- to make sure you're ready. :: @@ -258,7 +260,8 @@ Note that I am on the "develop" branch, which is what's wanted, and nothing new git push --set-upstream origin develop -Hmm -- "fatal" -- I don't like the look of that! But it's pretty simple, really. git is telling you that it doesn't know where to push the code to -- your gitHub version of the repo doesn't have a develop branch. But it tells you want to do to create that branch on gitHub (origin), so do that: +Hmm -- **fatal** -- I don't like the look of that! +But it's pretty simple, really. git is telling you that it doesn't know where to push the code to -- your gitHub version of the repo doesn't have a develop branch. But it tells you want to do to create that branch on gitHub (origin), so do that: :: @@ -327,7 +330,7 @@ Put a link to the PR in the LMS, to let us know that you have "turned in" the as 8) Wait for review ------------------ -Once you make your PR, your instructors will be notified by gitHub (and the LMS), and will review your code. They can make general comments, or comment line by line. When a review is done, you should get an email form gitHub. But you can always go and check the PR yourself and see if anything new is there. +Once you make your PR, your instructors will be notified by gitHub (and the LMS), and will review your code. They can make general comments, or comment line by line. When a review is done, you should get an email from gitHub. But you can always go and check the PR yourself and see if anything new is there. At this point, two things might happen. @@ -413,7 +416,7 @@ After adding the file(s), you can commit your code by typing the following:: Note that the commit message should be replaced with something descriptive of what that commit includes ("added new functionality", "fixed floating point error", "ready for review", etc.) that will later help you remember what that particular commit was about. -.. note:: If you omit the message, git will bring up a text editor to let you write one. If you have not configured git to use another editor, it will be "vi", an venerable old Unix editor that is a real challenge for some. To get out of vi, hit the >escape> key, the a colon and an x: ``:x``. You can configure git to use an editor you are familiar with. See: :ref:`install_nano_win` for how to do that on Windows. +.. note:: If you omit the message, git will bring up a text editor to let you write one. If you have not configured git to use another editor, it will be "vi", a venerable old Unix editor that is a real challenge for some. To get out of vi, hit the key, the a colon and an x: ``:x``. You can configure git to use an editor you are familiar with. See: :ref:`install_nano_win` for how to do that on Windows. After every change to the file, you will need to "commit" the changes. Keep in mind that git will not commit all the changes you have made, only the ones that are "staged for commit". You can stage them with the ``git add`` command again. So ``add`` means either "add this file" or "stage this file for committing", depending on whether it's already been added or not. @@ -460,7 +463,7 @@ When you submit a comment with a tag, the instructor will be notified by gitHub Submitting your assignment -------------------------- -Once your assignment is ready for review, copy the link of your Feedback pull request and submit it in the submission form. Here is an example of a submission link (yours will look a little different but will end with `/pull/1`):: +Once your assignment is ready for review, copy the link of your Feedback Pull Request and submit it in the submission form. Here is an example of a submission link (yours will look a little different but will end with `/pull/1`):: https://github.com/UWPCE-Py210-SelfPaced-2021/lesson-02-fizzbuzz-exercise-uw-test-student-natasha/pull/1 From fe85c1f7ffb32f0db64692cff97494d71fb08f10 Mon Sep 17 00:00:00 2001 From: Natasha Date: Thu, 10 Mar 2022 16:13:07 -0800 Subject: [PATCH 23/27] Update mailroom_with_dicts.rst --- source/exercises/mailroom/mailroom_with_dicts.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/exercises/mailroom/mailroom_with_dicts.rst b/source/exercises/mailroom/mailroom_with_dicts.rst index b627c18..24cad30 100644 --- a/source/exercises/mailroom/mailroom_with_dicts.rst +++ b/source/exercises/mailroom/mailroom_with_dicts.rst @@ -15,13 +15,13 @@ However, using dictionaries, an import built in data structure in Python, will l Update your mailroom program to: + - Convert your main donor data structure to be a dict. Think about an appropriate key for easy donations look up. + - Use dicts where appropriate. - - See if you can use a dict to switch between the users selections. + - Use a dict to switch between the users selections. see :ref:`dict_as_switch` for what this means. - - Convert your main donor data structure to be a dict. - - Try to use a dict and the ``.format()`` method to produce the letter as one big template, rather than building up a big string that produces the letter in parts. From 703382e585426ac65de3afd7082a046fba13e1d3 Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Thu, 10 Mar 2022 23:53:59 -0800 Subject: [PATCH 24/27] a bit more copy editing --- source/exercises/mailroom/mailroom_with_dicts.rst | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/source/exercises/mailroom/mailroom_with_dicts.rst b/source/exercises/mailroom/mailroom_with_dicts.rst index 24cad30..d0a46e9 100644 --- a/source/exercises/mailroom/mailroom_with_dicts.rst +++ b/source/exercises/mailroom/mailroom_with_dicts.rst @@ -11,19 +11,18 @@ Use dicts where appropriate. The first version of this assignment used these basic data types: numbers, strings, lists and tuples. -However, using dictionaries, an import built in data structure in Python, will let you re-write your program a bit more simply and efficiently. +However, using dictionaries, an important built in data structure in Python, will let you re-write your program a bit more simply and efficiently. Update your mailroom program to: - - Convert your main donor data structure to be a dict. Think about an appropriate key for easy donations look up. + - Convert your main donor data structure to be a dict. Think about an appropriate key for easy donor look up. - - Use dicts where appropriate. + - Use dicts anywhere else, as appropriate. - Use a dict to switch between the users selections. see :ref:`dict_as_switch` for what this means. - - Try to use a dict and the ``.format()`` method to produce the letter as one - big template, rather than building up a big string that produces the letter in parts. + - Use a dict and the ``.format()`` method to produce the letter as one big template, rather than building up a big string that produces the letter in parts. Example: From d9fa5d8e653fc443488bb72cec871d6c81e665f1 Mon Sep 17 00:00:00 2001 From: "Christopher H.Barker, PhD" Date: Wed, 25 May 2022 07:55:01 -0700 Subject: [PATCH 25/27] removed a dead link --- source/modules/Modules.rst | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source/modules/Modules.rst b/source/modules/Modules.rst index b71efd3..d55caef 100644 --- a/source/modules/Modules.rst +++ b/source/modules/Modules.rst @@ -388,11 +388,13 @@ In that case, you can simply add more "dots" and follow the same rules as above. from packagename import my_funcs.this_func -Here's a nice reference for more detail: +.. Here's a nice reference for more detail: -http://effbot.org/zone/import-confusion.htm +.. http://effbot.org/zone/import-confusion.htm -And :ref:`packaging` goes into more detail about creating (and distributing!) your own package. +.. And + +:ref:`packaging` goes into more detail about creating (and distributing!) your own package. What does ``import`` actually do? From e5e90abb046c62c4e09ffd064b892379b03e23a5 Mon Sep 17 00:00:00 2001 From: Chris Barker Date: Wed, 25 May 2022 08:09:05 -0700 Subject: [PATCH 26/27] bold fix and rename to 310 --- README.md | 4 ++-- source/class_schedule/index.rst | 2 +- source/modules/Modules.rst | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 124083e..417bd7a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Python210CourseMaterials +# Python310CourseMaterials -Course Materials for Python 210 +Course Materials for Python 310: the first course in the UWPCE Python Certificate Program. Published here: diff --git a/source/class_schedule/index.rst b/source/class_schedule/index.rst index 27cf4f0..764b8b2 100644 --- a/source/class_schedule/index.rst +++ b/source/class_schedule/index.rst @@ -1,7 +1,7 @@ :orphan: ######################### -Python 210 Class Schedule +Python 310 Class Schedule ######################### .. toctree:: diff --git a/source/modules/Modules.rst b/source/modules/Modules.rst index d55caef..cffdc50 100644 --- a/source/modules/Modules.rst +++ b/source/modules/Modules.rst @@ -84,7 +84,7 @@ But you should strive for proper style. Isn't this easier to read? x = (3 * 4) + (12 / func(x, y, z)) -.. centered:: **Read** `**PEP 8** `_ **and install a linter in your editor.** +.. centered:: **Read** `PEP 8 `_ **and install a linter in your editor.** Modules and Packages From 9e33211c2cfc3f45bdb62d6b5f6f4420a74a7745 Mon Sep 17 00:00:00 2001 From: Max-Type <160228942+Max-Type@users.noreply.github.com> Date: Fri, 16 Feb 2024 11:27:47 +0100 Subject: [PATCH 27/27] Fix Typo --- source/modules/Modules.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/modules/Modules.rst b/source/modules/Modules.rst index cffdc50..bfc0dd3 100644 --- a/source/modules/Modules.rst +++ b/source/modules/Modules.rst @@ -485,6 +485,6 @@ Running ``mod2.py`` results in:: Still in mod2: mod1.x = 555 mod3 changed the value in mod1, and that change shows up in mod2 -You can see that when ``mod2`` changed the value of ``mod1.x``, that changed the value everywhere that ``mod1`` is imported. You want to be very careful about this. +You can see that when ``mod3`` changed the value of ``mod1.x``, that changed the value everywhere that ``mod1`` is imported. You want to be very careful about this. If you are writing ``mod2.py``, and did not write ``mod3`` (or wrote it long enough ago that you don't remember its details), you might be very surprised that a value in ``mod1`` changes simply because you imported ``mod3``. This is known as a "side effect", and you generally want to avoid them!