Solutions to Python Basics - Conditional Logic and Input
Exercise 1 - Login System
Here we create a simple username-password checker by comparing user input to stored variables, using nested if-statements.
week2_solutions_ex1.py
# Store the name and password in 2 separate variablesname ="Alex"password ="1234"# First get the user to enter their nameinput_name =input("Enter your username: ")# Check against the name we have stored in 'name'if input_name != name:# The input_name does not equal the nameprint("You have entered an incorrect username")else:# The input_name matches the name -> ask for password input_password =input("Enter your password")if input_password == password:# Password is correct -> print a secret messageprint("this is a secret")else:# Password didn't match -> print an errorprint("You have entered an incorrect password")
Extension Exercise 1 - Case Sensitivity
Here we use the .lower() function to ensure that our system isn't sensitive to capitalization in usernames - this also means that we need to store lowercase usernames in our "database".
Note that the **.lower() function does not reassign** the value of a variable automatically, so we have to reassign manually.
week2_solutions_ext1.py
# Store the name and password in 2 separate variablesname ="alex"# name must be lowercasepassword ="1234"# First get the user to enter their nameinput_name =input("Enter your username: ")input_name = input_name.lower()# Convert to lowercaseif input_name != name:# input_name does not equal the nameprint("You have entered an incorrect username")else:# input_name matches name -> ask for password input_password =input("Enter your password")if input_password == password:# Password is correct -> print a secret messageprint("this is a secret")else:# Password didn't match -> print an errorprint("You have entered an incorrect password")
Extension Exercise 2 - Two users
The aim of this extension and the next is to become comfortable with many different levels of nested statements, and more complicated logical expressions.
Note: These examples are fairly ugly and contrived - in future weeks we will see how we could make this system far more efficient, and our code far more elegant.
week2_solutions_ext2.py
# For each user, store the name and password seperately# Again, name must be lowercasename1 ="alex"password1 ="1234"name2 ="joe"password2 ="5678"# First get user to enter their nameinput_name =input("Enter your username: ")input_name = input_name.lower()# Convert to lowercase# Check if the username matches one we have storedif input_name == name1 or input_name == name2:# Valid username -> Ask for password input_password =input("Enter your password: ")# Now check that the password matches for the corresponding userif input_name == name1 and input_password == password1:print("Welcome, First user")elif input_name == name2 and input_password == password2:print("Hey there, Second user")else:# Password didn't match print("You have entered an incorrect password")else:# Username didn't matchprint("You have entered an invalid username")
Extension 3 - Bad Passwords
This is a fairly grueling exercise, but quickly recognizing the logical exclusivity which is implied by the indentation level of a piece of code is an essential skill for python programmers - so try and make sure you fully understand why this solution works!
week2_solutions_ext3.py
# For each user, store the name and password seperately# Again, name must be lowercasename1 ="alex"password1 ="1234"name2 ="joe"password2 ="5678"# First get user to enter their nameinput_name =input("Enter your username: ")input_name = input_name.lower()# Convert to lowercase# Check if the username matches one we have storedif input_name == name1 or input_name == name2:# Valid username -> Ask for password input_password =input("Enter your password: ")# Now check that the password matches for the corresponding user# Do it in one big check, so we don't have to repeat the password checkif ((input_name == name1 and input_password == password1) or (input_name == name2 and input_password == password2)):print("Welcome, "+ input_name)# Check if the password contains a bad componentif ("1234"in input_password or"pass"in input_password or"word"in input_password):# Ask if they want to change their password change_password =input("Warning: Password Sucks, change?(y/n): ")if change_password =="y":# Get a new password, and print it out to show its changed new_password =input("Enter new password: ")# Need to change the correct passwordif input_name == name1: password1 = new_passwordelse:# Know this must be user2 password2 = new_passwordprint("Succesfully change password to :"+ new_password)else:# Password didn't match print("You have entered an incorrect password")else:# Username didn't matchprint("You have entered an invalid username")