所以我看了每一个字母的替换,并且无法弄清楚相反的情况。我从这开始,很快意识到它不起作用:
s = input("Enter a word or phrase: ")
l = len(s)
n = int(input("choose a number between 1 and %d: " %l))
print (s[0] + "." * (n-1)+ s[n]+ "." * (n-1) + s[n*2])
任何帮助将不胜感激。
答案 0 :(得分:1)
让s
成为原始字符串,n
不要替换该位置。
''.join (c if i == n else '.' for i, c in enumerate (s) )
答案 1 :(得分:1)
如果用户输入3
,我假设您要替换第三,第六,第九......字母,对吗?请记住,索引是从0
计算的:
>>> s = "abcdefghijklmnopqrstuvwxyz"
>>> remove = 3
>>> "".join(c if (i+1)%remove else "." for i,c in enumerate(s))
'ab.de.gh.jk.mn.pq.st.vw.yz'
或者,如果你的意思相反:
>>> "".join("." if (i+1)%remove else c for i,c in enumerate(s))
'..c..f..i..l..o..r..u..x..'
答案 2 :(得分:1)
您可以使用reduce方式:
>>> s = "abcdefghijklmnopqrstuvwxyz"
>>> n=3
>>> print reduce(lambda i,x: i+x[1] if (x[0]+1)%n else i+".", enumerate(s), "")
ab.de.gh.jk.mn.pq.st.vw.yz
>>> print reduce(lambda i,x: i+"." if (x[0]+1)%n else i+x[1], enumerate(s), "")
..c..f..i..l..o..r..u..x..
答案 3 :(得分:0)
从你已经知道的东西建立。你知道如何找到每个n
个字符,你的结果字符串将包含其中的所有字符,而原始字符串中没有其他字符,所以我们可以使用它。我们想在之间插入,这正是str.join方法所做的。您已经知道要插入的内容是'.' * n-1
。所以,你可以这样做:
>>> s = "abcdefghi"
>>> n = 3
>>> ('.' * (n-1)).join(s[::n])
'a..d..g'
唯一的诀窍是,您需要在之后考虑之后的任何字符。当s
的最高有效索引除以n
- 或(len(s) - 1) % n
时,其余数量为余数。这给出了一个稍微丑陋的结果:
>>> ('.' * (n-1)).join(s[::n]) + '.' * ((len(s) - 1) % n)
'a..d..g..'
您可能希望使用两组点的变量来帮助提高可读性:
>>> dots = '.' * (n - 1)
>>> end_dots = '.' * ((len(s) - 1) % n)
>>> dots.join(s[::n]) + end_dots
'a..d..g..'
答案 4 :(得分:0)
我棘手的解决方案(我会让你添加评论):
s = 'abcdefghijklmnopqrstuvwxyz'
n = 3
single_keep_pattern = [False] * (n - 1) + [True]
keep_pattern = single_keep_pattern * ( len(s) / n + 1)
result_list = [(letter if keep else '.') for letter, keep in zip(s, keep_pattern)]
result = ''.join(result_list)
print result
给出:
..c..f..i..l..o..r..u..x..