删除字符串中的字母不在函数中工作

时间:2017-07-10 00:22:02

标签: python string function loops for-loop

所以我目前正在学习循环使用字符串,使用" for"。

我正在尝试制作一个审查功能(sansur),它会将所有单词转换为" *" s。

word = "Programming is fun!"


def sansur(hmm):
    for harf in hmm:
        if harf == "m":
            harf = "*"



deneme = sansur(word)
print deneme

如果我这样做,它只会打印" none",但是如果我手动执行而没有这样的功能,它就可以工作。

for harf in word:
    if harf == "m":
        harf = "*"

    print harf    

我认为我的问题是因为这个功能。

5 个答案:

答案 0 :(得分:1)

试试这个:

def sansur(hmm):
    return hmm.replace('m','*')

答案 1 :(得分:1)

字符串在Python中是不可变的。这意味着你无法改变它,但你必须创建一个新的!

所以,你必须像这样重写它:

def process(msg):
    result = ""
    for ch in msg:
        if ch == "m":
            result += "*"
        else:
            result += ch
    return result

效率低下,但接近你原来的。测试它:

>>> process("Programming is fun!")
'Progra**ing is fun!'

然而,当你希望" map"序列中的每个元素都是新的元素,就像我们上面所做的那样,您可以使用map

>>> word = "Programming is fun!"
>>> "".join(map(lambda c: "*" if c == "m" else c, word))
'Progra**ing is fun!'

或者,在函数中:

def process(msg):
    return "".join(map(lambda c: "*" if c == "m" else c, msg))

但是,对于像这样的简单字符翻译,使用str.replace()要好得多:

>>> word.replace("m", "*")
'Progra**ing is fun!'

答案 2 :(得分:0)

更符合原始代码:

int minute = now.getMinute();
int hour = now.getHour();
int day = now.getDayOfMonth();
int month = now.getMonthValue();
int year = now.getYear();
int era = now.toLocalDate().getEra().getValue();

基本上,字符串是不可变的,所以你不会改变任何东西。相反,我只是根据您的测试将相应的字符附加到新列表,然后将该列表转换回字符串并将其返回。

答案 3 :(得分:0)

你的程序中的主要问题是你没有从该函数返回任何东西。没有return语句的函数的返回值为None

即使你纠正了它,它也行不通。现在的问题是你要替换for变量,而不是字符串上的实际位置。执行for harf in hmm:时,harf将成为字符串上每个字符的副本。然后,您将替换该副本,该副本在下一次迭代时会丢失。

您可以更改实施,将print电话放在if之后:

def sansur(hmm):
    for harf in hmm:
        if harf == "m":
            harf = "*"
        print harf

但是,当您正在研究字符串的循环时,您可能想要的是聚合返回变量中的字符,然后将其返回。

这是重新实现:

#!/usr/bin/env python

word = "Programming is fun!"

def sansur(hmm):
    ret = ""
    for harf in hmm:
        if harf == "m":
            ret += "*"
        else:
            ret += harf
    return ret

deneme = sansur(word)
print deneme

打印

编程很有趣!

答案 4 :(得分:0)

执行此操作的最佳方法是使用str.replace,如下所示:

word='Programming is fun!'
print sansur(word)

此外,它打印'无'你的功能是因为函数没有返回任何东西。当你说

{{1}}

您正在打印sansur(word)的,并且函数的值是它返回的值。由于你的函数什么都没有返回,它没有任何价值;它会打印出“无”#39;