我正在学校上计算机科学课程,我需要弄清楚一些考试代码,在解码RLE后在for循环中打印变量名后,我需要更改变量名。我很难解释,但我希望你能理解。
我试图在线查找它,但是找不到解决我遇到的问题的正确方法。
import re
def decode(string):
return re.sub(r'(\d+)(\D)', lambda m: int(m.group(1)) * m.group(2), string)
ch=int(input())
for x in range(0, ch):
globals()['line%s' % x]=input()
for x in range(0, ch):
print(decode(['line%s' % x]))
我要寻找的结果是逐行输入RLE之后的结果(ch
是行数),我制作的函数采用了for循环创建的变量名(所以它们的名称为{ {1}},line0
,line1
等...,直到line2
),然后继续解压缩并打印RLE,但我似乎无法使其正常工作
编辑:我可能已经使我的问题不那么明显了,我深表歉意,我想修复最后两行代码,以便将RLE解压缩并打印在一个for循环中,我不知道这是否可行,但是我只是想知道如何(如果可以)使line(ch)
起作用,所以就像变量print(decode(['line%s' % x]))
后面跟着数字一样,在变量中也会发生变化。抱歉,我很难解释。
答案 0 :(得分:5)
动态创建变量名几乎总是错误的做法。您只需要一个简单的列表值:
lines = []
for x in range(ch):
lines.append(input())
# or as a list comprehension,
# lines = [input() for x in range(ch)]
for x in lines:
print(decode(x))