有人可以解释这两个代码之间的区别吗?

时间:2019-09-26 01:25:48

标签: python

python的新手。试图了解字符串切片和方法。已获得以下代码,以阅读并声明它们将显示的内容。有人可以解释第二个程序如何显示逆序吗?

我一直在寻找答案,但只想出使用负数反转的切片方法,但不是这样。

程序1:

str1 = 'Wednesday Thursday Friday'

new_string = ''

index = 0

while index < len(str1):
    if str1[index].isupper():

        new_string = new_string + str1[index]          
    index = index + 1
new_string = new_string + '!?!'   
print(new_string)

程序2:

str1 = 'Wednesday Thursday Friday'

new_string = ''

index = 0

while index < len(str1):

    if str1[index].isupper():

        new_string = str1[index] + new_string

    index = index + 1
new_string = new_string + '!?!'   
print(new_string)

我了解第一个程序并得到结果WTF!?!

不明白为什么第二个程序是FTW!?!

2 个答案:

答案 0 :(得分:1)

这两个程序之间的唯一区别是,第一个有行

new_string = new_string + str1[index]          

第二个有一行

new_string = str1[index] + new_string

在第一个字符串中,使用要构建的字符串,并将找到的下一个大写字母添加到其结尾。 在第二个中,您将使用要构建的字符串,并将找到的下一个大写字母添加到其 front 中。因此,首先,new_string的值为:

'W'

'WT'

“ WTF”

在第二个字符串中,new_string的值为:

'W'

'TW'

'FTW'

因此,您最终将字符串反转了。 基本上,在第一种方法中,您只是在找到字母时添加字母,但是在第二种方法中,每次添加另一个字母时,它们会将字母移回一个位置,导致找到的第一个字母是结尾字符串中的最后一个字母,依此类推

另一方面,在Python中,通常不需要像使用两个程序一样使用while循环和索引来迭代字符串或列表。例如,线

index = 0
while index < len(str1):
    if str1[index].isupper():

可以替换为

for letter in str1:
    if letter.isupper():

稍微整洁。 我们甚至可以如下替换整个程序1:

str1 = 'Wednesday Thursday Friday'
# The below line uses 'list comprehensions'
new_string = ''.join(letter for letter in str1 if letter.isupper())
new_string = new_string + '!?!'   
print(new_string)

如果您要寻找关于这方面的更多信息,建议您通读the python tutorial! :)

答案 1 :(得分:0)

唯一的区别,如正确说明的不均匀标记,是

new_string = new_string + str1[index]

new_string = str1[index] + new_string

这仅仅是因为它们是以相反的顺序添加的,请在此行之前仔细考虑整个程序及其每个步骤,这才有意义:)