我正在尝试编写一个将字符串转换为大写版本的函数。除非到达字母末尾或输入字符串末尾,否则它通常有效。

有什么想法吗?有什么建议吗?忠告?

def upper(string):

    length = len(string)
    index_string = 0
    index_ucase = 0
    index_lcase = 0
    uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    lowercase = 'abcdefghijklmnopqrstuvwxyz'

    while index_string < len(string):
        index_lcase = 0
        while index_lcase < len(lowercase):
            if string[index_string] == lowercase[index_lcase]:
               string = string[:index_string] + uppercase[index_lcase] + string[index_string+1:]
               break
            else:
                index_lcase += 1
        index_string += 1

最佳答案

有什么想法吗?有什么建议吗?忠告?


不要这样

真。

别。

除非你在玩。别。不要这样

为什么?

语言很难。

i的大写字母是I,对吗?

您始终可以使用大写字母->小写字母->大写字母,并且输出与输入相同。对?

不。不。不,不。

因此,首先,您的方法仅覆盖ASCII字母。你知道吗?德语有ää直接。大写字母äÄ,小写字母Ää(如果您想知道:听起来像是英语中的a悲伤)。

另外,德语为ßß是小写字母。听起来很像s。瑞士虽然部分说德语,但没有ß;他们只是使用ss。因此,在德语中,ß仅出现在单词的中间或结尾。这意味着不需要大写版本。而且,由于德国的效率,它根本没有大写版本。

您想在商店入口处写糖果商店吗?在正常的大写形式中,它是Süßwarengeschäft(Sweet-Ware-Store)。如果您将其音译为ALL CAPS,那么正确的做法是将其命名为SÜSSWARENGESCHÄFT。请注意,将小写字母ß替换为大写字母SS。 BAM。无路可返。您的单词只再增加一个字母,除非您知道德语拼写法(并确保店主不是瑞士人),否则无法知道如果您想将内容翻译回小写字母,则需要使用ß代替ss

也就是说,除非您使用可以提供更多信息的东西。

Unicode可以为您提供更多信息。希腊的Omega 可能只是一个长长的“ O”声音,或者它可能是电阻的单位,欧姆:Ω。不同的含义(尽管可能看起来相同),对于Unicode而言,具有不同的代码点非常常见。如果您使用Unicode编码的Omega大字母并在其上使用pythons lower(),它应该正确地为您提供。如果您使用u"The resistance of this resistor is 5Ω"并在其上使用lower,则不是很多:u"the resistance of this resistor is 5Ω"

因此:不要使用简单的字母翻译。它从来没有奏效,也永远不会奏效。

07-24 09:38
查看更多