我正在尝试编写一个将字符串转换为大写版本的函数。除非到达字母末尾或输入字符串末尾,否则它通常有效。
有什么想法吗?有什么建议吗?忠告?
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Ω"
。
因此:不要使用简单的字母翻译。它从来没有奏效,也永远不会奏效。