Python 为什么输出的“应该相等”出现在两者之间?为什么会重复?

Python 为什么输出的“应该相等”出现在两者之间?为什么会重复?,python,Python,输出: def alphabet_position(text): a= range(1,27) z="" b=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] o=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R

输出:

def alphabet_position(text):
    a= range(1,27)
    z=""
    b=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    o=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    for i in text:
        if i in b:
            k=b.index(i)
            z=z+" "+ str(a[k])
        elif i in o:
            k=o.index(i)
            z=z +" "+ str(a[k])
        else:
             pass

    return(z)
输入:

' 20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11' should equal '20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11'

为什么输出的“应该相等”出现在两者之间?为什么会重复呢?

我以前的答案被删除了,因为它不是答案。当我回答时,没有问题,因此没有什么可回答的,但现在有了:

你在断言他们是否平等。python会告诉你它们是否相等,这就是为什么它说它们应该相等。不同之处在于起始空间

此外,还有一些代码改进: 1.a[k]与k+1完全相同,不需要存储范围,每次只要将k增加1,就可以查看范围。 2.使用b和o是多余的,通过降低输入的大小写,您可以得到所需的结果。 3.否则:不需要通行证。 4.模块字符串有一个包含所有小写字母的有用字符串。 5.return不是函数,请不要将其括在括号中。 6.通过使用.join,您将在数字之间添加空格,但不会在开头添加空格

感谢@wjandrea的一些改进

从字符串ascii_小写为小写 def字母表位置文字: z=[] 对于text.lower中的i: 如果我使用小写字母: z、 附录TRlowercases.indexi+1 返回,joinz 或者使用生成器而不是for循环:

从字符串ascii_小写为小写 def字母表位置文字: return.joinstrlowercases.indexi+1表示文本中的i.lower如果i表示小写
什么是考试?为什么要调用assert_equals?显然,test.assert_equals就是这样输出的。这意味着您的测试失败,因为您的字符串以空格开头,但测试表明它不能。a[k]==k+1,第二个肯定会执行得更好。有b和o是多余的,在开始时使用text=text.lower,就完成了。另外:通行证也是不需要的。嘿,我只是回滚了帖子,让你删除了所有重要的信息,我认为这是偶然的。否则我就不知道了。在任何情况下,这段代码都是不完整的,所以你需要做一个比较。如果我答对了问题,我想问题是输出字符串中第一个数字前面的空格?否则,输出是正确的。空间由z=z++stra[k]插入。快速修复/破解:返回z条。不过,我不建议将此作为解决方案,最好看一下,例如使用列表,然后使用“”。join。
test.assert_equals(alphabet_position("The sunset sets at twelve o' clock."), "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11")