2014-02-12 70 views
0

我有一个程序需要一个字符串输入和一个整数输入。 整数决定了2件事情,打印字符串的次数以及字符串中的哪个字符是可见的,否则用“。”代替。Python:根据输入替换字符串中的字符

例如 - 字符串:你好世界 整数:3

应显示为:

H..l..W..l. 
.e..o..o..d 
..l.. ..r.. 

基本上打印对角线文本。

我该如何解决字符串中显示的每个第三个字符,否则用“。”替换?无论输入的字符串是什么,都从第一个开始。

我只需要这个函数,我得到了其余的代码。

到目前为止的代码来是这样的(不紧凑):

stringVar = input("String: ") 
countVar = input("Count: ") 

countInt = int(countVar) 
stringInt = len(stringVar) 

if countInt > stringInt: 
    print("Number should be between 1 and the lenght of the string!") 
    exit() 

if countInt < 1: 
    print("Number should be between 1 and the lenght of the string!") 
    exit() 

count = 1   

while count <= countInt: 
    print(stringVar) 
    count = count + 1 

我只是需要一种方法来在STRINGVAR也替换的字符。

+0

你能告诉我们你到目前为止所尝试过的吗? – aestrivex

+0

你有没有试图自己写这个?如果是这样,你能提供代码吗? – Ffisegydd

+0

刚刚添加了代码。 – Sinfamy

回答

2
>>> n = 3 
>>> message = 'Hello World' 
>>> print ('\n'.join([''.join(['.' if (j-i) % n else c for j, c in enumerate('hello world')]) for i in range(n)])) 
h..l..w..l. 
.e..o..o..d 
..l.. ..r.. 

魔术发生在(j-i) % n。如果不能被n整除,则模量为正数。除了有两个列表解析,外对每一行,内为每个字符

2
s = 'Hello World!!!' 
n = 3 
rep = '.' 

for j in range(n): 
    print(''.join([v if (i - j)%n == 0 else rep for i, v in enumerate(s)])) 

# H..l..W..l..!. 
# .e..o..o..d..! 
# ..l.. ..r..!.. 

代码迭代所需的行数(0,1,2n=3)。 ''.join(...)方法检查是否(i - j)%n == 0决定何时打印该字母,否则打印rep字符串。