RLE转ASCII函数多行输入报错:TypeError参数应为字符串或数字而非列表
修复RLE转换函数的多行处理错误
我来帮你排查这个问题并修复你的RLE转换函数。首先看报错信息:
TypeError: int() argument must be a string or a number, not 'list'
这说明你在尝试把一个列表转换成整数,而不是预期的字符串——咱们来拆解代码里的问题:
问题根源
变量覆盖问题:
你在第一个输入循环中用RLEData接收单行输入,但在第二个处理循环的第一次迭代时,把RLEData重新赋值成了分割后的列表。当处理第二行时,RLEData已经是列表类型,再对它做切片分割,得到的是子列表而非RLE片段字符串,自然调用int()时会报错。循环变量冲突:
外层处理循环用i作为变量,内层遍历RLE片段时又用了i,这会覆盖外层的i值,导致代码逻辑混乱(虽然不是这次报错的直接原因,但很容易引发其他问题)。
修复后的代码
def enterRLE(): print('\nYou have selected option 1: Enter RLE') lineNo = 0 # 确保用户输入大于2的行数 while lineNo <= 2: lineNo = int(input('How many lines of RLE would you like to input? Please enter a number over 2. ')) RLEList = [] # 收集所有行的RLE输入 for _ in range(lineNo): RLEData = input('\nPlease enter one line of RLE and press enter. Enter your code with two digits, for example \'07c\' or \'40a\'. ') RLEList.append(RLEData) # 逐行处理RLE数据 for current_rle in RLEList: segment_length = 3 # 分割当前行的RLE片段 rle_segments = [current_rle[i:i+segment_length] for i in range(0, len(current_rle), segment_length)] # 遍历每个片段转换为ASCII for segment in rle_segments: char_count = int(segment[0:2]) target_char = segment[2:3] print(target_char * char_count, end="") # 每行转换完成后换行,区分不同行的结果 print()
关键修改点
- 使用
current_rle从RLEList中逐个取出待处理的行,避免复用旧变量导致的类型覆盖。 - 内层循环改用
segment作为变量,彻底避免循环变量冲突问题。 - 拆分字符重复逻辑,先提取数量和字符再拼接,代码可读性更强。
- 增加行末换行,让多行转换结果更清晰。
测试这个修复后的函数:当你输入第二行01h01a02l01w01a01y时,会正确输出hallway,并继续处理后续行,不会再抛出类型错误。
内容的提问来源于stack exchange,提问作者Aashmi Sharma
相关产品推荐
相关产品推荐

