核心知识:不能用s[i] = 'a',要用s=s.replace(s[i],'a'),替换多种可以多层嵌套
拿到一串数字:01101011011011110110010101101011011010100011001101110011
觉得像摩斯密码,于是编写如下脚本:
lines = '01101011011011110110010101101011011010100011001101110011'
print(lines.replace('0','.').replace('1','-'))
#replace(A,B,n)表示把A替换成B,从左到右最多n次,n不写就是所有
得到:.--.-.--.--.----.--..-.-.--.-.--.--.-.-...--..--.---..--
后记:解码不出来,原来这题并不是用摩斯解,正解是每8位二进制转ASC码
真题:字符串hacking_for_fun,把其中的 i 和 r 改成 1 输出出来。
line = 'hacking_for_fun'
# 这种做法有问题,发现r时会替换掉上一个line_new,输出hacking_fo1_fun
for i in range(len(line)):
if(line[i]=='i' or line[i]=='r'):
line_new = line.replace(line[i],'1')
print(line_new)
# 最笨的办法,用两个for循环规避覆盖
for i in range(len(line)):
if(line[i]=='i'):
line_new = line.replace(line[i],'1')
for i in range(len(line)):
if(line_new[i]=='r'):
line_new = line_new.replace(line_new[i],'1')
print(line_new)
# 其实放在一个for循环里就行,拆成两个if
for i in range(len(line)):
if(line[i]=='i'):
line_new = line.replace(line[i],'1')
if(line[i]=='r'):
line_new = line_new.replace(line_new[i],'1')
print(line_new)
# 更适合的解法,另立一个空line_new逐位+
line_new = ''
for i in range(len(line)):
if(line[i]=='i' or line[i]=='r'):
line_new = line_new + '1'
else:
line_new = line_new + line[i]
print(line_new)
# 最快的解法,其实replace根本不用你去for循环
line_new = line.replace('i','1').replace('r','1')
print(line_new)