How do I include another level of Python nested if statements to classify the wind as “Calm”, “Breezy” or “Windy”?

Production Postmortem: Type Handling Failure in Weather Condition Classification

Summary

A production system incorrectly classified weather conditions due to duplicated logic and improper data typing. Wind speed classifications failed universally because:

  • wind_speed inputs were treated as strings instead of floats
  • Classification logic was unnecessarily duplicated across temperature branches
  • wind_type variable accessed before initialization

Root Cause

Two fundamental errors caused complete failure of wind classification:

  • Type Mismatch: Wind speed was captured as a string (wind_speed = input(...)) but compared numerically without conversion
  • Variable Initialization: wind_type += operations attempted without first defining wind_type
  • Code Duplication: Wind classification logic was repeated in all three temperature branches, tripling maintenance overhead

Why This Happens in Real Systems

Three critical system engineering pitfalls:

  • Input handling gaps – Raw input processing without validation/typing
  • DRY principle violations – Logic duplication creates vulnerability hotspots
  • Implicit type assumptions – Undefined conversion contracts in data pipelines

Real-World Impact

In production weather services, this would cause:

  • 100% failure rate in wind condition reporting
  • Operational confusion during severe weather events
  • Cascade failures in downstream systems consuming weather data
  • Masking of actual wind danger conditions (50+ km/h)

Example or Code

Defective Implementation:

# ... temperature branches ...
if raining == "yes":
    condition += " and raining"
else:
    condition += " and dry"

# Wind classification errors ↓
if wind_speed >= 0 and wind_speed <= 5:   # Comparisons on STRING
    wind_type += "Calm"                    # += on undefined variable
# ... repeated in all branches ...

Corrected Structured Implementation:

temperature = float(input("Temperature (C): "))
raining = input("Raining (yes/no): ").lower()
wind_speed = float(input("Wind speed (km/h): "))  # Convert to float

# Temperature classification
if temperature >= 25:
    condition = "Hot"
elif 15 <= temperature < 25:
    condition = "Warm"
else:
    condition = "Cold"

# Rain status
condition += " and raining" if raining == "yes" else " and dry"

# Unified wind classification
if wind_speed <= 5:
    wind_type = "Calm"
elif wind_speed <= 49:
    wind_type = "Breezy"
else:
    wind_type = "Windy"  # Single source of truth

print(f"Weather: {condition} and {wind_type}")

How Senior Engineers Fix It

Senior engineers apply four corrective patterns:

  1. Decouple concerns – Separate data collection from classification
  2. Centralize logic – Replace duplication with single classification functions
  3. Validate inputs – Immediately convert and validate raw inputs
  4. Leverage truthy checks – Simplify conditionals using Python’s comparison chaining
    def classify_wind(speed: float) -> str:
     return "Calm" if speed <= 5 else "Breezy" if speed <= 49 else "Windy"

Why Juniors Miss It

Common junior engineer blind spots:

  • Treating inputs as “ready-to-use” without validation
  • Copy-paste coding without consolidation
  • Assuming system will implicitly convert types
  • Undergraduated nested conditionals (“if-else tunnel vision”)
  • Missing variable initialization edge cases