【问题标题】:I don't understand why i get difference answer by change put line if on in code我不明白为什么我在代码中通过更改放置行得到不同的答案
【发布时间】:2016-09-05 17:57:01
【问题描述】:

我会编写一个程序来打印 s 的最长子字符串,其中字母按字母顺序出现。例如s = 'azcbobobegghakl' 将打印出'beggh'

s = 'azcbobobegghakl'
result = ''
word ='a'
sen = ''
for alpha in s:
  if alpha < word:
        word ='a'
        sen = ''   
  if alpha >= word:   
        word = alpha
        sen += alpha
        if len(result) <len(sen):
            result = sen

print('Longest substring in alphabetical order is: '+ result)

答案是

Logest substring in alphabetical order is: beggh

但只需将代码放在不同的行上。我答错了!!!

s = 'azcbobobegghakl'
result = ''
word ='a'
sen = ''
for alpha in s:  
  if alpha >= word:   
       word = alpha
       sen += alpha
       if len(result) <len(sen):
           result = sen
  if alpha < word:
     word ='a'
     sen = '' 
print('Longest substring in alphabetical order is: '+ result)

回答

Longest substring in alphabetical order is: eggh

这个问题把我逼疯了!!!

【问题讨论】:

  • 如果alpha &lt; word 为真,那么您设置word = 'a'。因此,alpha &gt;= word 也将为 True。但是如果你交换两个ifs,情况就不是这样了,所以你最终会跳过第一个字符。
  • 哦,谢谢你!!!我明白了!!!

标签: python


【解决方案1】:

好的,假设您有几个函数 f1 和 f2,并且您正在跟踪 for 循环的每次迭代,如下所示:

def f1(s):
    result = ''
    word = 'a'
    sen = ''
    for index, alpha in enumerate(s):
        if alpha < word:
            word = 'a'
            sen = ''
        if alpha >= word:
            word = alpha
            sen += alpha
            if len(result) < len(sen):
                result = sen

        print("{0}-{1} => {2}".format(index, alpha, result))

    return result


def f2(s):
    result = ''
    word = 'a'
    sen = ''
    for index, alpha in enumerate(s):
        if alpha >= word:
            word = alpha
            sen += alpha
            if len(result) < len(sen):
                result = sen
        if alpha < word:
            word = 'a'
            sen = ''

        print("{0}-{1} => {2}".format(index, alpha, result))

    return result

s = 'azcbobobegghakl'
print('-' * 80)
print('f1: Longest substring in alphabetical order is: ' + f1(s))
print('-' * 80)
print('f2: Longest substring in alphabetical order is: ' + f2(s))

现在,运行这个脚本会产生:

--------------------------------------------------------------------------------
0-a => a
1-z => az
2-c => az
3-b => az
4-o => az
5-b => az
6-o => az
7-b => az
8-e => az
9-g => beg
10-g => begg
11-h => beggh
12-a => beggh
13-k => beggh
14-l => beggh
f1: Longest substring in alphabetical order is: beggh
--------------------------------------------------------------------------------
0-a => a
1-z => az
2-c => az
3-b => az
4-o => az
5-b => az
6-o => az
7-b => az
8-e => az
9-g => az
10-g => egg
11-h => eggh
12-a => eggh
13-k => eggh
14-l => eggh
f2: Longest substring in alphabetical order is: eggh

如你所见,在迭代 9 之前一切都是一样的,f1 结果变为 9-g =&gt; beg 而 f2 变为 9-g =&gt; az,这就是顺序更改对结果的影响,希望有意义现在。

【讨论】:

    【解决方案2】:

    您正在丢弃新序列的第一个字符

    s = 'azcbobobegghakl'
    result = ''
    word ='a'
    sen = ''
    for alpha in s:  
      print alpha,word,sen
      if alpha >= word:   
           word = alpha
           sen += alpha
           if len(result) <len(sen):
               result = sen
      if alpha < word:
         word = alpha
         sen = alpha 
    print('Longest substring in alphabetical order is: '+ result)
    

    注意变化:

      if alpha < word:
         word = alpha
         sen = alpha 
    

    你应该保存新序列的第一个字符

    【讨论】:

      猜你喜欢
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 2019-02-14
      • 1970-01-01
      • 2013-11-06
      • 2012-05-01
      • 2016-12-07
      相关资源
      最近更新 更多