《python语言程序设计》2018版–第8章12题(生物信息:找出基因)输入基因组,识别基因组和非基因组,(之字符串的识别)
识别有效基因组和非基因组
一、识别1.1封装分割函数silcStr(strN):1.2、识别开头ATG的字符串并去掉ATG:1.3、突然发现的问题1.4、流程分析
二、分割字符串后的保存问题三、知识点的运用3.1 运用in 和 not in运算符3.2 运用比较字符串3.3 其实运算符对,但是位置错了。分析一下in 前后都应该放什么
四、知识点

| 读者类型 | 核心内容 |
|---|---|
| 《Python 语言程序设计》2018版学习者 | 字符串的识别、判断 |
| 一直困扰作者的问题 | 如何提取结果,并将结果赋值或者使用,不论是字符串还是数字 |
| 带入第8章内容学习 | 我们用in和not in运算符还是用比较字符串 |
一、识别
1.1封装分割函数silcStr(strN):
textInput = "TTATGTTTTAAGGATGGGGCGTTAGTT" #字符串
def silcStr(strN):
conNum = 0 #设计计数器
for i in range(len(strN)+1):
conNum += 1 # 累计增加1个数
if i <25:
print(strN[i:i+3]) #打印分割好的字符串
silcStr(textInput)
1.2、识别开头ATG的字符串并去掉ATG:
我们现在识别atg
发现atg进行换行或者从ATG出现后开始进行基因识别
当发现TAG、TAA、TGA后将这三种字符串前截出
1.3、突然发现的问题
我突然发现了一个问题,我是需要截取ATG之后的字符串。那么我现在有的函数是遍历这个字符,按3个一组进行了分组。那么如果让这个分组拥有截取的功能,或者说辅助截取功能呢??如何将遍历循环变成发现字符串进行截取呢??
textInput = "TTATGTTTTAAGGATGGGGCGTTAGTT" # 字符串
# 输入函数
def inText(s1):
print("Enter a genome string: ") # 打印标题伪装成是输入的
input(s1) # 直接转到input打印出字符串
# 利用切片函数分割字符串
def silcStr(strN):
conNum = 0 # 设计计数器
for i in range(len(strN) + 1):
conNum += 1 # 累计增加1个数
if i < 25:
print(strN[i : i + 3]) # 打印分割好的字符串
# 建立一个函数来寻找ATG是否存在字符串内
def identiyTheGenome(idGenome):
if idGenome == "ATG": #布尔值
print('Find ATG')
# 执行段
def main():
silcNum = silcStr(textInput)
identiyTheGenome(silcNum)
main()
结果

不成功并不是我设想的差哪里了呢?
1.4、流程分析
代码不理想==代码不完整。
我觉得我应该补全no的状态
textInput = "TTATGTTTTAAGGATGGGGCGTTAGTT" # 字符串
# 输入函数
def inText(s1):
print("Enter a genome string: ") # 打印标题伪装成是输入的
input(s1) # 直接转到input打印出字符串
# 利用切片函数分割字符串
def silcStr(strN):
conNum = 0 # 设计计数器
for i in range(len(strN) + 1):
conNum += 1 # 累计增加1个数
if i < 25:
print(strN[i : i + 3]) # 打印分割好的字符串
# 建立一个函数来寻找ATG是否存在字符串内
def identiyTheGenome(idGenome):
if idGenome == "ATG": #布尔值
print('ATG存在该字符串内,该字符串有一定概率存在基因组')
else:
print('ATG不在本字符串内')
# 执行段
def main():
silcNum = silcStr(textInput)
identiyTheGenome(silcNum)
main()

二、分割字符串后的保存问题
*这是我现在最难也是最想办到的
1.分析一下
我是先把字符串变量textInput发给分解字符串的函数silcStr。然后再把分解后的字符串给识别ATG是否存在的函数identiyTheGenome,那么现在有个问题。我是不是可以直接将字符串变量textInput,发给函数identiyTheGenome直接判断呢???
2.分析错误
我感觉identiyTheGenome函数里判断条件写错了
def identiyTheGenome(idGenome):
if idGenome == "ATG": #布尔值
print('ATG存在该字符串内,该字符串有一定概率存在基因组')
else:
print('ATG不在本字符串内')
这个不应该是条件,根据第8章所讲解,我们应该用
if idGenome == "ATG"或者
in,而我的方法是把他们看出了一个单独的字符串。
not in
三、知识点的运用
《python语言程序设计》(2018版)第8章参见第201页和第202页中,8.2.6 in和 not in 以及 8.2.7 比较字符串两个章节中都有对比的办法。我们分别尝试一下将函数identiyTheGenome内的条件进行修改
3.1 运用in 和 not in运算符
def identiyTheGenome(idGenome):
if idGenome in "ATG" is True: #布尔值
print('ATG存在该字符串内,该字符串有一定概率存在基因组')
else:
print('ATG不在本字符串内')
288:SyntaxWarning:"is" with 'str' literal. Did you mean "=="?
语法警告:将 “is” 与字符串字面量一起使用。您是不是想说 “==”
3.2 运用比较字符串
def identiyTheGenome(idGenome):
if idGenome == "ATG": #布尔值
print('ATG存在该字符串内,该字符串有一定概率存在基因组')
else:
print('ATG不在本字符串内')

3.3 其实运算符对,但是位置错了。
有个错误,如果这个字符串在ATG里则打印,但是我们要的是如果ATG在字符串里,是不是表述的位置就换了
if idGenome in "ATG" is True: #布尔值
分析一下in 前后都应该放什么
in和not in是测试一个字符串(本题是“ATG”)是否在另一个字符串(本题是idGenome)中。因防反了所以出现了错误提示,经过调整后恢复正常
textInput = "TTATGTTTTAAGGATGGGGCGTTAGTT" # 字符串
def identiyTheGenome(idGenome):
if "ATG" in idGenome: #将ATG放在前面
print('ATG存在该字符串内,该字符串有一定概率存在基因组')
else:
print('ATG不在本字符串内')
def main():
identiyTheGenome(textInput)
main()

四、知识点
教材第 8 章核心知识点(P201-202):
运算符的语法:子字符串
in 父字符串(判断子字符串是否包含在父字符串中);
in
错误写法:(意为 “判断整个输入字符串是否是 ATG 的子串”,显然不成立);
idGenome in "ATG"
正确写法:(意为 “判断 ATG 是否是输入字符串的子串”,符合需求);
"ATG" in idGenome
无需加本身返回布尔值,直接作为判断条件即可,加
is True:if "ATG" in idGenome 多余且易报错。
is True


