Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的单元测试在结果看来失败了;“正确”;对我来说?_Python - Fatal编程技术网

Python 为什么我的单元测试在结果看来失败了;“正确”;对我来说?

Python 为什么我的单元测试在结果看来失败了;“正确”;对我来说?,python,Python,我正在努力学习python。我从这个单元测试开始: import unittest from rna_transcription import to_rna class RNATranscriptionTests(unittest.TestCase): def test_transcribes_cytosine_to_guanine(self): self.assertEqual(to_rna('C'), 'G') if __name__ == '__main__'

我正在努力学习python。我从这个单元测试开始:

import unittest

from rna_transcription import to_rna

class RNATranscriptionTests(unittest.TestCase):

    def test_transcribes_cytosine_to_guanine(self):
        self.assertEqual(to_rna('C'), 'G')
if __name__ == '__main__':
    unittest.main()
我这样写我的方法:

def to_rna(dna_strand):
    rna_strand = []

    for x in dna_strand:
        print('looking at:', x)
        if x == 'C':
            rna_strand.append('G')


    return rna_strand
当我运行单元测试时,它失败并出现以下错误:

AssertionError: ['G'] != 'G'

我不确定这里出了什么问题。我没有得到输出。在我看来,G与G相似,不同的是它的书写方式不同。我做错了什么?

['G']
'G'
不同。前者是一个
列表
,后者是一个
str
。列表永远不能等于字符串

但是,您的测试是正确的,因为它指出您的函数的行为不是预期的。如果您想让它返回一个字符串,您需要它看起来像这样

def to_rna(dna_strand):
    rna_strand = ''

    for x in dna_strand:
        print('looking at:', x)
        # if I recall my biology class correctly 
        rna_strand += 'G' if x == 'C' else x

    return rna_strand
请注意,有更有效的方法可以做到这一点,但是为了示例,我没有对代码进行太多的更新。你真的可以这么做

def to_rna(dna_strand):
    return dna_strand.replace('C', 'G')

左:
['G']
是一个包含一个元素的列表:字符串
'G'
。右:这只是字符串
'G'
再次查看Matt
['G']!='G'
我推荐Biopyton用于这个东西,顺便说一句,断言的左侧是一个单元素Python
list
,而右侧是一个字符串(
str
)。列表不能等于字符串<代码>..==['C']应该可以。顺便说一句,你的方法会返回一个列表。永远不要说永远<代码>类列表(列表):def\uuuu eq\uuuu(self,uu):返回True<代码>列表('G')=='G'好吧,从技术上讲,这不再是
\uuuuuu内置的.list
,所以仍然正确。即使有实际的黑客可以做真正改变内置类谢谢你。这就是我犯错误的明显例子。