Lesestoff uke 2

Denne ukens lesestoff fra boken Automate the Boring Stuff:

Lesestoff fra kursnotatene som er relevant for denne uken:

Utforskning


Boolske operatorer

Noen operasjoner er så vanlige at vi har spesielle symboler for å utføre dem. For eksempel symboler som + for addisjon. Du kan finne en oversikt over alle operatorene i Python i denne tabellen. Mange av dem vil vi lære mer om senere i kurset, men nå skal vi fokusere på bruken av symbolene and, or og not for å utføre boolske operasjoner.

Her er noen eksempler på de boolske operatorene and, or og not.

print("Boolean operators")
print(True and True)
print(True and False)
print("--------")
print(True or False)
print(True or True)
print("--------")
print(not True)
print(not False)

print("Larger boolean expressions")

test_1 = (5 > 3) and ("a" < "c")
print(f"test_1 = {test_1}")

x = True
test_2 = (not x) and x
print(f"test_2 = {test_2}")

sky_is_green = False
grass_is_green = True
test_3 = sky_is_green and grass_is_green
print(f"test_3 = {test_3}")


print("Confuse yourself...")
true = False
false = True
# decide what the output will be before running!
test_4 = true and True
print(test_4)
test_5 = test_4 or false
print(test_5)
Øving if

Kjør koden nedenfor. Prøve å tegne et bilde av kontrollflyten for a > b i koden.

a = 5
b = 9

#############

if a > b:
    print("Bigger!")

print("BBB")

#############

if a == b:
    print("The same!")
    print("More than one line can be here:")
    print("as")
    print("many")
    print("as")
    print("you")
    print("like.")

print("CCC")

#############

if a > 5 and b < 10:
    print("A is above 5 and B is less than 10")

Her er noen if-setninger som ikke er så gode. Hva er galt med dem? Hvordan kan du skrive dem bedre?

# How not to not write bad if-conditions

if (a < b) == True:  # Do *not* write comparisons like this!
    print('Writing "if (a<b) == True" is doing double work!')
    print('"a < b" is already a boolean by itself.')
    print('Writing "if True==True:" doesn\'t make it more true')

if not (a >= b) == False:  # nooooo! use this instead: if a >= b:
    print("An if statement with many negatives is not readable")

# We can save booleans in variables.
a_smaller_than_b = a < b  # What value does this variable have?

# We can then use them in if-statements.
if a_smaller_than_b:
    print("'a' is smaller than 'b'.")

La oss prøve et siste eksempel på if-setninger. Hvorfor skrives ut ingenting i den siste if-setningen? Kan du endre koden slik at noe blir skrevet ut i den?

x = 101.2
y = -56.8
z = 104

if z % 5 == 0:
    print("Z is divisible by 5")
    if x > 100:
        print("Also, x is larger than 100")
    if y > 50:
        print("Also, y is larger than 50")
    print("Still in the Z if-block")
print("Outside again. Try other values for x y z")
Øving elif

Hvorfor blir det ulike resultater fra ’Flow 4’ med elif og ’Flow 4’ med bare if?

# Prøv å tegne diagram til vert programflyt!
print("Flow 1")
if False:
    print("A")
elif False:
    print("B")
elif False:
    print("C")
elif False:
    print("D")
else:
    print("E")
#######################
print("Flow 2")
if False:
    print("A")
elif False:
    print("B")
elif True:
    print("C")
elif False:
    print("D")
else:
    print("E")
#######################
print("Flow 3")
if True:
    print("A")
elif False:
    print("B")
elif False:
    print("C")
elif False:
    print("D")
else:
    print("E")
#######################
print("Flow 4")
if False:
    print("A")
elif True:
    print("B")
elif False:
    print("C")
elif True:
    print("D")
else:
    print("E")
#######################
print("Flow 4, just using if")
if False:
    print("A")
if True:
    print("B")
if False:
    print("C")
if True:
    print("D")
else:
    print("E")

Her er et annet eksempel av if-elif som er litt morsommere. Tenk deg at du spiller The Witcher og du har nettopp kommet til byen. Du møtt en fyr på puben, og må bestemme deg hva du skal gjør neste:

pub_guy = "angry"

if pub_guy == "happy":
  print("Let's have a pint!")
elif pub_guy == "demon":
  print("Slay him")
else:
  print("Grunt and walk away")

Kan du tegne et diagram for denne programflyten?

Finn feilene

Her er noen eksempler på kode som ikke er riktig. Prøv å finn feilene uten å kjøre koden først.

Finn feilen og endre slik at koden går ann å kjøre.

Hva hvis en som besøker museumet er både en senior og en student? Endre koden slik at denne personen betaler riktig pris (en person som tilhører to kategorier betaler kun den billigste prisen).

number = 42
if number % 7 == 0
    print(f"{number} is divisible by 7.")

if number % 5 = 0:
    print(f"{number} is divisible by 5.")


name = "Alice"
if name == Alice:
    print('Hello, Alice!')


if True:
    print('A')
     print('B')
   print('C')

   

if 5 < 3:
    print('Five is smaller than three')
    else:
        print('Five is bigger than three')


# This code should tell a visitor entering a museum what
# they must pay, depending on whether the visitor is a
# senior, a student or none of the above. Try some different values.


visitor_is_senior == False
visitor_is_student == False

if visitor_is_senior:
    print('Please pay 80 NOK.')
if visitor_is_student:
    print('Please pay 90 NOK.')
else:
    print('Please pay 100 NOK.')