设计并编写一个可以检测称为TMscanner.py
的跨膜域的程序。这个程序应该调用你写的其他两个函数:getProteinRegion
应该返回一个十个氨基酸的窗口(最初抓取氨基酸1-10,下一次2-20,等等)TMscanner
也应该重复调用第二个函数testForTM
,该函数应计算并返回非极性的十个氨基酸的小数部分。非极性氨基酸是[A,V,L,I,P,M,F,W]
示例:
protein = 'AVLIPMFWGSTNQYDEKRH' #Only the first 9 are nonpolar
results = tmScanner(protein)
print "Results are", results
应打印出来:
Results are [.8, .7, .6, .5, .4, .3, .2, .1, 0, 0]
- #Test code
def getProteinRegion(protein, start):
#return first 10 aa in protein
return protein[start:start+10]
def testForTM(protein):
#return ratio of nonpolar aa from a sample of first 10; move them up one step and repeat
nonpolar = 0
for aa in getProteinRegion(protein, start):
if aa in ['A', 'V', 'L', 'I', 'P', 'M', 'F', 'W']:
nonpolar = nonpolar + 1.0
return nonpolar / 10.0
def tmSCANNER(protein):
#while the tested in testForTM is less than 10, append testforTM function to results; print results
results = []
start = 0
while start <= 10:
results = results.append(testForTM(protein))
return results
start = start + 1
##TESTING
#print getProteinRegion('AVLIPMFWGSTCNQYDEKRH')
#print testForTM('AVLIPMFW')
print tmSCANNER('AVLIPMFWGSTCNQYDEKRH')
-
Traceback (most recent call last):
File "TMscanner.py", line 29, in <module>
print tmSCANNER('AVLIPMFWGSTCNQYDEKRH')
File "TMscanner.py", line 21, in tmSCANNER
results = results.append(testForTM(protein))
File "TMscanner.py", line 10, in testForTM
for aa in getProteinRegion(protein, start):
NameError: global name 'start' is not defined
答案 0 :(得分:1)
您的函数testForTM
没有start
参数,也没有声明名为start
的局部变量,但却调用getProteinRegion(protein, start)
。因此,Python假设您必须使用全局 - 但您也没有具有该名称的全局。所以它提出了一个例外。
您可能想要的是添加start
作为参数:
def testForTM(protein, start):
然后,在tmSCANNER
内的调用代码中,做有一个名为start
的局部变量,这可能是您要通过的值作为start
参数:
results = results.append(testForTM(protein, start))