Skip to content

Code-Maven/wis-python-course-2025-10

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WIS Python programming course started in 2025.10

Course number: 20263071

Students

Home page Repo Assignment Lab Project
Achinoam Shoham repo repo Naama Barkai Lab - Department of Molecular Genetics
Adi Moses repo repo The Segev Lab - Microbial Physiology in an Environmental Context
Adib Masharqa repo repo The Elson Lab - Bone Biology in Health and Disease
Aileen Cohen repo repo Naama Barkai Lab
Anvita Pant repo repo Tami Geiger Lab - Clinical Cancer Proteomics
Arad Zulti repo repo Segal Lab - AI-based Personalized Medicine
Ariel Hindi repo repo Orly Reiner Lab - BrainBuild: Unravelling Corticogenesis
Avigail Yariv repo repo Ada E. Yonath Group
Daniela Huppert Revach repo repo Orly Reiner
David Ganem repo repo Ilan Lampl Lab
Einav Litvak repo repo Yoav Livneh's Lab - Neuroscience of brain-body communication
Evyatar Shaked repo repo Milo Lab - Design Principles in Energy & Carbon Metabolism
Guy Saller repo repo Michal Leskes Research Group - Magnetic Resonance in Materials
Guy Shemesh repo repo Liran Shlush Lab - The aging of the humanhematopoietic system
Guy Vosco repo repo Sivan Refaely-Abramson - Theory of Excited-State Phenomena in Materials
Hallel Azulai repo repo Ziv Reich's lab
Inbar Perets repo repo Yoav Livneh
Lihi Bolokan repo repo Tzahor Lab - Fixing a Broken Heart: Innovations in Cardiac Regeneration
Lior Batat repo repo Yonatan Kupchik's lab - Neurobiology of addiction and motivated behavior
Neta Hanuka repo repo Oren Schuldiner - Developmental Neuroscience
Noam Ariel repo repo Ulyana Shimanovich - Department of Materials and Interfaces Faculty of Chemistry
Noga Levinson repo repo Karina Yaniv Lab - Vascular biology
Noya Levy repo repo Karina Yaniv
Rachel Steinitz-Eliyahu repo repo Refaely-Abramson Lab
Raz Leibson repo repo Oren Forkosh Lab
Rony Holdengreber repo repo
Sana Khatib repo repo Naama Barkai
Sharonelle Sasson repo repo Orli Reiner
Shelly Gilad repo repo
Shoshana Sernik repo repo Eli Arama - Cellular Destruction Mechanisms in Development
Sriashwin Sridharan repo repo Daniel Dar Lab - Microbial Systems Biology
Yana Lerner repo repo Orly Laufman's lab - Molecular and Cell Biology of RNA viruses

Lecturer

Teaching Assistants

Plan

SYLLABUS

Schedule

  • 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

Assignments

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.md with some explanation what is this about.

  • For each assignment create a folder in the format of dayXX such as day01 and 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.

Extensions

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.

Project

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

  1. What does this project do?
  2. What kind of input data it expects and what kind out output the user might expect?
  3. 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:

Expected workload

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.

Grades

  • 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.

Slides

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.

Videos in English

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.

Videos in Hebrew

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.

Language

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.

Bring your own computer!

You are expected to bring your own computer to the lectures.

Installations

There is no need to install anything up front. We'll do that during the lectures.

Videos

Login to Moodle and you should be able to see the video recordings on the right hand side.

Day 1

  • 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.

Assignment (day 1)

  • 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!"

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

Amendment

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

Day 2

  • 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 input function.
  • Creating a GUI using Python / Tk.
  • At the end we created a command line version of it.

In-class assignments

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:

Assignment (day 2)

  • If you don't have it yet create a folder called day02.

  • Put a file called README.md in 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 line as 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

Day 2 assignments by students

Day 3

Summary by Liron

Day 3 Lesson 1

  • Difference between markdown vs markup

  • README.md renders 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
    • 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 python to enter interpreter
      • exit() to exit
  • 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 standard requirements.txt file, use the command uv pip install -r requirements.txt.
    • environment.yml: To install dependencies listed in a Conda-style environment.yml file, use the command uv pip install -c environment.yml.
    • Adding Dependencies:
      • uv init create 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 lock states specifically the hierarchy of what is downloaded and what is needed to run the program
      • uv update can update the libraries

Day 3 Lesson 2

  • 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 status
    • git add .
    • git commit -m " "
    • git push

Day 3 Lesson 3

  • Using pytest to write tests (example in words.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.

Assignment (day 3)

  • 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 day02 folder to the new day03 folder. 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 your day03 folder and to the issues you opened.

  • Dead-line: 2025.11.16 22:00

Day 4

Summary

Issue subject lines

  • See the subject-lines of the issue and how there are at least 4 different types. How could we write code that recognizes them?

Use math

  • Circle: pi = 3.14 or import math and then use math.pi

How to report problems?

"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)

RTL languages

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.

Remove __pycache__ from git

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.

Manually write a module, use it and test it.

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.

NCBI

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

Assignment (day 4)

  1. Remove the __pycache__ folder(s) from your repository and make sure it won't be added again by mistake.

  2. 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

Day 5

Notes

Assignment (day 5)

  1. Ask co-pilot to create .github/copilot-instructions.md, read it and update it to better fit your needs.

  2. In the day05 folder 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.

  • Number guessing game

  • Master Mind

  • 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)

Day 6

Notes

Assignment (day 6)

  • 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.md file describing the project.

  • Add the .gitignore file.

  • 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 is number-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)

Day 7

Notes

Assignment (day 7)

TBD

Day 8

Notes

Assignment (day 8)

  • 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)

Day 9

Notes

Assignment (day 9)

  • Given the data in the day09/subjects.txt file and the dead-lines in this README file write a program that will create a report that can be useful to us. Some ideas:

    1. Students that have not submitted certain assignments.
    2. Students who submitted after the dead-line.
    3. Distribution of the submittal time relative to the dead-line.
    4. Popularity of the various subject formats.
    5. 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)

Day 10

Notes

Releases

No releases published

Packages

No packages published