题目:字符串分隔
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
这个题目我在处理的时候,比较笨,使用了循环,在循环里面判断截取的字符是否有8位,而且对系统给出的测试用例也没有完全通过,对于空字符串没有很好的处理。
下面这个代码是通过的,比我的思路好多了。他先判断是否需要补0,需要就补0,否则直接依次取出8个字符。
str1 = raw_input()
str2 = raw_input()
def myTrim(str):
tmp = len(str) % 8
if tmp != 0:
str += "0"* (8- tmp)
for i in range(len(str) / 8):
print str[i * 8: i * 8+ 8]
myTrim(str1)
myTrim(str2)
另外有一种思路,是分成两部分进行处理,字符串的前 8N个字符,以及后面剩余的len(str)- 8N个字符
def f(s):
a =len(s)
a1 = a/8
a2 = a%8
k=0
for i in range(a1):
print s[(8*i):8*(i+1)]
k=i+1
if a2==0:
pass
else:
print s[k*8::] + (8-a2)*'0'
while True:
try:
l1=raw_input()
l2=raw_input()
f(l1)
f(l2)
except:
break
还看到一个思路,比较有意思,这个是利用了截取8个字符的特点,先判断是否需要补0,如果需要就补7个,这个很关键,后面在输出8个字符的时候,取出前8个之后就丢掉这8个,保留8位之后的字符,通过循环依次取出。所以,最后剩1个字符的时候,正好跟7个0,如果剩7个字符,那么补1个0,剩余的6个0,不符合while条件,就退出循环了。
def fun(str):
if len(str) % 8 != 0:
str += '0000000'
while len(str) >= 8:
print str[0:8]
str = str[8:len(str)]
s = raw_input()
r = raw_input()
fun(s)
fun(r)
还有一个也很妙,利用了xrange和format格式化输出。
说起xrange的时候就一定要提range,其实xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。
for j in xrange(2):
s = raw_input()
L = len(s)
for i in xrange(0, L, 8):
print '{:0<8s}'.format(s[i:i + 8])
# 填充与对齐
# ^、<、>分别是居中、左对齐、右对齐,后面带宽度
# :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
参考资料:
https://www.nowcoder.com
http://www.cnblogs.com/wilber2013/p/4641616.html