<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.2.2">Jekyll</generator><link href="https://100daysofcoding.lplazo.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://100daysofcoding.lplazo.com/" rel="alternate" type="text/html" /><updated>2026-07-22T05:08:52+00:00</updated><id>https://100daysofcoding.lplazo.com/feed.xml</id><title type="html">100 Days of Coding Python</title><subtitle>Following a 100-day journey from Python fundamentals to building real AI-powered applications — the projects, the code, and the lessons learned along the way.</subtitle><entry><title type="html">Day 2: Conditionals, Booleans &amp;amp; Imports</title><link href="https://100daysofcoding.lplazo.com/foundations/day-2-conditionals-booleans-imports/" rel="alternate" type="text/html" title="Day 2: Conditionals, Booleans &amp;amp; Imports" /><published>2026-07-21T00:00:00+00:00</published><updated>2026-07-21T00:00:00+00:00</updated><id>https://100daysofcoding.lplazo.com/foundations/day-2-conditionals-booleans-imports</id><content type="html" xml:base="https://100daysofcoding.lplazo.com/foundations/day-2-conditionals-booleans-imports/"><![CDATA[<p><strong>Today’s focus:</strong> Phase 0, Chapter 2 of <em>Python Foundations</em>: <code class="language-plaintext highlighter-rouge">if</code>/<code class="language-plaintext highlighter-rouge">elif</code>/<code class="language-plaintext highlighter-rouge">else</code>, the six comparators, <code class="language-plaintext highlighter-rouge">and</code>/<code class="language-plaintext highlighter-rouge">or</code>/<code class="language-plaintext highlighter-rouge">not</code>, booleans, importing modules, and the <code class="language-plaintext highlighter-rouge">random</code> module. Three challenges: a warm-up, an applied script, and a mini-project.</p>

<h2 id="what-i-built">What I built</h2>

<p><strong>1. Even/Odd &amp; Sign Checker (warm-up)</strong> — checks a number for even/odd and, separately, positive/negative/zero:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Welcome to Even/Odd &amp; Sign Checker App"</span><span class="p">)</span>

<span class="c1"># Convert input string to an integer
</span><span class="n">number</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="nb">input</span><span class="p">(</span><span class="s">"Enter a number: "</span><span class="p">)))</span>

<span class="c1"># Check if the remainder when divided by 2 is 0
</span><span class="k">if</span> <span class="n">number</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
    <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">number</span><span class="si">}</span><span class="s"> is Even"</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
    <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">number</span><span class="si">}</span><span class="s"> is Odd"</span><span class="p">)</span>

<span class="c1"># Check the sign, independent of even/odd
</span><span class="k">if</span> <span class="n">number</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
    <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">number</span><span class="si">}</span><span class="s"> is a Zero number"</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">number</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
    <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">number</span><span class="si">}</span><span class="s"> is a Negative Integer"</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
    <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">number</span><span class="si">}</span><span class="s"> is a Positive Integer"</span><span class="p">)</span>
</code></pre></div></div>

<p><strong>2. Number Guessing Game (applied)</strong> — generates a secret number with <code class="language-plaintext highlighter-rouge">random.randint()</code>, then tells the player if they were exact, close (within 3), or far off, plus which direction to guess next:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">random</span>

