python编程练习3

题目:字符串分隔
•连续输入字符串,请按长度为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

你可能感兴趣的:(python编程练习3)