为了账号安全,请及时绑定邮箱和手机立即绑定

排除 ASCII 字符

排除 ASCII 字符

慕田峪9158850 2022-06-14 09:29:31
我正在创建一个回文检查器,它可以工作,但是我需要找到一种方法来替换/删除给定输入中的标点符号。我正在尝试为 chr(i) i 在 32,47 范围内做,然后用 '' 替换那些。我需要排除的字符是 32 - 47。我尝试使用 String 模块,但我只能让它排除空格或标点符号,无论出于何种原因,它都不能同时包含。我已经尝试过字符串模块,但无法同时删除空格和标点符号。def is_palindrome_stack(string):    s = ArrayStack()    for character in string:    s.push(character)    reversed_string = ''while not s.is_empty():    reversed_string = reversed_string + s.pop()if string == reversed_string:    return Trueelse:    return Falsedef remove_punctuation(text):    return text.replace(" ",'')    exclude = set(string.punctuation)    return ''.join(ch for ch in text if ch not in exclude)
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

那是因为您从第一行的方法返回,在return text.replace(" ",''). 将其更改为text =  text.replace(" ", ""),它应该可以正常工作。


此外,缩进可能在您的帖子中搞砸了,可能是在复制粘贴期间。


完整的方法片段:


def remove_punctuation(text):

    text = text.replace(" ",'')

    exclude = set(string.punctuation)

    return ''.join(ch for ch in text if ch not in exclude)


查看完整回答
反对 回复 2022-06-14
?
森栏

TA贡献1810条经验 获得超5个赞

您可以使用str以下方法删除不需要的字符:


import string

tr = ''.maketrans('','',' '+string.punctuation)

def remove_punctuation(text):

    return text.translate(tr)

txt = 'Point.Space Question?'

output = remove_punctuation(txt)

print(output)

输出:


PointSpaceQuestion

maketrans创建替换表,它接受 3 str-s:第一个和第二个必须等长,第一个的第 n 个字符将替换为第二个的第 n 个字符,第三个str是要删除的字符。您只需要删除(而不是替换)字符,因此前两个参数是空str的。


查看完整回答
反对 回复 2022-06-14
  • 2 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信