TEM 4 = Test for English Major:)

呵呵
好的,这里有一些需要改进的地方: 1. 在 `complement` 函数中,循环应该是 `for n in range(1, len(tem)+1):`,而不是 `for n in (1, len(tem)+1):`,否则循环只会执行一次。 2. 在 `complement` 函数中,应该使用 `if-elif-else` 的结构,而不是多个 `if` 语句,因为每个序列只会匹配到一个条件,多个 `if` 语句会逐一判断每个条件,浪费时间和计算资源。 3. 在 `complement` 函数中,应该使用一个空字符串变量 `compl_seq` 来存储反向互补序列,然后在循环内部逐步将转换后的字符添加到该变量中,最后返回该变量。否则,每次执行 `return` 语句时,函数会直接结束,导致只有反向互补序列的第一个字符被转换。 下面是修改后的代码: ``` f = open("D:/QLNU/writing/homework/BI/20230531/test.fasta", "r") fs = open("D:/QLNU/writing/homework/BI/20230531/test_expansion.fasta", "w") i = 1 name = [] def complement(tem): compl_seq = "" for n in range(1, len(tem)+1): if tem[n-1] == "A": compl_seq += "T" elif tem[n-1] == "C": compl_seq += "G" elif tem[n-1] == "G": compl_seq += "C" else: compl_seq += "A" return compl_seq[::-1] for line in f: if i % 2 == 0: fs.write(line) fs.write(name[-1].strip() + "_reverse\n") fs.write(line[::-1]) fs.write(name[-1].strip() + "_reverse-complement\n") fs.write(complement(line)) else: name.append(line) i += 1 f.close() fs.close() ``` 修改后的代码中,我还做了一些其他的改进: 1. 在输出文件中,序列名称后面添加了一个换行符,以符合 fasta 文件的格式。 2. 在读取序列名称时,使用 `name[-1].strip()` 来去除序列名称中的空格和换行符,以避免在输出文件中出现额外的空格和换行符。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值