<span class="k">def</span> <span class="nf">calculate_probability</span><span class="p">(</span><span class="n">min_val</span><span class="p">,</span> <span class="n">max_val</span><span class="p">):</span>
    <span class="s">"""Calculates the percentage chance of guessing correctly in an inclusive range [min_val, max_val]."""</span>
    <span class="n">total_outcomes</span> <span class="o">=</span> <span class="p">(</span><span class="n">max_val</span> <span class="o">-</span> <span class="n">min_val</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
    <span class="k">return</span> <span class="p">(</span><span class="mi">1</span> <span class="o">/</span> <span class="n">total_outcomes</span><span class="p">)</span> <span class="o">*</span> <span class="mi">100</span>

<span class="k">print</span><span class="p">(</span><span class="s">"Welcome to my number Guessing Game!"</span><span class="p">)</span>

<span class="n">min_range</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">max_range</span> <span class="o">=</span> <span class="mi">10</span>

<span class="n">win_percentage</span> <span class="o">=</span> <span class="n">calculate_probability</span><span class="p">(</span><span class="n">min_range</span><span class="p">,</span> <span class="n">max_range</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Your probability of guessing correctly is </span><span class="si">{</span><span class="n">win_percentage</span><span class="si">:</span><span class="p">.</span><span class="mi">1</span><span class="n">f</span><span class="si">}</span><span class="s">%</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>

<span class="n">guess_num</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">(</span><span class="sa">f</span><span class="s">"Guess the number from </span><span class="si">{</span><span class="n">min_range</span><span class="si">}</span><span class="s"> - </span><span class="si">{</span><span class="n">max_range</span><span class="si">}</span><span class="s">: "</span><span class="p">))</span>
<span class="n">secret_num</span> <span class="o">=</span> <span class="n">random</span><span class="p">.</span><span class="n">randint</span><span class="p">(</span><span class="n">min_range</span><span class="p">,</span> <span class="n">max_range</span><span class="p">)</span>

<span class="n">difference</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">guess_num</span> <span class="o">-</span> <span class="n">secret_num</span><span class="p">)</span>

<span class="k">if</span> <span class="n">guess_num</span> <span class="o">==</span> <span class="n">secret_num</span><span class="p">:</span>
    <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"🎉 Exactly right! The secret number was </span><span class="si">{</span><span class="n">secret_num</span><span class="si">}</span><span class="s">."</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">difference</span> <span class="o">&lt;=</span> <span class="mi">3</span><span class="p">:</span>
    <span class="k">if</span> <span class="n">guess_num</span> <span class="o">&lt;</span> <span class="n">secret_num</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Close! You were within 3. Try guessing HIGHER next time. (Secret: </span><span class="si">{</span><span class="n">secret_num</span><span class="si">}</span><span class="s">)"</span><span class="p">)</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Close! You were within 3. Try guessing LOWER next time. (Secret: </span><span class="si">{</span><span class="n">secret_num</span><span class="si">}</span><span class="s">)"</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
    <span class="k">if</span> <span class="n">guess_num</span> <span class="o">&lt;</span> <span class="n">secret_num</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Far off! Try guessing HIGHER next time. (Secret: </span><span class="si">{</span><span class="n">secret_num</span><span class="si">}</span><span class="s">)"</span><span class="p">)</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Far off! Try guessing LOWER next time. (Secret: </span><span class="si">{</span><span class="n">secret_num</span><span class="si">}</span><span class="s">)"</span><span class="p">)</span>
</code></pre></div></div>

<p><strong>3. Login Gatekeeper (mini-project)</strong> — checks a hardcoded username/password against user input with boolean logic, covering four outcomes, plus a random welcome message on success:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">random</span>

<span class="k">print</span><span class="p">(</span><span class="s">"Welcome to Login Gatekeeper"</span><span class="p">)</span>
<span class="n">welcome_msg</span> <span class="o">=</span> <span class="p">(</span><span class="s">"Welcome back!"</span><span class="p">,</span> <span class="s">"Heya there!"</span><span class="p">,</span> <span class="s">"Aloha amigo!"</span><span class="p">)</span>

<span class="n">secret_usr</span> <span class="o">=</span> <span class="s">"johnny123"</span>
<span class="n">secret_pwd</span> <span class="o">=</span> <span class="s">"letmein2"</span>

<span class="n">check_usr</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">"Enter your username : </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
<span class="n">check_pwd</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">"Enter your password : </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>

<span class="k">if</span> <span class="n">secret_usr</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">check_usr</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="n">secret_pwd</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">check_pwd</span><span class="p">.</span><span class="n">lower</span><span class="p">():</span>
    <span class="k">print</span><span class="p">(</span><span class="s">"You are logged in"</span><span class="p">)</span>
    <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">random</span><span class="p">.</span><span class="n">choice</span><span class="p">(</span><span class="n">welcome_msg</span><span class="p">)</span><span class="si">}</span><span class="s">"</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">secret_usr</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">check_usr</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="n">secret_pwd</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="n">check_pwd</span><span class="p">.</span><span class="n">lower</span><span class="p">():</span>
    <span class="k">print</span><span class="p">(</span><span class="s">"Password is incorrect"</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">secret_usr</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="n">check_usr</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="n">secret_pwd</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">check_pwd</span><span class="p">.</span><span class="n">lower</span><span class="p">():</span>
    <span class="k">print</span><span class="p">(</span><span class="s">"Username is incorrect"</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
    <span class="k">print</span><span class="p">(</span><span class="s">"Wrong username or password !"</span><span class="p">)</span>
</code></pre></div></div>

<h2 id="challenges-i-ran-into">Challenges I ran into</h2>

<p>The login gatekeeper came together cleanly on the first pass — the four-outcome branching mapped naturally onto <code class="language-plaintext highlighter-rouge">if</code>/<code class="language-plaintext highlighter-rouge">elif</code>/<code class="language-plaintext highlighter-rouge">elif</code>/<code class="language-plaintext highlighter-rouge">else</code>. The other two needed a second look:</p>

<ul>
  <li><strong>Reading “separately” too literally at first.</strong> My first draft of the sign checker duplicated the positive/negative/zero logic inside both the even and odd branches — technically correct, but redundant since sign doesn’t depend on even/odd at all. Pulling it out into its own independent <code class="language-plaintext highlighter-rouge">if</code>/<code class="language-plaintext highlighter-rouge">elif</code>/<code class="language-plaintext highlighter-rouge">else</code> block after the even/odd check cut the code in half with identical output.</li>
  <li><strong>Nested conditionals vs. combined <code class="language-plaintext highlighter-rouge">and</code>/<code class="language-plaintext highlighter-rouge">or</code>.</strong> The guessing game’s “close vs. far, higher vs. lower” logic works with nested <code class="language-plaintext highlighter-rouge">if</code> blocks, but the challenge was really asking for compound conditions like <code class="language-plaintext highlighter-rouge">guess_num &lt; secret_num and difference &lt;= 3</code> chained directly. Both get the same result — nesting is just more branches to trace instead of one line to read.</li>
  <li><strong><code class="language-plaintext highlighter-rouge">.lower()</code> wasn’t required but felt necessary.</strong> For the login check, comparing raw strings meant <code class="language-plaintext highlighter-rouge">"Johnny123"</code> would fail against <code class="language-plaintext highlighter-rouge">"johnny123"</code>. Normalizing both sides with <code class="language-plaintext highlighter-rouge">.lower()</code> before comparing wasn’t in the spec, but it’s the kind of thing that matters the moment a real person types into the prompt.</li>
</ul>

<h2 id="what-i-learned">What I learned</h2>

<p>Comparators and booleans aren’t just for a single <code class="language-plaintext highlighter-rouge">if</code> — chaining <code class="language-plaintext highlighter-rouge">and</code>/<code class="language-plaintext highlighter-rouge">or</code> (or nesting conditionals to the same effect) is how you turn “is this true” into “is this specific combination of things true.” <code class="language-plaintext highlighter-rouge">random.randint()</code> and <code class="language-plaintext highlighter-rouge">random.choice()</code> cover two different needs: one picks a number in a range, the other picks an item from a list — useful to keep straight since they get reached for in different situations. And <code class="language-plaintext highlighter-rouge">elif</code> chains read better than deeply nested <code class="language-plaintext highlighter-rouge">if</code>s once there are more than two or three outcomes to cover, which the login gatekeeper’s four cases made obvious.</p>

<h2 id="next">Next</h2>

<p>Day 3 picks up lists and loops: creating and indexing lists, <code class="language-plaintext highlighter-rouge">.append()</code>/<code class="language-plaintext highlighter-rouge">.remove()</code>/<code class="language-plaintext highlighter-rouge">del</code>, the <code class="language-plaintext highlighter-rouge">in</code> operator, <code class="language-plaintext highlighter-rouge">for</code> loops, <code class="language-plaintext highlighter-rouge">range()</code>, <code class="language-plaintext highlighter-rouge">sum()</code>, and <code class="language-plaintext highlighter-rouge">break</code>.</p>]]></content><author><name></name></author><category term="foundations" /><summary type="html"><![CDATA[Today’s focus: Phase 0, Chapter 2 of Python Foundations: if/elif/else, the six comparators, and/or/not, booleans, importing modules, and the random module. Three challenges: a warm-up, an applied script, and a mini-project.]]></summary></entry><entry><title type="html">Day 1: Data Types &amp;amp; Input/Output</title><link href="https://100daysofcoding.lplazo.com/foundations/day-1-data-types-io/" rel="alternate" type="text/html" title="Day 1: Data Types &amp;amp; Input/Output" /><published>2026-07-20T00:00:00+00:00</published><updated>2026-07-20T00:00:00+00:00</updated><id>https://100daysofcoding.lplazo.com/foundations/day-1-data-types-io</id><content type="html" xml:base="https://100daysofcoding.lplazo.com/foundations/day-1-data-types-io/"><![CDATA[<p><strong>Today’s focus:</strong> Phase 0 of my 100 Days of Code recap — Chapter 1 of <em>Python Foundations</em>: variables, <code class="language-plaintext highlighter-rouge">int</code>/<code class="language-plaintext highlighter-rouge">float</code>/<code class="language-plaintext highlighter-rouge">str</code>, <code class="language-plaintext highlighter-rouge">input()</code>/<code class="language-plaintext highlighter-rouge">print()</code>, type conversion, string concatenation, and comments. Three challenges, increasing difficulty: a warm-up, an applied script, and a mini-project.</p>

<h2 id="what-i-built">What I built</h2>

<p><strong>1. Mad Libs Generator (warm-up)</strong> — collects a few words with <code class="language-plaintext highlighter-rouge">input()</code> and concatenates them into a silly sentence:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">print</span><span class="p">(</span><span class="s">"Welcome to Mad Libs!"</span><span class="p">)</span>
<span class="c1">#adjective
</span><span class="n">adjective</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">"Enter an adjective word: "</span><span class="p">)</span>
<span class="c1">#noun
</span><span class="n">noun</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">"Enter a noun word: "</span><span class="p">)</span>
<span class="c1">#name of verb
</span><span class="n">verb</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">"Enter a verb word: "</span><span class="p">)</span>
<span class="c1">#name of the animal
</span><span class="n">animal</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">"Enter an animal word: "</span><span class="p">)</span>

<span class="c1">#print mad lib sentence
</span><span class="k">print</span><span class="p">(</span><span class="s">"The "</span> <span class="o">+</span> <span class="n">adjective</span> <span class="o">+</span> <span class="s">" "</span> <span class="o">+</span> <span class="n">noun</span> <span class="o">+</span> <span class="s">" "</span> <span class="o">+</span> <span class="n">verb</span> <span class="o">+</span> <span class="s">" "</span> <span class="o">+</span> <span class="n">animal</span> <span class="o">+</span> <span class="s">"s"</span><span class="p">)</span>
</code></pre></div></div>

<p><strong>2. Tip Calculator (applied)</strong> — splits a bill with tip across a group, using type conversion and formatted output:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#total bill
</span><span class="n">total_bill</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="nb">input</span><span class="p">(</span><span class="s">"Enter the total bill amount: "</span><span class="p">))</span>
<span class="c1">#total people splitting the bill
</span><span class="n">total_people</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="nb">input</span><span class="p">(</span><span class="s">"Enter the number of people splitting the bill: "</span><span class="p">))</span>
<span class="c1">#percentage of the tip
</span><span class="n">tip_percent</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="nb">input</span><span class="p">(</span><span class="s">"Enter the tip percent (e.g. 10, 15, or 20): "</span><span class="p">))</span>
<span class="c1">#total bill with tip
</span><span class="n">bill_plus_tip</span> <span class="o">=</span> <span class="n">total_bill</span> <span class="o">+</span> <span class="p">(</span><span class="n">total_bill</span> <span class="o">*</span> <span class="p">(</span><span class="n">tip_percent</span> <span class="o">/</span> <span class="mi">100</span><span class="p">))</span>
<span class="c1">#amount owe by each person
</span><span class="n">person_owe</span> <span class="o">=</span> <span class="n">bill_plus_tip</span> <span class="o">/</span> <span class="n">total_people</span>

