所以我目前正在学习循环使用字符串,使用" 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
我认为我的问题是因为这个功能。
答案 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;