我正在尝试制作一个非常简单的测试函数,首先检查用户输入是否是3的倍数,然后测试每个单独的字符以查看它们是否是有效字符。这是我的代码:
def is_dna(string):
string.upper()
if(len(string) % 3 == 0):
print("LENGTH CORRECT")
for n in string:
if(n == "A" or n == "T" or n == "C" or n == "G"):
print("Valid")
else:
print("Invalid character")
break
return True
else:
print("Too many/little characters")
return False
运行时,底部部分运行正常,如果使用了正确数量的字符,这也将成功打印调试“LENGTH CORRECT”字符串。问题是for循环不会初始化,我没有最模糊的原因。只测试循环显示它工作正常;这个功能出了什么问题?
答案 0 :(得分:2)
简单修复 你只需要将string.upper()移入变量然后对变量
进行操作已修复的代码
def is_dna(stri):
string = stri.upper()
if(len(string) % 3 == 0):
print("LENGTH CORRECT")
for n in string:
if(n == "A" or n == "T" or n == "C" or n == "G"):
print("Valid")
else:
print("Invalid character")
break
return True
else:
print("Too many/little characters")
return False
is_dna("ATCGCTATC") #this works and tests it perfectly
答案 1 :(得分:0)
string = string.upper()
函数upper()只返回字符的大写字母,字符串self不会改变。
答案 2 :(得分:0)
你不需要循环,只需使用正则表达式:
import re
def is_dna(string)
return re.match("([CAGT]{3})+", string.upper()) is not None