【问题标题】:Printing On a Single Line with A While Loop? [duplicate]使用 While 循环在单行上打印? [复制]
【发布时间】:2013-12-10 19:40:59
【问题描述】:

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

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 循环。它工作正常,但在另一个字符下打印句子的反面。有没有办法把它们放在一条线上?

【问题讨论】:

    标签: python printing while-loop python-3.3 inverse


    【解决方案1】:

    quote[::-1] 将比 while 循环更容易地反转字符串:)

    这称为扩展切片表示法。切片符号分为三个部分,"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 是一个切片(而不是从索引 -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])
    • 谢谢!!!它的工作原理!!!
    • 我太明白了!
    • @Raihaan-Tech 顺便说一句,如果您需要反转列表(或其他可迭代),Python 有一个名为 reversed() 的内置函数,它返回一个生成反向迭代的生成器。 list(reversed(iter_goes_here)) 是您传递的任何可迭代元素的逆序列表。 for v in reversed(iter_goes_here): print(v) 将循环并打印每个值等。你不能做的是print(reversed(iter_goes_here)),因为它是generator 而不是列表本身。
    【解决方案2】:

    试试这些改变:

    print("In Reverse order:")
    
    charSet = ""
    
    while reverse >= 0:
        charSet = charSet + quote[reverse] 
    
    print(charSet)
    

    【讨论】:

    • 你的代码太棒了!
    【解决方案3】:

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

    【讨论】:

    • 我尝试过使用它,但这是一个while循环,我不知道在这种情况下如何使用它。
    • 发生了什么?忘记在模块顶部放置import sys了吗?
    • 不完全是。无论如何,我不太擅长使用sys,但我似乎无法将它直接应用到 While 循环所在的位置。
    【解决方案4】:

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

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

    查看docs 了解更多信息

    【讨论】:

    • 谢谢!挺好用的!
    猜你喜欢
    • 1970-01-01
    • 2014-11-25
    • 2016-10-08
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多