本问题已经有最佳答案,请猛点这里访问。
有一段时间我一直在努力克服一个问题。首先,我的代码是:
quote = input("Enter a Sentence:")
a = len(quote)
counter = 0
counter1 = 0
reverse = len(quote)-1
print("The Length of the sentence is",a,"characters long!")
for x in range(0,a):
if str.isspace(quote[x]) == True:
counter = counter + 1
print("The Length of the sentence is",a - counter,"characters long (excluding space...)!")
for x in range(0,a):
if str.isupper(quote[x]) == True:
counter1 = counter1 + 1
print("The number of Upper Case Characters in the sentence is",counter1,"characters!")
print("The number of Lower Case Characters in the sentence is",a-counter1,"characters long!")
print("The Upper Case Version:")
print(str.upper(quote[0:a]))
print("The Lower Case Version:")
print(str.lower(quote[0:a]))
print("In Reverse order:")
while reverse >= 0:
print(quote[reverse])
reverse = reverse - 1
这个程序的设计目的是找出一个特定句子的所有内容。但如果你看看底部的While循环。它可以很好地工作,但是打印句子的倒数,一个字符接一个字符。有没有办法把所有的事情都放在一条线上?
quote[::-1]将比while loop()更容易反转字符串。
这被称为扩展切片表示法。切片符号有三个部分,"String"[start_index:end_index:step]。
>>>"abcdefg"[0:2]
'ab'
>>>"abcdefg"[2:3]
'c'
>>>"abcdefg"[::2]
'aceg'
记住索引出现在字母之前,所以:
a b c d e f g
0 1 2 3 4 5 6 7
如果你切了[0:2],你会得到:
|a b|c d e f g
0 1 2 3 4 5 6
如果你切了[2:3],你会得到:
a b|c|d e f g
0 1 2 3 4 5 6 7
切片符号的最后一位是每个索引要执行多少步。在我的测试用例中,我使用了"2",这意味着它只每隔一个数字抛出一个索引:
a b c d e f g
0 1 2 3
我用负片作为问题的答案,它是向后的,而不是向前的,从最后开始而不是从开始。您需要前两个冒号来显示python您的意思是一个切片(而不是从index-1开始,这将引发indexerror)。
a b c d e f g
7 6 5 4 3 2 1 0
所以它像这样放置索引,并从零开始计数,直到索引结束(字符串的开始)。
明白了吗?
如何在我的程序中使用它?
@raihaan tech-完全删除while循环,只需执行以下操作:print("In Reverse order:", quote[::-1])
谢谢您!!!!它起作用了!!!!
我太明白了!
@作为一个旁白,如果需要反转一个列表(或其他iterable),python有一个名为reversed()的内置函数,它返回一个生成反转迭代的生成器。list(reversed(iter_goes_here))是一个颠倒顺序的元素列表,不管您传递的是什么,它都是可以传递的。for v in reversed(iter_goes_here): print(v)将循环并打印每个值等。您不能做的是print(reversed(iter_goes_here)),因为它是一个生成器而不是列表本身。
如果不希望print附加新行,请指定一个空的end,如下所示:
print("A partial line", end='')
print("... continued!")
查看文档以了解更多信息
谢谢!这很有用!
你可以使用sys.stdout.write(quote[reverse])。
我尝试过使用它,但这是一个while循环,我不知道如何在这种情况下使用它。
发生了什么事?你忘了把import sys放在模块的顶部吗?
不完全是这样。不管怎样,我不太擅长使用sys,但我似乎无法将它直接应用到while循环所在的位置。
尝试这些更改:
print("In Reverse order:")
charSet =""
while reverse >= 0:
charSet = charSet + quote[reverse]
print(charSet)
你的代码太棒了!