从字符串中删除大写字母

时间:2019-01-20 13:29:42

标签: python

我必须从给定的字符串中删除大写字母

当我尝试从给定的字符串中删除大写字母时,返回函数存在于我编写的用于打印输出原因的函数的末尾,该结果导致要打印的最后一个字符。有没有更好的解决方法?

def remove_capitals(a):    
    for i in a:    
          if ord(i)>64 and ord(i)<91:   
               pass  
          else:  
               print(i,end='')  
     return i

print(remove_capitals("A1H5J3ETD"))

预期:153 实际:153D

3 个答案:

答案 0 :(得分:2)

您在内部打印并打印退货-您无需测试即可返回最后一个i。..这是您输入的最后一个字母。

修改:

  • 可以使用内置的功能isupper()来确定顺序,而不是检查常规数字和幻数。

  • 请勿使用pass-仅在可以的情况下才进行某些操作

  • 将所有部分收集到一个列表中,然后join()将它们放回字符串中

修复:

def remove_capitals(a):    
    non_upper = []
    for i in a:    
        if not i.isupper():  
            non_upper.append(i)

    return ''.join(non_upper)


print(remove_capitals("A1H5J3ETD"))

输出:

153

您还可以附加到字符串-但是字符串是不可变的,因此它会破坏旧的字符串并创建新的更长的版本-这很浪费:

def remove_capitals(a):    
    non_upper = "" 
    for i in a:    
        if not i.isupper():  
            non_upper += i

    return non_upper

唯一的好处是,它不使用列表-速度较慢且占用大量内存。

答案 1 :(得分:0)

使用列表理解

def remove_capitals(a):
    return ''.join([x for x in a if ord(x)<64 or ord(x)>91]))

答案 2 :(得分:0)

由于函数末尾的return i语句,返回了最后一个不需要的字符。如果您只想打印出非大写字母,则返回Return None并仅调用该函数(不执行print(remove_capitals(“ A1H5J3ETD”))):remove_capitals(“ A1H5J3ETD”)应该可以解决问题。