Bubbz
Bubbz

Reputation: 21

Why do I get a different output when I use my variable instead of the len function

I am trying to understand why I would receive a different output when I use the len function in the line of code, rather than the variables I defined at the beginning of the for loop.

if len(longest_temp) > len(longest):
    longest = longest_temp

vs

if longest_length > longest_check:
    longest = longest_temp
s = 'uwgwsamtptsouvz'
longest_temp = ''
longest = ''
letter_values = {'': 0,'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10, "k": 11, 'l': 12, 'm': 13, 'n': 14,'o': 15,'p': 16,'q': 17,'r': 18,'s': 19,'t': 20,'u': 21,'v': 22,'w': 23,'x': 24,'y': 25,'z': 26}

for letter in s:  
    longest_length = len(longest_temp)-1
    longest_check = len(longest)-1
    
    if longest_length == -1:
        longest_temp = longest_temp + letter
        
    
    elif letter_values[letter] >= letter_values[longest_temp[(longest_length)]]:
        longest_temp = longest_temp + letter
        
    
    elif letter_values[letter] < letter_values[longest_temp[(longest_length)]]:
        if longest_length > longest_check:
            longest = longest_temp
            longest_temp = letter
        else:
            longest_temp = letter
    
if len(longest_temp) > len(longest):
    longest = longest_temp
        

print('longest substring in alphabetical order is:', longest)

Upvotes: 2

Views: 53

Answers (1)

ppwater
ppwater

Reputation: 2277

if you do

print(longest_length, longest_check)
print(longest_temp, longest)

you get a result of:

-1 -1
u 
0 -1
uw 
1 -1
g uw
0 1
gw uw
1 1
s uw
0 1
a uw
0 1
am uw
1 1
amt uw
2 1
p amt
0 2
pt amt
1 2
s amt
0 2
o amt
0 2
ou amt
1 2
ouv amt
2 2
ouvz amt

Then you can see it ends the loop and doesn't update the value of longest_check and longest_length.

So, just put the value setting code to the last:

s = 'uwgwsamtptsouvz'
longest_temp = ''
longest = ''
letter_values = {'': 0,'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10, "k": 11, 'l': 12, 'm': 13, 'n': 14,'o': 15,'p': 16,'q': 17,'r': 18,'s': 19,'t': 20,'u': 21,'v': 22,'w': 23,'x': 24,'y': 25,'z': 26}
longest_length = len(longest_temp)-1
longest_check = len(longest)-1
for letter in s:  
    
    if longest_length == -1:
        longest_temp = longest_temp + letter
        
    
    elif letter_values[letter] >= letter_values[longest_temp[(longest_length)]]:
        longest_temp = longest_temp + letter
        
    
    elif letter_values[letter] < letter_values[longest_temp[(longest_length)]]:
        if longest_length > longest_check:
            longest = longest_temp
            longest_temp = letter
        else:
            longest_temp = letter
    longest_length = len(longest_temp)-1
    longest_check = len(longest)-1
if longest_length > longest_check:
    longest = longest_temp
        

print('longest substring in alphabetical order is:', longest)

Now it works!

Upvotes: 1

Related Questions