The Founder's Filter
Build a CLI business idea scorer using Python variables, lists, and match/case.
Introduction
30 Second Summary
Every aspiring entrepreneur has a notebook full of business ideas. The hard part is figuring out which ones are actually worth pursuing.
In this project, you will build a command-line tool in Python that scores business ideas against 8 evaluation criteria and delivers a verdict. You'll learn core programming concepts like variables, conditionals, lists, and pattern matching along the way.
What You'll Build
A Python script called founders_filter.py that collects user input, validates answers, scores a business idea against 8 criteria, and prints a final verdict with identified weak spots.
By the end of this project, you'll have:
- A working Python script that runs in the terminal, collects user input, and scores business ideas against 8 evaluation criteria.
- A scoring engine using lists and a verdict system powered by Python's match/case pattern matching with guards.
- A Git repository with your first committed project.
- Secret Mission: Add a feature that lets you evaluate multiple ideas back-to-back and compare scores at the end.
Are there any prerequisites?
No prior programming experience needed. This project includes setup instructions for all required tools, including Python, VS Code, and Git.
Set Up Your Environment
Before you write any code, you need your tools installed and your workspace ready.
In this step, you will install Git for version control, confirm Python is working, and create the project file you will build on for the rest of this project.
In this step, get ready to:
- Install Git for version control.
- Verify Python is ready.
- Create your project folder and file.
Install Git for Windows
Git tracks every change you make to your code. Think of it as an undo history for your entire project.
- Press the Windows key to open your search bar.
- Type PowerShell and press Enter to open it.
- Install Git by running this command:
winget install --id Git.Git -e --source winget
What does this command do?
- winget is Windows' built-in package manager for installing software.
- --id Git.Git tells winget exactly which package to install.
- -e means exact match, so it does not install the wrong thing.
- --source winget specifies where to find the package.
What will I see during the install?
The installer may show a progress bar and ask you to agree to license terms. Accept the defaults and let it finish. This can take a minute or two.
- Close PowerShell completely after the install finishes.
- Reopen PowerShell by pressing the Windows key, typing PowerShell, and pressing Enter.
- Verify Git installed correctly by running:
git --version
✔️ I see a version number
You should see something like git version 2.54.0. Your exact number may be slightly different. Git is ready.
ⓧ 'git' is not recognized
This means your terminal did not pick up the new PATH entry. Try these fixes:
- Make sure you fully closed and reopened PowerShell after the install. Do not just open a new tab.
- If it still fails, restart your computer to force the PATH to reload, then try git --version again.
Install failed or winget not found?
- If you see a winget error, make sure you are running PowerShell as a regular user (not as Administrator) and that your Windows is up to date.
- If winget is not recognized, open the Microsoft Store and update App Installer. This installs winget.
Help me troubleshoot my Git installation on Windows.
Verify Python and create your project
- Confirm Python is ready by running this command in PowerShell:
python --version
You should see Python 3.14.2 in the output.
- Move to your Desktop by running this command:
cd ~\Desktop
- Create your project folder by running:
mkdir founders-filter
- Confirm the folder exists by running:
ls
You should see founders-filter listed in the output.
- Switch back to VS Code.
- Click File in the top menu bar.
- Click Open Folder.
- Navigate to your Desktop, select the founders-filter folder, and click Select Folder.
VS Code now has your project folder open. The Explorer panel on the left shows the empty folder.
- In the Explorer panel on the left, hover over the folder name area.
- Click the New File button (the page icon with a plus sign).
- Type founders_filter.py and press Enter.
Your new file opens in the editor. It is empty for now.
Don't see the Explorer panel?
- Press Ctrl+Shift+E to open the Explorer view.
- If VS Code asked you to trust the folder, click Yes, I trust the authors.
Help me find the Explorer panel in VS Code.
Test your setup
You have the folder and file ready. Now confirm that Python can run your file from inside VS Code.
- Open the VS Code integrated terminal by pressing Ctrl+` (the backtick key, above Tab).
- Run your empty Python file by entering this command:
python founders_filter.py
The command finishes with no output and no errors. This means Python found your file and ran it successfully.
Why no output?
Your file is empty, so Python has nothing to execute. It runs, finds zero instructions, and exits cleanly. In the next step, you will add code and see real output.
Seeing an error?
- If you see "No such file or directory," make sure the terminal is inside the founders-filter folder. Type pwd to check your location.
- If you see "python is not recognized," close and reopen VS Code. The terminal needs to pick up the Python PATH.
Help me run my Python file in VS Code's terminal.
Your workspace is locked in. Next up, you will write your first Python code and learn about data types, variables, and user input.
Collect User Input with Variables
Your environment is set up and ready to go. Now it's time to write your first Python code.
Every program needs to work with information. A scoring tool needs to store the business idea name, track answers, and count points. Before you can build any of that, you need to understand how Python stores different kinds of information and how to collect input from the person running your program.
In this step, get ready to:
- Learn Python's three core data types: strings, integers, and booleans.
- Collect a business idea from the user with input() and store it in a variable.
- Ask the first evaluation question and confirm everything works.
Explore Python's three core data types
Python organizes information into data types. Think of them like different kinds of inventory in a warehouse. Strings are the labels, integers are the quantities, and booleans are yes/no decisions.
- Add the following code to founders_filter.py to see each data type in action:
# Strings - text wrapped in quotes
print("Artisan Coffee Delivery")
# Integers - whole numbers
print(42)
# Booleans - True or False
print(True)
What are these three data types?
- Strings hold text. Anything between quotes is a string: names, sentences, even "123" (because it's in quotes, Python treats it as text, not a number).
- Integers hold whole numbers without quotes. You'll use these to track the score in your filter.
- Booleans hold exactly two possible values: True or False. Perfect for yes/no answers.
- Save founders_filter.py.
- Run the script in your integrated terminal by running:
python founders_filter.py
- You should see three lines printed: Artisan Coffee Delivery, 42, and True.
Seeing a SyntaxError?
- Check that every opening quote has a matching closing quote on the same line.
- Make sure True has a capital T. Python is case-sensitive.
- Confirm you're running the command from inside the founders-filter folder.
Why is my Python print statement giving a SyntaxError?
This was just a warm-up to see data types in action. Now you'll replace this code with the real program.
- Select all the code in founders_filter.py by pressing Ctrl+A and delete it.
Create a variable to store the business idea
A variable is a labeled box in your warehouse. You give it a name, and Python stores a value inside. The input() function is how you ask the user a question and store their answer in that box.
- Add the following code to your now-empty founders_filter.py to collect the business idea and print it back:
# The Founder's Filter - Business Idea Scoring Tool
# Get the business idea
idea = input("What's your business idea? ")
print(f"\nEvaluating: {idea}")
print("Answer 'yes' or 'no' to each question.\n")
What does this code do?
- idea = input("What's your business idea? ") displays the question in the terminal, waits for the user to type something, then stores their answer in a variable called idea.
- print(f"...{idea}") uses an f-string to insert the variable's value into text. The f before the quote marks makes the curly braces work as placeholders.
- \n creates a blank line in the output. It makes the terminal output easier to read.
- Save founders_filter.py and run it:
python founders_filter.py
- The terminal will show What's your business idea? and wait for you to type. Enter your business idea and press Enter.
- You should see your idea printed back with Evaluating: in front of it, followed by Answer 'yes' or 'no' to each question.
Nothing happens after you type your idea?
- Make sure you pressed Enter after typing your idea. Python's input() waits until you press Enter.
- If you see NameError, check that the variable name idea in the print line matches exactly what you wrote in the input() line.
Help me debug why my input() and print() code isn't working.
Ask the first evaluation question
Your filter needs to ask evaluation questions and store the answers. Let's add the first one and confirm both values print correctly.
- Add this code below the existing lines in founders_filter.py:
# First question
answer = input("Customer \u2014 Is there a clear, specific person with this problem?\nYour answer: ")
print(f"Idea: {idea}")
print(f"Answer: {answer}")
What does this code do?
- answer = input(...) stores the user's response in a second variable called answer.
- The \n inside the question text pushes "Your answer: " onto a new line, making it clearer where to type.
- The two print lines confirm that Python remembered both values. The idea variable was set earlier and still holds its value.
- Save founders_filter.py and run it again:
python founders_filter.py
- Type a business idea when prompted and press Enter.
- Answer the Customer question with yes or no and press Enter.
- You should see both your idea and your answer printed back at the end.
Seeing a NameError for 'idea'?
- Make sure the first input() line (with idea =) is still in your file above the new code. If you accidentally deleted it, add it back.
- Check the spelling of idea in both the assignment and the print statement. Python treats idea and Idea as different variables.
Help me fix a NameError in my Python script.
✔️ Awesome, I've got everything!
Great. Double check you've saved your file.
ⓧ I'd like to double check the full code
Here's what your complete founders_filter.py should look like at this point:
# The Founder's Filter - Business Idea Scoring Tool
# Get the business idea
idea = input("What's your business idea? ")
print(f"\nEvaluating: {idea}")
print("Answer 'yes' or 'no' to each question.\n")
# First question
answer = input("Customer \u2014 Is there a clear, specific person with this problem?\nYour answer: ")
print(f"Idea: {idea}")
print(f"Answer: {answer}")
Your program collects input and prints it back. But right now, it accepts anything the user types. Next up, you'll add input validation so the program only accepts "yes" or "no" answers.
Validate Input with if Statements
Your program now collects a business idea and asks the first evaluation question. There is a problem though. If someone types "YESSS" or "maybe" or " yes ", your program has no way to tell good answers from bad ones.
In this step, you will build input validation. Think of it like a bouncer at a door. Nobody gets past until they give a proper "yes" or "no" answer.
In this step, get ready to:
- Normalize user input with .strip().lower().
- Reject invalid answers with a while loop.
- Convert the valid answer into a numerical score.
Normalize the user's answer
Users type things in unpredictable ways. "Yes", "YES", and " yes " are all the same answer, but your program currently treats them as different strings.
Python gives you two string methods to fix this. .strip() removes extra spaces from both ends of the string. .lower() converts everything to lowercase.
- In founders_filter.py, find this section at the bottom of your file:
# First question
answer = input("Customer — Is there a clear, specific person with this problem?\nYour answer: ")
print(f"Idea: {idea}")
print(f"Answer: {answer}")
- Delete those four lines and replace them with the following code:
# First question with validation
answer = input("Customer — Is there a clear, specific person with this problem?\nYour answer: ").strip().lower()
What does this code do?
The .strip().lower() at the end is called method chaining. Python runs left to right: first input() captures what the user typed, then .strip() removes leading and trailing spaces, then .lower() converts it all to lowercase.
So " YES " becomes "yes", and " No " becomes "no". The old print lines are gone because we will replace them with something better in the next chunk.
You will not see any output change yet. The next chunk adds the validation logic that uses this clean input.
Add a while loop that rejects bad answers
Normalizing input helps, but what if the user types "maybe" or "idk"? Those are not valid answers no matter how you clean them. You need a loop that keeps asking until the user gives a real "yes" or "no".
- Add the following code directly below the answer line you just edited:
while answer != "yes" and answer != "no":
print("Please answer 'yes' or 'no'.")
answer = input("Your answer: ").strip().lower()
What does this code do?
This is your bouncer. The while loop checks whether the answer is NOT "yes" AND NOT "no". If both conditions are true (meaning the answer is invalid), the loop body runs again.
Inside the loop, the program prints a prompt and asks the question again. The new answer also gets .strip().lower() so every attempt is cleaned the same way. The moment the user types a valid answer, the condition becomes false and the loop exits.
- Save founders_filter.py.
- Run your program in the terminal by entering:
python founders_filter.py
- When the first question appears, type something invalid like maybe and press Enter. You should see "Please answer 'yes' or 'no'." and the question repeats.
- Type yes or no and press Enter. The program should exit without errors.
Program exits immediately without re-asking?
Make sure you have and between the two conditions, not or. Using or means the loop runs when the answer is not "yes" OR not "no", which is always true for any input.
Also check that the second answer = input(...) line inside the loop is indented with four spaces. Python uses indentation to know what belongs inside the loop.
Help me debug my while loop for input validation.
Convert the answer to a score
Now that you know the answer is definitely "yes" or "no", you can convert it into a number. This is how the scoring engine will work: "yes" means the idea passes that criterion (score of 1), and "no" means it does not (score of 0).
- Add the following code below the while loop (not indented inside it):
if answer == "yes":
score = 1
else:
score = 0
print(f"Running score: {score}")
What does this code do?
This is an if/else statement. It checks one condition: is the answer equal to "yes"? If yes, the variable score gets set to 1. Otherwise (the else branch), it gets set to 0.
We do not need elif here because the while loop already guarantees the answer is either "yes" or "no". There are only two possibilities left, so a simple if/else covers both.
- Save founders_filter.py.
- Run your program again by entering:
python founders_filter.py
- Enter a business idea, then answer "yes" to the first question. You should see Running score: 1 printed at the end.
- Run it again and answer "no". You should see Running score: 0.
Seeing a NameError for score?
Make sure the if and else lines are NOT indented inside the while loop. They should start at the same level as the while keyword itself. If they are inside the loop, the score variable never gets created on a valid first answer.
Help me fix my if/else indentation in Python.
✔️ Awesome, I've got everything!
Great. Double check you have saved your file before moving on.
ⓧ I'd like to double check the full code
Here is the complete founders_filter.py file at this point:
# The Founder's Filter - Business Idea Scoring Tool
# Get the business idea
idea = input("What's your business idea? ")
print(f"\nEvaluating: {idea}")
print("Answer 'yes' or 'no' to each question.\n")
# First question with validation
answer = input("Customer — Is there a clear, specific person with this problem?\nYour answer: ").strip().lower()
while answer != "yes" and answer != "no":
print("Please answer 'yes' or 'no'.")
answer = input("Your answer: ").strip().lower()
if answer == "yes":
score = 1
else:
score = 0
print(f"Running score: {score}")
Your program now handles messy input like a pro. Next up, you will scale this to all 8 evaluation questions using lists and a for loop.
Build the Scoring Loop with Lists
Your program handles one question and validates the input perfectly. But one question doesn't tell you much about whether a business idea is worth pursuing.
A real evaluation needs multiple criteria working together to produce a meaningful score. In this step, you'll use Python lists to store all 8 questions and a for loop to ask each one automatically.
In this step, get ready to:
- Create a list of 8 evaluation criteria.
- Loop through each criterion and collect scores.
- Calculate and display the total score.
Replace the single question with a criteria list
Right now your program has one hardcoded question. You need all 8 evaluation criteria available so the loop can work through them one by one.
What is a list?
A list is like a checklist on a clipboard. Each item has a position (called an index) starting from 0.
You can add items, remove items, and loop through the entire list. Lists use square brackets and separate items with commas.
- In founders_filter.py, find and select everything from # First question with validation all the way to the end of the file.
- Delete the selected code. You'll replace it with something much more powerful.
- Add the following criteria list below the line that says print("Answer 'yes' or 'no' to each question.\n"):
# Criteria list
criteria = [
"Customer — Is there a clear, specific person with this problem?",
"Pain — Is the problem urgent or expensive enough to solve?",
"Willingness to Pay — Would they actually pay money to fix it?",
"Distribution — Is there a clear way to reach these customers?",
"Differentiation — Is this meaningfully different from what exists?",
"Scalability — Can this grow without proportional effort?",
"Proof of Demand — Is there evidence people already want this?",
"Feasibility — Can this realistically be built or delivered?"
]
What does this code do?
This creates a variable called criteria that holds a list of 8 strings. Each string is one evaluation question for your business idea.
The square brackets define the list. Each item is separated by a comma. Python doesn't care that the list spans multiple lines. It keeps reading until it finds the closing bracket.
- Save the file.
- You won't see a visible change yet. The next chunk uses this list to ask all 8 questions.
Seeing a red underline or syntax error?
Make sure every string has both an opening and closing double quote. A missing quote at the end of a line breaks the entire list.
Check that every line except the last one ends with a comma. A missing comma between items causes a syntax error.
Help me fix a syntax error in my criteria list.
Loop through each criterion and collect scores
With all 8 questions stored in a list, you can use a for loop to visit each one automatically. The loop handles the repetition so you don't have to copy-paste the same validation logic 8 times.
- Add the following code directly below your criteria list:
# Scores list
scores = []
# Ask each question and collect scores
for question in criteria:
answer = input(f"{question}\nYour answer: ").strip().lower()
while answer != "yes" and answer != "no":
print("Please answer 'yes' or 'no'.")
answer = input("Your answer: ").strip().lower()
if answer == "yes":
scores.append(1)
else:
scores.append(0)
What does this code do?
- scores = [] creates an empty list. Think of it as an empty clipboard ready to hold 8 checkmarks.
- for question in criteria: picks up each string from the criteria list one at a time. The variable question holds whichever item the loop is currently on.
- The while loop and if/else inside the for loop are the same validation logic you wrote in the previous step. Now they run for every question.
- scores.append(1) adds the number 1 to the end of the scores list. After all 8 questions, you'll have a list like [1, 0, 1, 1, 0, 1, 0, 1].
- Save the file.
- You won't see a change yet. The next chunk adds the final score calculation so you can run the full program.
Seeing an indentation error?
Everything inside the for loop must be indented by 4 spaces. The while loop inside it needs another 4 spaces (8 total). If VS Code shows a red squiggle, check that your indentation matches the code above exactly.
Help me fix an indentation error in my for loop.
Calculate and print the total score
Your loop fills the scores list with 1s and 0s. Now you need to add them up to get the final number.
- Add this code at the very bottom of founders_filter.py, below the for loop (make sure it's not indented inside the loop):
# Calculate total score
total_score = sum(scores)
print(f"Total score: {total_score}/8")
What does this code do?
sum() is a built-in Python function that adds up all the numbers in a list. If scores is [1, 0, 1, 1, 0, 1, 0, 1], then sum(scores) returns 5.
- Save founders_filter.py.
- Run the program in your terminal by running:
python founders_filter.py
- Answer all 8 questions with "yes" or "no". After the last question, you should see your total score printed as a number out of 8 (for example, Total score: 5/8).
Program stops after the first question?
Make sure the while and if/else blocks are indented inside the for loop. If they're at the same level as for, they'll only run once.
Also check that you deleted all of the old single-question code. Leftover lines from the previous step can conflict with the new loop.
Help me debug my scoring loop.
✔️ Awesome, I've got everything!
Great. Double check you've saved your file.
ⓧ I'd like to double check the full code
Here's the full founders_filter.py as it should look right now:
# The Founder's Filter - Business Idea Scoring Tool
# Get the business idea
idea = input("What's your business idea? ")
print(f"\nEvaluating: {idea}")
print("Answer 'yes' or 'no' to each question.\n")
# Criteria list
criteria = [
"Customer — Is there a clear, specific person with this problem?",
"Pain — Is the problem urgent or expensive enough to solve?",
"Willingness to Pay — Would they actually pay money to fix it?",
"Distribution — Is there a clear way to reach these customers?",
"Differentiation — Is this meaningfully different from what exists?",
"Scalability — Can this grow without proportional effort?",
"Proof of Demand — Is there evidence people already want this?",
"Feasibility — Can this realistically be built or delivered?"
]
# Scores list
scores = []
# Ask each question and collect scores
for question in criteria:
answer = input(f"{question}\nYour answer: ").strip().lower()
while answer != "yes" and answer != "no":
print("Please answer 'yes' or 'no'.")
answer = input("Your answer: ").strip().lower()
if answer == "yes":
scores.append(1)
else:
scores.append(0)
# Calculate total score
total_score = sum(scores)
print(f"Total score: {total_score}/8")
Your scoring engine is working. It asks all 8 questions, validates every answer, and adds up the results. Next up, you'll turn that raw number into a verdict using Python's pattern matching.
Add the Verdict, Debug, and Commit to Git
Your scoring loop works. The program asks all 8 questions, validates answers, and tallies a total score.
Now you need to turn that number into something meaningful. A raw score of 5/8 does not tell a founder what to do next. In this step, you will add a verdict system that interprets the score, highlight the weak spots, learn to debug with VS Code's built-in debugger, and save your finished project to Git.
In this step, get ready to:
- Add a match/case verdict system that scores your idea into tiers.
- Use the VS Code debugger to find and fix a bug.
- Initialize a Git repository and make your first commit.
Write the match/case verdict and display results
Python's match/case statement lets you check a value against multiple patterns in one clean structure. You will use it with guards to sort the total score into verdict tiers.
- In founders_filter.py, find this line near the bottom of your file:
print(f"Total score: {total_score}/8")
- Delete that entire line. You will replace it with a much better results display.
- Directly below total_score = sum(scores), add the following match/case block:
# Determine verdict using match/case
match total_score:
case n if 0 <= n <= 2:
verdict = "Kill It \u2014 Back to the drawing board."
case n if 3 <= n <= 4:
verdict = "Weak Signal \u2014 Major gaps. Keep digging."
case n if 5 <= n <= 6:
verdict = "Promising \u2014 Refine and validate fast."
case _:
verdict = "Green Light \u2014 Strong foundation. Move."
What does this code do?
The match keyword takes total_score and compares it against each case pattern from top to bottom. Each case n if ... captures the value into n and only matches if the guard condition (like 0 <= n <= 2) is true.
The final case _: is the wildcard catch-all. Since scores can only be 0 through 8, and the first three cases cover 0 through 6, the wildcard handles scores of 7 and 8.
Now add the results display. Below the match/case block, add this code to print a formatted results summary:
# Print results
print(f"\n{'=' * 40}")
print(f"IDEA: {idea}")
print(f"SCORE: {total_score}/8")
print(f"VERDICT: {verdict}")
What does this code do?
The {'=' * 40} expression inside the f-string repeats the = character 40 times to create a visual divider. The \n at the start adds a blank line above it so the results stand out from the questions.
Finally, add the weak spots section. This loops through the criteria and finds where the user scored 0:
# Print weak spots
weak_spots = []
for i in range(len(criteria)):
if scores[i] == 0:
weak_spots.append(criteria[i].split(" \u2014 ")[0])
if weak_spots:
print(f"\nWeak spots: {', '.join(weak_spots)}")
else:
print("\nNo weak spots \u2014 all criteria passed!")
print(f"{'=' * 40}")
What does this code do?
The for loop uses range(len(criteria)) to get index numbers 0 through 7. For each index where the score is 0, it grabs just the category name by splitting the criterion string at the " \u2014 " separator and keeping the first part.
The ', '.join(weak_spots) combines all the weak category names into a single comma-separated string for clean output.
- Save founders_filter.py.
- Run the program in your terminal by running:
python founders_filter.py
- Answer all 8 questions. You should see a formatted results block with your idea name, score, verdict, and any weak spots listed.
Not seeing the verdict?
Make sure you deleted the old print(f"Total score: {total_score}/8") line. If both the old print and the new match/case exist, the code will still run but the output will look duplicated.
Check that the match line has no indentation (it should be at the same level as total_score = sum(scores) above it). Python is strict about indentation.
Help me fix my match/case verdict code
✔️ Awesome, I've got everything!
Great. Double check you have saved your file before moving on.
ⓧ I'd like to double check the full code
# The Founder's Filter - Business Idea Scoring Tool
# Get the business idea
idea = input("What's your business idea? ")
print(f"\nEvaluating: {idea}")
print("Answer 'yes' or 'no' to each question.\n")
# Criteria list
criteria = [
"Customer \u2014 Is there a clear, specific person with this problem?",
"Pain \u2014 Is the problem urgent or expensive enough to solve?",
"Willingness to Pay \u2014 Would they actually pay money to fix it?",
"Distribution \u2014 Is there a clear way to reach these customers?",
"Differentiation \u2014 Is this meaningfully different from what exists?",
"Scalability \u2014 Can this grow without proportional effort?",
"Proof of Demand \u2014 Is there evidence people already want this?",
"Feasibility \u2014 Can this realistically be built or delivered?"
]
# Scores list
scores = []
# Ask each question and collect scores
for question in criteria:
answer = input(f"{question}\nYour answer: ").strip().lower()
while answer != "yes" and answer != "no":
print("Please answer 'yes' or 'no'.")
answer = input("Your answer: ").strip().lower()
if answer == "yes":
scores.append(1)
else:
scores.append(0)
# Calculate total score
total_score = sum(scores)
# Determine verdict using match/case
match total_score:
case n if 0 <= n <= 2:
verdict = "Kill It \u2014 Back to the drawing board."
case n if 3 <= n <= 4:
verdict = "Weak Signal \u2014 Major gaps. Keep digging."
case n if 5 <= n <= 6:
verdict = "Promising \u2014 Refine and validate fast."
case _:
verdict = "Green Light \u2014 Strong foundation. Move."
# Print results
print(f"\n{'=' * 40}")
print(f"IDEA: {idea}")
print(f"SCORE: {total_score}/8")
print(f"VERDICT: {verdict}")
# Print weak spots
weak_spots = []
for i in range(len(criteria)):
if scores[i] == 0:
weak_spots.append(criteria[i].split(" \u2014 ")[0])
if weak_spots:
print(f"\nWeak spots: {', '.join(weak_spots)}")
else:
print("\nNo weak spots \u2014 all criteria passed!")
print(f"{'=' * 40}")
Use the VS Code debugger to find a bug
Professional developers do not rely on print statements alone to find problems. VS Code has a built-in debugger that lets you pause your program mid-execution and inspect every variable at that moment.
You will introduce a deliberate bug, then use the debugger to catch it.
- In founders_filter.py, find this line:
total_score = sum(scores)
- Temporarily change it to a hardcoded wrong value, so the line looks like this:
total_score = 999
This simulates a real bug where a variable holds an unexpected value. Now use the debugger to catch it.
- Click in the left margin (the gutter) next to the line number for match total_score:. A red circle appears to mark your breakpoint.
- Press F5 to start the debugger.
- A configuration menu appears at the top. Select Python File.
- The program starts running. Answer the 8 questions normally.
- When execution hits your breakpoint, it pauses. Look at the Variables panel on the left side. You should see total_score showing 999 instead of a number between 0 and 8.
- Press F10 (Step Over) a few times to watch the match/case block execute. Notice how it falls through to case _: because 999 does not match any guard.
- Press Shift+F5 to stop the debugger.
Why use a debugger instead of print statements?
Print statements are scattered guesses. A debugger lets you freeze time at any line and inspect every variable without changing your code. You can step forward one line at a time and watch exactly where things go wrong.
This is a skill you will use on every future project. The breakpoint pauses execution at that line before it runs, so you can see the state of the world at that exact moment.
- Now fix the bug. Change the line back to:
total_score = sum(scores)
- Remove the breakpoint by clicking the red circle in the left margin again.
- Save founders_filter.py and run it one more time to confirm the correct verdict appears.
Debugger not stopping at the breakpoint?
Make sure you have the Python extension installed in VS Code. Look for Python in the Extensions sidebar (Ctrl+Shift+X). If it is not installed, search for it and click Install.
If the program runs without pausing, confirm the red circle is visible in the gutter. A faded or gray circle means the breakpoint could not be registered.
Help me get the VS Code Python debugger working
Initialize a Git repository and make your first commit
Your program is complete and working. The last step is to save a permanent snapshot of your project using Git. Think of Git as a filing system for your code. Every time you commit, you create a snapshot you can always return to.
- In your VS Code terminal, make sure you are inside the founders-filter folder. Initialize a Git repository by running:
git init
- Stage your file for the commit by running:
git add .
- Create your first commit by running:
git commit -m "initial commit: founders filter v1"
What do these three commands do?
Think of it like founding and filing a company:
- git init creates a new Git repository in the current folder. This is like registering a new company. From now on, Git tracks changes in this directory.
- git add . stages all your files. This is like boxing up inventory to ship. You are telling Git which files to include in the next snapshot.
- git commit -m "..." saves the snapshot with a message describing what it contains. This is like filing your records. You can always come back to this exact state of the code.
- Confirm the commit worked by running:
git log --oneline
- You should see one line showing a short commit hash followed by initial commit: founders filter v1.
Seeing an error about user identity?
Git may ask you to set your name and email before committing. If you see a message about user.email or user.name, run these two commands first (replacing the placeholders with your info):
git config --global user.email "your-email@example.com"
git config --global user.name "Your Name"
Then run the git commit command again.
Help me fix Git identity errors
Secret mission
Multi-Idea Comparison
What if you could evaluate multiple business ideas in one session and compare them head-to-head? In this extension, you'll upgrade your filter to loop continuously, store every result, and print a ranked comparison table at the end.
Clean Up Your Resources
Clean Up Your Resources
This project runs entirely on your local machine, so there are no ongoing costs. Decide whether to keep your files and tools in place, or remove them entirely.
Resources you used:
- The founders-filter folder on your Desktop (contains founders_filter.py and your Git repository).
- Git for Windows (installed via winget in Step 1).
Keep everything running
No action needed. Choose this if you plan to keep building on The Founder's Filter or want Git available for future projects.
- Your founders-filter folder stays on your Desktop.
- Git remains installed and available from any terminal.
Pause - I'll come back to this later
Nothing to pause. Since this project is entirely local with no running processes, your files simply sit on disk until you return.
- Your founders-filter folder and Git installation stay in place at no cost.
- When you come back, open the folder in VS Code and pick up where you left off.
Delete - I don't want to use this again
Remove all project files and optionally uninstall Git for Windows.
- Delete the project folder by running this command in PowerShell:
- Uninstall Git for Windows by running this command in PowerShell:
Delete the project folder:
Remove-Item -Recurse -Force ~\Desktop\founders-filter
Uninstall Git for Windows:
winget uninstall --id Git.Git
Why keep Git installed?
Git is used in nearly every software project. If you plan to continue learning Python or any other programming language, you will need Git again soon. Only uninstall it if you are sure you will not be coding on this machine.
Nice Work!
Nice Work!
You just built a working command-line business idea scoring tool from scratch using Python. The Founder's Filter takes a raw idea, runs it through 8 evaluation criteria, and delivers a verdict with actionable weak spots.
You've learned how to:
- Build a command-line Python tool using variables, data types, and input() to collect and store user responses.
- Validate input with if/elif/else and while loops, store data in lists, and iterate through criteria with for loops.
- Use Python's match/case with guards to produce a scored verdict, debug with VS Code's debugger, and commit your code to a Git repository.
- Secret Mission: Added multi-idea comparison so you can evaluate and rank multiple business ideas back-to-back.
Ready to quiz yourself?