关于python:用while循环在一行上打印?

Printing On a Single Line with A While Loop?

本问题已经有最佳答案,请猛点这里访问。

有一段时间我一直在努力克服一个问题。首先,我的代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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]

1
2
3
4
5
6
>>>"abcdefg"[0:2]
'ab'
>>>"abcdefg"[2:3]
'c'
>>>"abcdefg"[::2]
'aceg'

记住索引出现在字母之前,所以:

1
2
 a b c d e f g
0 1 2 3 4 5 6 7

如果你切了[0:2],你会得到:

1
2
|a b|c d e f g
0 1 2 3 4 5 6

如果你切了[2:3],你会得到:

1
2
 a b|c|d e f g
0 1 2 3 4 5 6 7

切片符号的最后一位是每个索引要执行多少步。在我的测试用例中,我使用了"2",这意味着它只每隔一个数字抛出一个索引:

1
2
 a b c d e f g
0   1   2   3

我用负片作为问题的答案,它是向后的,而不是向前的,从最后开始而不是从开始。您需要前两个冒号来显示python您的意思是一个切片(而不是从index-1开始,这将引发indexerror)。

1
2
 a b c d e f g
7 6 5 4 3 2 1 0

所以它像这样放置索引,并从零开始计数,直到索引结束(字符串的开始)。

明白了吗?


如果不希望print附加新行,请指定一个空的end,如下所示:

1
2
print("A partial line", end='')
print("... continued!")

查看文档以了解更多信息


你可以使用sys.stdout.write(quote[reverse])


尝试这些更改:

1
2
3
4
5
6
7
8
print("In Reverse order:")

charSet =""

while reverse >= 0:
    charSet = charSet + quote[reverse]

print(charSet)