如何停止按字母顺序打印的程序

Posted

技术标签:

【中文标题】如何停止按字母顺序打印的程序【英文标题】:How to stop programs printing out in alphabetical order 【发布时间】:2018-06-07 17:10:52 【问题描述】:

所以,我正在开发一个程序,将输入文本转换为 Discords region_indicator 表情符号,但问题是,如果输入诸如“cab”之类的单词,则输出将返回为“abc”。有没有办法改变程序,以便在输入单词时不按字母顺序排序。 (出于测试目的,我只编写了前 3 个字母。用 Python IDLE 3.5 编码)

import sys
sentence = input("Enter a sentence:")
sentenceLower = sentence.lower()
sentenceList = list(sentenceLower)
sentenceListLength = len(sentenceList)
while sentenceListLength > 0:
    if "a" in sentence:
        sys.stdout.write(":regional_indicator_a:")
        sentenceListLength = sentenceListLength - 1
    if "b" in sentence:
        sys.stdout.write(":regional_indicator_b:")
        sentenceListLength = sentenceListLength - 1
    if "c" in sentence:
        sys.stdout.write(":regional_indicator_c:")
        sentenceListLength = sentenceListLength - 1

简而言之,程序接收一个句子,检查该句子中是否出现字母,然后打印出要复制并粘贴到 Discord 中的文本。

【问题讨论】:

我不确定我是否理解您要执行的操作,但我认为您可能希望遍历句子中的字符,而不是查找句子中的字符。 与我能在短时间内想到的最不有效的方法相比,这是一种效率较低的方法。 【参考方案1】:

你需要遍历句子中的字符,而不是遍历字符数。

for c in sentence:
    if c == "a":
       sys.stdout.write(":regional_indicator_a:")
    elif c == "b":
        sys.stdout.write(":regional_indicator_b:")
    elif c == "c":
        sys.stdout.write(":regional_indicator_c:")

你所做的只是检查字符串中是否存在一个字符,所以它会给你乱序的字母。

【讨论】:

我喜欢您回答确切问题的方式,但没有解决多个 if 的美学和低效率问题。 +1 不过你至少切换到了elif 感谢您的帮助,这就是问题所在。完全忘记了 elif 语句,我觉得有点愚蠢 xD【参考方案2】:

一种方法是

import sys
sentence = input("Enter a sentence:")
sentenceLower = sentence.lower()
sentenceListLength = len(sentenceLower)
for i in range(sentenceListLength) :
    c = sentenceLower[i]
    if ( ("a" <= c) and (c <= "z") ) :
        sys.stdout.write(":regional_indicator_"+c+":")
    else :
        # Do your stuff
        pass

你也可以遍历字符

for c in sentenceLower :

而不是

for i in range(sentenceListLength) :
    c = sentenceLower[i]

(它通常被认为更 Pythonic)。使用整数索引有时更灵活/通用(取决于您的情况)。

【讨论】:

即使需要索引,通常也是通过枚举而不是范围来获取的。 @MadPhysicist - 这在很大程度上是一个品味问题。速度也是一个(次要)问题,参见***.com/questions/11901081/… 和***.com/questions/11990105/…,例如 似乎 enumerate 比每次调用 __getitem__ 快一点。

以上是关于如何停止按字母顺序打印的程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在Java桌面应用程序中停止无限循环以移动鼠标

怎么才能停止VS强制更新?

如何停止从 Matlab 中的独立应用程序打印出来?

电脑一打开有PDF的文件夹就出现这个问题 然后就是Windows就停止运行

我无法按字母顺序对文件中的“姓氏”进行排序:我得到中止陷阱:6

用户取消输入框后如何停止vba