Python counter confusion for while loop

Question:

import random, string

goal='methinks it is like a weasel'

def simulation(length):
   return ''.join(random.choice('abcdefghijklmnopqrstuvwxyz ') for i in range(length))

def score(stri):
    if stri==goal:
        print(100)
    else:
        print(0)

n=0
stri='abcd'
while score(stri) != 100:
      n += 1
      stri = simulation(28)
print(n)

For the final while loop, as long as score(stri) not equal to 100, it’ll iterate and accumulate n, correct? Then I’ll printout the accumulated n , when score(stri) happened to equal 100.

But I got results like:

0
0
0
0
0
0
...

Obviously it’s always outputing ‘n=0’; it’s because this is global variable?

But I then tried extremely easy while loop:

n=0
while n <= 5:
    n += 1
print(n)

It’s successfully outputs 6

I don’t know why my first code goes wrong, guess while loop gets sth wrong because of def()?

Asked By: LookIntoEast

||

Answers:

You need to return from score instead of printing:

def score(stri):
    if stri == goal:
        return 100
    else:
        return 0

This is failing herewhile score(stri) != 100: because when you call the function score it is only printing (displaying output) and not returning a value to be used in the while loop condition.

Answered By: tknickman