Python 为什么在使用变量而不是len函数时会得到不同的输出

Python 为什么在使用变量而不是len函数时会得到不同的输出,python,Python,我试图理解为什么在代码行中使用len函数而不是在for循环开始时定义的变量时会收到不同的输出 if len(longest_temp) > len(longest): longest = longest_temp vs s='uwgwsamtptsouvz' 最长温度=“” 最长=“” 字母_值={':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

我试图理解为什么在代码行中使用len函数而不是在for循环开始时定义的变量时会收到不同的输出

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

s='uwgwsamtptsouvz'
最长温度=“”
最长=“”
字母_值={':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}
对于字母s:
最长长度=长度(最长温度)-1
最长检查=长度(最长)-1
如果最长_长度==-1:
最长时间=最长时间+字母
elif字母值[字母]>=字母值[最长温度[(最长长度)]:
最长时间=最长时间+字母
elif字母值[字母]<字母值[最长温度[(最长长度)]:
如果最长长度>最长长度检查:
最长=最长温度
最长的字母
其他:
最长的字母
如果len(最长温度)>len(最长):
最长=最长温度
打印('按字母顺序排列的最长子字符串为:',最长)
如果您这样做

print(longest_length, longest_check)
print(longest_temp, longest)
您将得到以下结果:

-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
然后您可以看到它结束了循环,并且不更新
longest\u check
longest\u length
的值

因此,只需将值设置代码放在最后:

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)
s='uwgwsamtptsouvz'
最长温度=“”
最长=“”
字母_值={':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}
最长长度=长度(最长温度)-1
最长检查=长度(最长)-1
对于字母s:
如果最长_长度==-1:
最长时间=最长时间+字母
elif字母值[字母]>=字母值[最长温度[(最长长度)]:
最长时间=最长时间+字母
elif字母值[字母]<字母值[最长温度[(最长长度)]:
如果最长长度>最长长度检查:
最长=最长温度
最长的字母
其他:
最长的字母
最长长度=长度(最长温度)-1
最长检查=长度(最长)-1
如果最长长度>最长长度检查:
最长=最长温度
打印('按字母顺序排列的最长子字符串为:',最长)

现在它工作了

您知道您正在将局部变量设置为比长度小一个吗<代码>最长长度=长度(最长温度)-1
-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
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)