我正在尝试在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
而不是“我要去”。如果有人能给我一些修改代码以获得适当结果的指示,我将非常感激。感谢
答案 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_UPPERCASE
或ASCII_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?")