Python 我正在尝试定义一个函数来将字符串大写,而不使用预定义的函数 def所有大写字母: x=0 lst=[] 当x=97时: 第一个附加(chr(ord(s[x])-32)) x+=1 其他: x+=1 打印(“.join(lst)) lst

Python 我正在尝试定义一个函数来将字符串大写,而不使用预定义的函数 def所有大写字母: x=0 lst=[] 当x=97时: 第一个附加(chr(ord(s[x])-32)) x+=1 其他: x+=1 打印(“.join(lst)) lst,python,Python,出于某种原因,它说字符串索引超出范围,但我不确定原因。只要将其设置为,而x如果索引从0开始,则在while循环中包含len 因此,按如下方式更改while循环: def All_uppercase(s): x=0 lst=[] while x<=len(s): if ord(str(s)[x])>=97: lst.append(chr(ord(s[x])-32)) x+=1 els

出于某种原因,它说字符串索引超出范围,但我不确定原因。

只要将其设置为
,而x如果索引从0开始,则在while循环中包含len
因此,按如下方式更改while循环:

def All_uppercase(s):
    x=0
    lst=[]
    while x<=len(s):
        if ord(str(s)[x])>=97:
            lst.append(chr(ord(s[x])-32))
            x+=1
        else:
            x+=1
    print("".join(lst))
    lst

while x
while x除了其他评论者已经建议的之外,你应该避免使用像97和32这样的“神奇”数字。下面是一个更具python风格的解决方案:

while x<len(s):
def所有大写字母:
shift=ord('A')-ord('A'))

返回“”。如果函数“a”不返回任何内容,则加入(chr(ord(c)+shift)。此外,对于代码>=97的任何非字母字符,函数都会失败。
while x<=len(s):
while x<len(s):
def all_uppercase(s):
    shift = ord('A') - ord('a')
    return ''.join(chr(ord(c) + shift) if 'a' <= c <= 'z' else c
                   for c in s)
all_uppercase('Hello, world!')
#'HELLO, WORLD!'