<span class="c1">#print out the total bill and each person split
</span><span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"The total bill with tip is: </span><span class="si">{</span><span class="n">bill_plus_tip</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="s">"</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Each person owes: </span><span class="si">{</span><span class="n">person_owe</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="s">"</span><span class="p">)</span>
</code></pre></div></div>

<p><strong>3. Profile Card Generator (mini-project)</strong> — takes name, birth year, height, and weight, calculates current age, and prints a formatted summary card:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>

<span class="c1">#name
</span><span class="n">name</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">"What is your name? : </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
<span class="c1">#birth year
</span><span class="n">birth_year</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">"What is your birth year? : </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
<span class="c1">#height in cm
</span><span class="n">height</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">"What is your height in cm? : </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
<span class="c1">#weight in kg
</span><span class="n">weight</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">"What is your weight in kg? : </span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>

<span class="n">age_now</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">datetime</span><span class="p">.</span><span class="n">now</span><span class="p">().</span><span class="n">year</span><span class="p">)</span> <span class="o">-</span> <span class="nb">int</span><span class="p">(</span><span class="n">birth_year</span><span class="p">)</span>

<span class="c1"># printout the profile in multiline format
</span><span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"""
    ### Profile Card ###
    Name: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s">
    Birth Year: </span><span class="si">{</span><span class="n">birth_year</span><span class="si">}</span><span class="s">
    Height: </span><span class="si">{</span><span class="n">height</span><span class="si">}</span><span class="s"> cm
    Weight: </span><span class="si">{</span><span class="n">weight</span><span class="si">}</span><span class="s"> kg
    Age now: </span><span class="si">{</span><span class="n">age_now</span><span class="si">}</span><span class="s">
"""</span><span class="p">)</span>
</code></pre></div></div>

