python-3.x 使用int list追加字符串列表

u91tlkcl  于 2023-10-21  发布在  Python
关注(0)|答案(1)|浏览(119)

在这段代码中,我需要将第一个字符串“Computer”和“Networks”发送给frame_data()函数。该函数的工作是将接收到的x附加到l[]中,并将接收到的x的长度附加到l2[]中。那么sender的输出应该是这样的:9计算机9网络。在sender += l2 + l的问题,我得到了这个错误:TypeError: can only concatenate str (not "list") to str
请问如何修复代码?

def frame_data(x):
    l = []
    l2 = []
    
    l.append(x)
    FrameLen = len(x)
    l2.append(FrameLen+1)

    sender = ''
    sender += l2 + l
    print(sender)

def split_str(seq, chunk, skip_tail=False):
    lst = []
    if chunk <= len(seq):
        lst.extend([seq[:chunk]])
        lst.extend(split_str(seq[chunk:], chunk, skip_tail))
    elif not skip_tail and seq:
        lst.extend([seq])
    frame_data(lst)

seq = "ComputerNetworks"
split_str(seq, 8)

为什么这个函数在输入为
frame_data_check(“9Computer6Networks”)

4ktjp1zp

4ktjp1zp1#

你的代码太复杂了。
您可以使用一个简单的循环来拆分字符串,使用 chunk 值作为范围中的 step
看起来,skip_tail bool是用来表示一个可能小于指定长度的尾随字符串将被省略。
编辑:新增frame_check函数

def split_str(s: str, n: int, skip_tail=False) -> list[str]:
    rv = [s[i:i+n] for i in range(0, len(s), n)]
    return rv[:-1] if  skip_tail and rv and len(rv[-1]) != n else rv

def frame_data(x: list[str]) -> str:
    return ''.join([f'{len(e)+1}{e}' for e in x])

def frame_check(s: str) -> bool:
    n = -1
    i = 0
    while i < len(s):
        if s[i].isdecimal():
            k = int(s[i])
            if n < 0:
                n = k
            else:
                n = n * 10 + k
            i += 1
        else:
            if (n := n - 1) <= 0:
                return False
            i += n
            n = -1
    return n < 0

N = 8

for s in 'ComputerNetworks', 'ComputerNetwork':
    for skip in True, False:
        fd = frame_data(split_str(s, N, skip_tail=skip))
        print(f'{skip=}', f'{s=}', f'{N=}', fd)
        assert frame_check(fd)

assert frame_check('9Computer6Networks')

输出:

skip=True s='ComputerNetworks' N=8 9Computer9Networks
skip=False s='ComputerNetworks' N=8 9Computer9Networks
skip=True s='ComputerNetwork' N=8 9Computer
skip=False s='ComputerNetwork' N=8 9Computer8Network
Traceback (most recent call last):
  File "/Users/DarkKnight/Python/Oct07.py", line 41, in <module>
    assert frame_check('9Computer6Networks')
AssertionError

相关问题