功能st [i]> st [i + 1] .. IndexError:字符串索引超出范围

时间:2017-11-10 02:31:53

标签: python

定义一个函数max_even_digs(..),它接收一个包含数字,字母或特殊符号的字符串作为输入。该函数应返回一个整数,其中包含字符串中所有偶数位的最大值。如果字符串中没有偶数,则该函数应返回-1。

def max_even_digs(st): 
    digits = "1234567890" 
    print(len(st)) 
    for i in range(len(st)): 
        if (i % 2 == 0) and st[i] in digits: 
            if st[i] > st[i+1]: 
                solution = st[i] 
        else: 
            solution = st[i+1] 
    return solution

例如,以下代码段片段:

print (max_even_digs("a1b8c9!$4"))

应该产生输出:8

3 个答案:

答案 0 :(得分:0)

因为您要将st[i]st[i+1]进行比较,所以您必须只迭代字符串中的第二项到最后一项:

然而,

在目前的情况下,你的逻辑也是有缺陷的。您要返回的下一个数字可能不是正确的解决方案:

这是一种方法:

def max_even_digs(st): 
    max_even = 0
    for elt in st:
        if elt.isdigit() and int(elt) % 2 == 0:
            if int(elt) > max_even:
                max_even = int(elt)
    return max_even

或者,如果你更喜欢简洁,那就是这个:

def max_even_digs(st): 
    return max(int(elt) for elt in st if elt.isdigit() and int(elt) % 2 == 0)

答案 1 :(得分:0)

实际上,整数的ASC-II代码在48到57之间。

  

CHR(48)
  '0'
  ORD( '9')
  57

因此,可以搜索字符串的ASC-II,说

def max_even_digs(astr):    
    result = -1
    for c in astr:
        if 48 <= ord(c) < 57 and ord(c) % 2 == 0:  # or ord(c) in [48,50,52,54,56]
            if int(c) > result:
                result = int(c)
    return result

答案 2 :(得分:0)

您可以使用以下作为替代解决方案:

<div id="center-text">
  <ul class="nav navbar-nav navbar-center" id="nav-center">
    <li>
      <h3>Text</h3>
    </li>
   </ul>
</div>