【发布时间】:2014-10-08 15:51:59
【问题描述】:
这是我在 UNI 的“编程基础”课程的家庭作业的一部分。 它说:
写下一个
codes(lst,cods)函数,其中lst是ccccyyyymmgg中的一系列字符串(cccc是随机字符,yyyymmgg是日期),cods是一系列4个字符字符串。函数应该像这样工作: 如果 lst 中的 'cccc' 等于 cods 中的字符串,则包含 cccc 的元素以 ['cccc', dd, mm, yyyy] 格式打印;否则以 ['ccccyyyymmdd'] 格式打印。
例如, 如果
"AcDa20140930"是lst的元素并且"ACDA"在cods上, 然后列表lst中的元素"AcDa20140930"被替换为4个元素"ACDA", 30, 9, 2014.
我试着这样解决它:
def codes(lst, cods):
lst1=[]
for element in lst:
cccc = lst[0:3]
yyyy = lst[4:7]
mm = lst[8:9]
dd = lst[10:11]
for code in cods:
if cccc == code:
lst1 += cccc, dd, mm, yyyy
return lst1
first = ['Cara20130716', 'Tara20080601', 'PALA19961231', 'Melo19601023']
secnd = ['PALA', 'CARA', 'Tara']
print codes(first, secnd)
[CODE MODIFIED]:现在输出是 [] 。 有什么想法吗?
【问题讨论】:
-
您能否提供一个比“它不起作用” 更有意义的问题陈述?还有,那是真的给你的作业吗?好像写得不好。
-
实际上...没有输出。当我使用 python program.py 执行程序时,shell 只显示光标,直到我中断,然后:^CTraceback(最近一次调用最后一次):文件“program.py”,第 38 行,在
打印代码(首先, secnd) 文件“program.py”,第 29 行,代码 lst.remove(element) KeyboardInterrupt -----我知道;写的不是很好,但是老师是这么写的。。 -
你为什么不把
print lst扔到内部循环中看看发生了什么?另外,请注意,例如cccc = element[:4](查找“切片”)比您当前的方法要整洁得多。 -
如果你的意思是这样 pastebin.com/NAHLjduA 输出是 ['Cara20130716', 'Tara20080601', 'PALA19961231', 'Melo19601023']
-
所以它永远不会到达
print lst?如果你把那条线移到循环中的其他地方怎么办?请注意,您在迭代列表时正在修改列表,这是一个臭名昭著的糟糕想法。