即使我将字符串方法传递给参数python,它也不起作用

Posted

技术标签:

【中文标题】即使我将字符串方法传递给参数python,它也不起作用【英文标题】:string method doesn't work even if I pass it to a parameter python 【发布时间】:2021-12-25 23:31:41 【问题描述】:

您好,我是一名 C# 程序员,但我认为学习 python 也很好,所以我正在学习 python 我有这段代码

def disemvowel(string_):
    for n in string_:
        if(n is 'a' or 'e' or 'u' or 'o' or 'i'):
            string_ = string_.replace('n' , '')
    return string_
print(disemvowel('Hello'))

我声明了一个从字符串中删除元音的函数我搜索了它的问题但我找不到任何东西我什至将替换函数的返回值传递给字符串然后传递它我的代码问题是什么? 谢谢你的回答

【问题讨论】:

【参考方案1】:

is 用于比较 ID。在您的情况下,n 和“a”没有必要具有相同的内存位置。您可以将其更改为== 以比较值。如果 n 的值为“a”,则 n=="a" 应返回 True。当两者的位置相同时,is 将返回 True。即使值正确,它也会返回False。或者您也可以使用in。如果变量存在于字符串或可迭代数据类型中,in 将返回 True。你的代码是:

    使用==:
def disemvowel(string_):
    for n in string_:
        if n.lower()=="a" or n.lower()=="e" or n.lower()=="i" or n.lower()=="o" or n.lower()=="u":
            string_ = string_.replace(n,'')
    return string_
print(disemvowel('Hello'))
    使用in
def disemvowel(string_):
    for n in string_:
        if n.lower() in ["a","e","i","o","u"]:
            string_ = string_.replace(n,'')
    return string_
print(disemvowel('Hello'))

【讨论】:

【参考方案2】:

试试这个:

def disemvowel(string_):
    res = ''
    for n in string_:
        if n not in ['a' , 'e',  'u' ,'o' , 'i']:
            res += n
    return res
print(disemvowel('Hello'))

【讨论】:

【参考方案3】:
def disemvowel(string_):
    for n in string_:
        if n in 'aeiouAEIOU':
            string_ = string_.replace(n, '')
    return string_

print(disemvowel('Hello')) 


Output: 'Hll'

如果你写if n in 'aeiouAEIOU',你不必使用所有的或运算符。

【讨论】:

非常感谢,但为什么我的代码不起作用? 这是因为你的 if 语句。你的版本应该是这样的 --> 如果 n == 'a' or n == 'e' or n == 'i' or n == 'o' or n == 'u': ...跨度>

以上是关于即使我将字符串方法传递给参数python,它也不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使我写得正确,argparse 也不起作用并发送无效选项错误消息?

SWIG:将 Python 字符串传递给 void 指针类型的参数

如何为子进程选择一个空闲端口?

为啥从 jquery 传递给控制器​​方法的参数即使不是 null 也是 null?

传递方法作为参数[重复]

Python将列表作为参数传递