Course number: 20263071
-
Direct link to course information
-
Feinberg Moodle
-
Location:
- First lecture in Schmidt Hall
- The rest in Feinberg Building Class C.
- Hadar Klimovski - Hornstein lab - Non-coding neurogenetics
- Liron Hoffman - Yonatan Stelzer Lab - Epigenetics in Development and Disease
- Day 1 2025.10.26 9:15-12:00
- Day 2 2025.11.02 9:15-12:00
- Day 3 2025.11.09 9:15-12:00
- Day 4 2025.11.16 9:15-12:00
- Day 5 2025.11.23 9:15-12:00
- Day 6 2025.11.30 9:15-12:00
- Day 7 2025.12.07 9:15-12:00
- Day 8 2025.12.14 9:15-12:00 ?? First light of Hanukkah
- 2025.12.21 7th light of Hanukkah
2025.12.28 Postponed- Day 9 2026.01.04 9:15-12:00
- Day 10 2026.01.11 9:15-12:00
There will be assignments after every lecture. You will submit them via GitHub.
-
Create a public repository on GitHub for the assignments.
-
Add a
README.mdwith some explanation what is this about. -
For each assignment create a folder in the format of
dayXXsuch asday01and put the necessary files in that folder. -
Once you pushed out the solution to GitHub open a new issue on this repo (our shared repository) with a title:
Day01 by Foo Bar(when you submit your assignment for Day01 and if your name is Foo Bar)- In the body include a link to the repository.
-
The Teaching Assistants and lecturer will comment on these issues.
Each assignment and the project will have dead-lines. If you need to ask for extensions, do it up-front asking your TA. Make their life easier and when you ask include the specific new dead-line you need.
Towards the end of the course you'll be asked to do a project. First you will need to submit a proposal for the project and when it is accepted then implement it. The project should be something that is useful for your studies or at least it is fun for you to make. Ask in the lab where you work what needs are there that you might implement as your final project. You can get inspiration from the projects listed here and the projects from the previous semesters:
The idea of the project is that you write something that is going to be useful for you beyond the course. e.g. There is some manual work in your lab and this project will automate it. It can be also a tool to help you with your research. etc. It can also be useful in your private life. e.g. we had projects trying to register for visa applications at the USA embassy and we also had games.
You can even take an existing project and make some valuable improvements to that project. (e.g. one project from one of the previous courses).
How to submit your proposal?
-
Create a separate repository for the project. Its name should reflect the project: (e.g. Gene-Amplification-and-SNP-Analysis) and not the the course. If someone looks at this repository they should see it as a real application and not "some stuff you wrote just to get the grade".
-
The proposal should be the README.md file of the repository. If you need to include images or data files, those should be also included in the repository. It should be a description that will help any future visitor of the project to understand
- What does this project do?
- What kind of input data it expects and what kind out output the user might expect?
- The technicalities: How to download it, install the dependencies, run the tests, and run the project?
It would be nice if at the end of the README you mention that this was written as part of the course and link to the course repository.
We understand that the project and thus the description might evolve during the implementation. That's fine. You can update the README with the new information. In the proposal we would like to see your understanding of the project before you start implementing it.
Before you submit it for approval it is recommended that you send it to another student and ask if the description is clear. If that student has any questions then you probably will need to update the README to answer those questions so the next person won't need to ask.
Once you are ready, open an issue on our repository linking to you project to get it approved.
Once the project is approved you will implement it in the same repository. Open a new issue when you'd like the project to be graded.
Project proposal dead-line:
Project submission dead-line:
In addition to the lectures you will spend about 2-4 hours / week on the assignments and 20-40 hours on the project.
The actual time spent will greatly depend on your previous experience with programming in general and Python in particular.
The time you spend on the project will also depend on the availability of the data you work on. If you pick a project that you would want to do anyway then this is basically time you would spend anyway.
-
Each assignment counts as 5% (we will have 10 of them).
-
The project proposal is 15%.
-
The project is 35%.
-
The project is a requirement. Without that you won't get a passing grade.
During the course I'll use some of the slides that can be found here. These slides are publicly available and will remain on the web site after the course is over.
There are recording of this course from 3 years ago.
There are also recordings from the 2023 autumn semester.
There are also recordings from the 2024 spring semester.
You can watch those, but be also warned, this semester the order of the material will be different.
There are many more videos in my English-language YouTube channel. You are invited to check them out and to follow the channel.
Some of the material is also available in Hebrew. You can find them on my website and in my Hebrew-language YouTube channel. You are invited to follow that channel as well.
The default teaching language of WIS and of this course is English.
In writing please stick to English.
If and when we have one-on-one conversions I'd be happy to speak in Hebrew, Hungarian, Spanish, or Ladino as well.
You are expected to bring your own computer to the lectures.
There is no need to install anything up front. We'll do that during the lectures.
Login to Moodle and you should be able to see the video recordings on the right hand side.
- Self introduction
- Overview of the course
- Programming
- Version control (see the videos)
- GitHub
- GitHub pages
- Installations:
- Connect to GitHub co-pilot.
- Print Hello World - writing the code manually as I could not connect to co-pilot.
- Watch the 1st video: Creating a website on GitHub Pages using Markdown
- Create a web site for yourself using GitHub pages. Remember to use the repository name
USERNAME.github.io. Get ideas from the pages of the students in the previous courses.
Link to your profile and the lab you are currently in. e.g. Liron is in the Yonatan Stelzer Lab Hadar is in the Hornstein lab.
- Watch the 2nd video: Using Git on Windows in VS Code.
- Create a separate public repository for all the assignments of the course. (e.g. call it
python-course-assignments)- Create a folder called
day01 - In the folder create a program that will print "Hello World!"
- Create a folder called
Once they are ready open an issue on the GitHub repository of the course. The title of the issue should contain your full name and name of the assignment e.g. "Day1 by Foo Bar", in case your name is Foo Bar. In the issue include the link to the site, the link to the repository of the site, and the link to the repository of the assignment.
In the same issue also include a few sentences explaining why do you take this course? What are your expectations? What do you need to use Python for? If you don't know yourself, ask in the lab you are in what kind of things might be needed.
- Dead-line: 2025.11.01 22:00
Using AI to solve the assignments? That's fine.
However, in that case, please add a file called README.md in the day01 folder of the repository you created for the assignments and put the name(s) of the AI system(s) and their version numbers along with the the prompt(s) you used in that file.
- Dead-line: 2025.11.02 22:00
- We used Co-pilot to create a program that calculated the area of a triangle.
- Getting input from the user in an interactive way using the
inputfunction. - Creating a GUI using Python / Tk.
- At the end we created a command line version of it.
The students had one hour to practice and work on the assignment and already add it to the day02 folder. I tried to collect the examples and add some comments so you can all learn from that.
General notes:
-
Add some explanation of what does the project do?
-
Adi Moses
- Area of a circle
- Variable names and function parameter names should be lower case.
- Area of a circle
-
Adib Masharqa
-
Aileen Cohen
- DNA Sequence Validator & Translator
- It is better to separate UI related code and "business"-related code.
- DNA Sequence Validator & Translator
-
Anvita Pant
- A very nice readme!
- rectangle
- circle
- It is better to put as little code outside of functions as possible and and that should be after all the function definition better use an
if __name__ == '__main__':condition.
- It is better to put as little code outside of functions as possible and and that should be after all the function definition better use an
-
Ariel Hindi
-
Avigail Yariv
- Age calculator
- Has type annotations!
- Code separation into various files.
- Age calculator
-
Daniela Huppert Revach
-
David Ganem
- AI in Italian
- area of a rectangle using GUI
- area of circle
- It is probably a better idea to use English variable and function names. (not raggio, area_cerchio, etc.) ti make the code accessible to people who don't know Italian. You can probably tell the AI to always use English words in the code.
-
Einav Litvak
-
Evyatar Shaked
-
Guy Vosco
-
Hallel Azulai
-
Inbar Perets
-
Lior Batat
-
Neta Hanuka
-
Noam Ariel
-
Rachel Steinitz-Eliyahu
- rectangle
- rectangle cli
- It is better not to import everything with a
*but the specific things you need :from shapes import rectangle_area
- It is better not to import everything with a
-
Raz Leibson
-
Rony Holdengreber
- circle area GUI - manually?!
- It looks much simple as it seems this was created manually and not by using AI.
- circle area GUI - manually?!
-
Sana Khatib
- Zodiac profile GUI
- Wonderful. One needs to install
ephemandpillowto make it work.
- Wonderful. One needs to install
- Zodiac profile GUI
-
Shelly Gilad
-
Sriashwin Sridharan
-
Yana Lerner
-
If you don't have it yet create a folder called
day02. -
Put a file called
README.mdin which you will describe how you solved the assignment. If you use any AI tool, write down which AI tool you use, which version of it. If possible add a link to the tool. Write down the promotes you wrote. Only include the replies if you feel it is significantly adds to the understanding of the process. Use GitHub Flavored Markdown -
Try to run the examples written by othefs, especially the unique ones: (DNA, LiBR, H2O, Zodiac).
-
Implement some "interesting" computation. Create 3 different input mechanism. (interactive with
input,command lineas we saw in the last few minutes of the lecture and GUI. -
What is "interesting", you might ask. Above you can see that many people implemented the area of a circle and rectangle that I mentioned in the class room. That's fine, but not too creative. Area of a trapeze is a bit better. Age calculator is also interesting. Way better are the "DNA Sequence Validator" and the LiBr mas and H2O volume calculators. The Zodiac profile GUI is very nice! Find something interesting in your lab, in your previous studies, or something totally unrelated and implement it with the 3 ways of input. You can even try to have your data in a file and make your code read from a file.
-
Add a one-sentence explanation what does this do. Include a README file explaining your process. You can write the whole code manually or using AI, but share your prompts!
-
Open a new issue on our repository titled "Day2 by Foo Bar", and include a link to your repository.
-
Dead-line: 2025.11.09 22:00
- Achinoam Shoham
- Adi Moses
- Adib Masharqa
- Aileen Cohen
- Anvita Pant
- Arad Zulti
- Ariel Hindi
- Avigail Yariv
- David Ganem
- Daniela Huppert Revach
- Einav Litvak
- Evyatar Shaked
- Guy Shemesh
- Guy Vosco
- Travel expenses - currency converter using the Exchange rate API
- Hallel Azulai
- PCR cycle calculator - exponential growth, bacterial growth
- Inbar Perets
- Lihi Bolokan
- Lior Batat
- Neta Hanuka
- Noam Ariel
- Noya Levy
- Rachel Steinitz-Eliyahu
- Raz Leibson
- Rony Holdengreber
- Sharonelle Sasson
- Shelly Gilad
- Shoshana Sernik
- Sriashwin Sridharan
- growth rate and doubling time of any bacteria and suggest average time and rate of the given bacteria
- scientific name generator
- Oral Microbiome and Health Assessment
- Yana Lerner
-
Difference between markdown vs markup
-
README.mdrenders automatically in the repository -
GitHub flavored markdown for formatting markdown files in GitHub
-
Notes on assignment 2:
- Anvita Pant
- Include links for the background of the biology. Use the
[]()syntax
- Include links for the background of the biology. Use the
- Arad Zulti
- How to include tests to verify the validity of your code
- Note - use approximation since computers don’t know how to represent floating point numbers
- David Gabem
- REPL - read evaluate print loop
uv run pythonto enter interpreterexit()to exit
- Anvita Pant
-
Python includes:
- The language itself
- Python libraries which are needed to be imported
- Third party libraries which need to be installed. See pypi
-
How to define dependencies needed to run in your code:
requirements.txt: To install dependencies listed in a standardrequirements.txtfile, use the commanduv pip install -r requirements.txt.environment.yml: To install dependencies listed in a Conda-styleenvironment.ymlfile, use the commanduv pip install -c environment.yml.- Adding Dependencies:
uv initcreate toml file- To add a single new dependency (and ensure all existing ones are resolved and installed) use
uv add [name of dependency](e.g.,uv add pandas) uv lockstates specifically the hierarchy of what is downloaded and what is needed to run the programuv updatecan update the libraries
- Example of code-
words.py- Create a function that receives two words and return a numerical value indicating distance of the two words
- Goes over:
- Functions
- Methods for strings
- For loop
- Range function
- Lists
- Dictionaries
- Another way to add to GitHub:
git statusgit add .git commit -m " "git push
-
Using
pytestto write tests (example inwords.py) -
Implementation of a library that can execute the function instead of writing it ourselves
-
You are welcome to use your mother tongue when talking to AI, but make sure the resulting code is in English: comments, variables, function names, sample values etc.
-
Pick 2 (or more) students that you don't know. Look at their assignment repository. Clone their repository to your computer and try to run their projects from day 2. Open an issue on the repository of their assignment with any issues you encounter. (either small things like having a folder with space) or that you don't know how to run the application and you need clarification. When picking a student select one who does NOT yet have 2 issues. This way everyone will get at least 2 issues.
-
Once you received such an issue, react to it. If needed, ask for clarification. When you feel you have fulfilled the request (or decided you don't want to do that) close it.
-
Copy your project from the
day02folder to the newday03folder. Move the "business logic" (the computation) to a separate file and make the main program use it. It is enought to have one way to use it GUI/command line/STDIN. Pick the one you prefer. Of course if you like you can have more of them. -
Add some tests, especially to check the "business logic". Make sure you can run the tests. Look at the tests and make sure they test the code properly.
-
Replace your code with some 3rd-party library when possible.
-
Add a README.md explaining how to install dependencies, if there are any. Also explain how you used AI (include the prompts).
-
Open an issue on our repository with a title
day03 Your Name. Include a link to yourday03folder and to the issues you opened. -
Dead-line: 2025.11.16 22:00
- See the subject-lines of the issue and how there are at least 4 different types. How could we write code that recognizes them?
- Circle:
pi = 3.14orimport mathand then usemath.pi
"I could not run your program", "There was an error" etc. These are not very useful reports.
It is much better to describe what you did and what you saw (e.g. what was the error messages) and make it easy for the developer to reproduce the problem.
What you did, what you expected (if it is not obvious), what you actually received?
Some people included screenshots of the problems they saw in the GUI. That's excellent.
On the other hand, for textual error messages from the terminal include the text in the report, not the screenshot of it.
It is often useful to include the operating system and its version (e.g. Windows 10), the language of your OS if that might be relevant (e.g. English, Hebrew, Arabic, Spanish, Italian etc.)
Especially the RTL languages can create trouble. Include the version of Python you use. (run python --version)
Some people reported that Tk (tkinter) does not work well with RTL languages such as Hebrew and Arabic. You might want to experiment with other GUI toolkits that look nicer and also support RTL text. Ask the AI to suggest you a GUI framework.
git rm -r __pycache__
git commit -m "remove generated files"
Create a file called .gitignore in the root of the git repository and put the name of the folder you'd like git to ignore. See the .gitignore file in this repository.
We created manually the following files:
day04/rectangle.py
day04/rectangle_stdin.py
day04/shapes.py
day04/test_shapes.py
Add pytest as a development dependency.
uv init
uv add --dev pytest
This created the following files:
pyproject.toml
uv.lock
- TOML is a file-format often used for configuration files.
We searched for silk fibroin animal in the nucleotide database of NCBI and wanted to get some sequence from there.
in the day04 folder create a command line program that will receive a search term and down the first 2 hits from the nucleotide database on ncbi
It created
ncbi_search.py
ncbi_search_README.md
-
Remove the
__pycache__folder(s) from your repository and make sure it won't be added again by mistake. -
Find a web site that has some data you'd like to use. In the lecture these were suggested. Use these to give you direction, you can pick any web site you find interesting. It can be related to any type of science, or anything else really. The important part is that it will be in some way interesting to you so you can also explain about it.
In the day04 folder write a program that will download some data from the selected web site and save it locally in a file or in multiple files.
Separate the "business logic" and the UI (User Interface), the way the program interacts with the user. Pick whatever UI method you like.
If you need to provide your email addres or if you need to use some API secrets, makes sure thos are saved in a separate file and make your code read these values from that file.
Make sure the file does not get added to git by adding its name to .gitignore.
In the day04/README.md explain in a few words what your program does. Include links where necessary.
Also include any interaction you had with the AI.
Once you feel you are done, ask someone in the course to check your program based on what they see in the README. If they have any questions, use that to improve the README or the code.
Once you are done with the improvements open an issue on our repository and in the issue also mention the person who reviewed your application using the @-notation.
- Dead-line: 2025.11.23 22:00
-
Show building the copilot-instructions.md file.
-
The grammar of Python see the SYLLABUS - data types.
-
Ask co-pilot to create
.github/copilot-instructions.md, read it and update it to better fit your needs. -
In the
day05folder implement a game, try to do it without consulting AI. Add tests. Include a README explaining how to install the dependencies if there are any and how to use the game. Ask a fellow student to try it. If they have issues or questions fix them or answer them in the README so we won't encounter those issues any more.
Either pick one I already described, or better yet something totally different.
-
Actually, I asked ChatGPT to suggest a game using this prompt: "What simple games are there that can be a relatively simple problem to implement as a programming exercise in Python?" and got some nice suggestions. You can search for something else. You can implement some science-related game. e.g. one that helps you practice something you have (or had) hard time to understand and learn.
-
Submit in the usual way by opening an issue.
-
Dead-line: 2025.11.29 22:00 (Saturday evening)
-
Take one (or more) of the eariler assignments and convert them into a stand-alone project in their own repository.
-
e.g. if you implemented the "Number guessing game" you might want to call the repository "number-guessing-game".
-
If your project is "The NCBI fibroin scapper" it should be probably in a repository called ncbi-fibroin-scapper.
-
Add a
README.mdfile describing the project. -
Add the
.gitignorefile. -
If you use co-pilot then generate the .github/copilot-instructions.md file as I did during the class. Commit it and then update it as you feel fit. Other AI tools might have other files.
-
Enable "GitHub pages" for this repository: Go to Settings/Pages and set the Source to be "Deploy from a branch" and select the "Branch" to be "main" and the folder to be root. Once you did this GitHub will generate the site from your README.md and you will be see it at
https://USERNAME.github.il/number-guessing-game(if the name of the repository isnumber-guessing-game. -
Make some improvement to your project. Fix some bugs, add a new feature etc. Maybe ask fellow students what kind of improvements would they like to see in the project.
-
Try to make use of file-handling we learned in the last two sessions.
-
Submit in the usual way by opening an issue and linking to it.
-
Start working on your final project. Actually I am ok with this one to become your final project if you feel this is imporant enough and that you can enhance it 3-4 times of what it is now. (In terms of value it gives you and others.)
-
Dead-line: 2025.12.06 22:00 (Saturday evening)
- Code-reuse
- Functions
- Linters - Static Analyzers
- A few words about
- Complexity O(n), O(n^2)
TBD
- Setting up virtualenv on the command line and in VS Code
- Jupyter notebook
- Pandas and Numpy
- Kaggle
- Take a data set (a CSV or Excel file) and make some interesting analyzis. Interesting to you.
- Create some nice graphs.
- You can use one of your own data sets or you can generate one, you can find one on the Internet and use that.
- Kaggle has a lot of interesting ones.
- Use Pandas and Numpy for it.
- You can either put this in your assignment repo or a stand-alone repository, if you feel this might be interesting to other people as well.
Note, our next lecture is on January 4!
- Dead-line: 2025.12.30 22:00 (Tuesday evening)
- Regular Expressions
- Machine Learning (first example)
-
Given the data in the
day09/subjects.txtfile and the dead-lines in this README file write a program that will create a report that can be useful to us. Some ideas:- Students that have not submitted certain assignments.
- Students who submitted after the dead-line.
- Distribution of the submittal time relative to the dead-line.
- Popularity of the various subject formats.
- etc...
-
Dead-line: 2026.01.10 22:00 (Saturday evening)
-
Project proposal dead-line: 2026.01.11 22:00 (Sunday evening)
-
Project submission dead-line: 2026.01.25 22:00 (Sunday evening)
- Machine Learning (we covered a few examples)