在python中将所有字母更改为大写

时间:2014-02-16 07:21:52

标签: python

我正在尝试在python中创建一个函数,将字符串的所有字符更改为大写(尝试从头开始创建python upper函数)。我还使用find_chr()函数来获取原始字符串的字符索引。代码是:

def main():
    ASCII_LOWERCASE="abcdefghijklmnopqrstuvwxyz"
    ASCII_UPPERCASE="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    ASCII_ALL=ASCII_LOWERCASE+ASCII_UPPERCASE

    print(upper('i am going'))

def find_chr(s,char):
    i=0
    for ch in s:
        if ch==char:
            return (i)
            break        
        i+=1
    return -1
def upper(s):

    ASCII_LOWERCASE="abcdefghijklmnopqrstuvwxyz"
    ASCII_UPPERCASE="ABCDEFGHIJKLMNOPQRSTUVWXYZ"


    result=""
    for ch in s:
        if ch in ASCII_UPPERCASE:
            result+=ch
        elif ch in ASCII_LOWERCASE:
            index=find_chr(ASCII_LOWERCASE,ch)
            new=ASCII_UPPERCASE[index]
            result+=new
    return result




main()

我的问题是输出是

IAMGOING

而不是“我要去”。如果有人能给我一些修改代码以获得适当结果的指示,我将非常感激。感谢

5 个答案:

答案 0 :(得分:2)

此处缺少第三种可能性:

if ch in ASCII_UPPERCASE:
    result+=ch
elif ch in ASCII_LOWERCASE:
    index=find_chr(ASCII_LOWERCASE,ch)
    new=ASCII_UPPERCASE[index]
    result+=new

你需要:

else:
    result += ch

如果它不是大写或小写(如你的空间),则不会添加

答案 1 :(得分:0)

我认为您只需要添加其他内容:

for ch in s:
    if ch in ASCII_UPPERCASE:
        result+=ch
    elif ch in ASCII_LOWERCASE:
        index=find_chr(ASCII_LOWERCASE,ch)
        new=ASCII_UPPERCASE[index]
        result+=new
    else:
        result+=ch

编辑纠正我对问题的误读!

答案 2 :(得分:0)

全部用于内置功能!不确定是否有理由不能使用它,但python已经具备此功能:

>>> 'test'.upper()
'TEST'

答案 3 :(得分:0)

首先,有一个内置函数可以更简单,更可靠的方式执行此操作:

print('i am going'.upper())

但是,您编码的原因是删除空格:

if ch in ASCII_UPPERCASE:
    result+=ch
elif ch in ASCII_LOWERCASE:
    index=find_chr(ASCII_LOWERCASE,ch)
    new=ASCII_UPPERCASE[index]
    result+=new

如果ch是空格,则它不在ASCII_UPPERCASEASCII_LOWERCASE中,因此永远不会附加到result

你可以在最后附加一个else:语句,或者像这样简化语句:

if ch in ASCII_LOWERCASE:
    index=find_chr(ASCII_LOWERCASE,ch)
    new=ASCII_UPPERCASE[index]
    result+=new
else:
    # Either already uppercase, or not a known lower-case character
    result += ch

答案 4 :(得分:-1)

这是使用ord()&的upper()实现。 chr()函数

# ASCII codes for a-z: 97 to 122
# ASCII codes for A-Z: 65-90

def upper(s):
    new_s = ""
    for c in s:
        if 97 <= ord(c) <= 122:
            new_s += chr(ord(c) - 32)
        else:
            new_s += c

    return new_s

print upper("What's going on?")