<h2 id="challenges-i-ran-into">Challenges I ran into</h2>

<p>The tip calculator was the cleanest of the three — the input → calculate → output flow clicked fast. The rough edges showed up in the details:</p>

<ul>
  <li><strong>Redundant type conversion.</strong> My first pass wrapped values in <code class="language-plaintext highlighter-rouge">float()</code> or <code class="language-plaintext highlighter-rouge">int()</code> that were already the right type — e.g. <code class="language-plaintext highlighter-rouge">float(bill_plus_tip / total_people)</code> when dividing two floats already returns a float. Easy mistake, easy fix once it’s pointed out.</li>
  <li><strong>Forgetting to convert everything I collect, not just what I calculate with.</strong> In the profile card, <code class="language-plaintext highlighter-rouge">birth_year</code> gets converted because I need it for math, but <code class="language-plaintext highlighter-rouge">height</code> and <code class="language-plaintext highlighter-rouge">weight</code> stay as raw strings from <code class="language-plaintext highlighter-rouge">input()</code> since I only print them. It works, but it means I only practiced type conversion on the one field that forced my hand — something to be more deliberate about next time, even when a value isn’t immediately used in a calculation.</li>
  <li><strong>Comments as an afterthought.</strong> I wrote all three scripts first and added the explanatory comments on a second pass. Good habit to build: comment while writing, not after.</li>
</ul>

<h2 id="what-i-learned">What I learned</h2>

<p><code class="language-plaintext highlighter-rouge">input()</code> always returns a string — no exceptions — so every number I want to do math with has to pass through <code class="language-plaintext highlighter-rouge">int()</code> or <code class="language-plaintext highlighter-rouge">float()</code> explicitly. F-strings with format specs like <code class="language-plaintext highlighter-rouge">{value:.2f}</code> are a clean way to control decimal output without manual rounding. And string concatenation with <code class="language-plaintext highlighter-rouge">+</code> works fine for short sentences, but gets noisy fast — f-strings scale better once there’s more than two or three pieces to stitch together.</p>

<h2 id="next">Next</h2>

<p>Day 2 picks up conditionals, booleans, and the <code class="language-plaintext highlighter-rouge">random</code> module — <code class="language-plaintext highlighter-rouge">if</code>/<code class="language-plaintext highlighter-rouge">elif</code>/<code class="language-plaintext highlighter-rouge">else</code>, comparators, <code class="language-plaintext highlighter-rouge">and</code>/<code class="language-plaintext highlighter-rouge">or</code>/<code class="language-plaintext highlighter-rouge">not</code>, and importing modules for the first time.</p>]]></content><author><name></name></author><category term="foundations" /><summary type="html"><![CDATA[Today’s focus: Phase 0 of my 100 Days of Code recap — Chapter 1 of Python Foundations: variables, int/float/str, input()/print(), type conversion, string concatenation, and comments. Three challenges, increasing difficulty: a warm-up, an applied script, and a mini-project.]]></summary></entry></feed>