Python挑战练习-进阶练习44
编写一个程序,将给定单词的每个字母替换为字母表中的下一个字符。
-
定义函数
shift_char()
,接受一个参数word
。 -
在函数内,将单词的每个字母替换为字母表中的下一个字母。
-
最后,返回转换后的单词。
示例输入
moon
示例输出
nppo
-
输入的单词保证不含字母
z
或Z
。
如何获取字母表中下一个字母(可以通过获取字符的 ASCII 码值,然后将其加1来实现)
def shift_char(word):
# 此处编写你的代码
result=''
for ch in word:
result+=chr(ord(ch)+1)
return result
# 获取单词
word = input()
# 调用函数
print(shift_char(word))
写在后面:这道题主要就在于如何获取字母表中下一个字母。那么为什么题目中出现了“
输入的单词保证不含字母z
或Z”
,下面就来说明这个问题。字母表中最后一个小写字母 'z'
的 ASCII 码值是 122,如果当前字符是 'z'
,加 1 后就超出了小写字母的 ASCII 码范围了。结合豆包,给出一个考虑判断输入字母是大写还是小写,输入字母如果为 "z" 或者 "Z" 的代码
def shift_char(word):
result = ""
for char in word:
if char.isalpha():
if char.islower():
shifted_char = chr(ord(char) + 1) if ord(char) < 122 else 'a'
else:
shifted_char = chr(ord(char) + 1) if ord(char) < 90 else 'A'
result += shifted_char
else:
result += char
return result
解释:最后要输出一个新的字符串,那么首先一定要进行初始化。首先,初始化一个空字符串 result
,用于存储最终转换后的单词。然后通过 for char in word:
循环遍历输入单词 word
中的每一个字符。在循环中,使用 if char.isalpha():
判断当前字符是否是字母(通过字符串的 isalpha
方法,该方法会返回一个布尔值,用于表明字符是否属于字母范畴),如果是字母,再进一步区分是小写字母还是大写字母进行不同的处理。
-
小写字母处理:对于小写字母,使用
if char.islower():
来判断。要将小写字母替换为字母表中的下一个字符,可以通过获取字符的 ASCII 码值,然后将其加 1 来实现。在 Python 中,ord()
函数用于获取字符的 ASCII 码值,例如ord('a')
的值是 97,ord('b')
的值是 98 等。通过chr(ord(char) + 1)
先获取当前小写字母的 ASCII 码值并加 1,再使用chr()
函数将新的 ASCII 码值转换回字符,就得到了字母表中下一个字符。
但是需要注意的是,字母表中最后一个小写字母 'z'
的 ASCII 码值是 122,如果当前字符是 'z'
,加 1 后就超出了小写字母的 ASCII 码范围了,此时需要将其循环回到 'a'
,通过 shifted_char = chr(ord(char) + 1) if ord(char) < 122 else 'a'
这个条件表达式来实现,如果当前小写字母的 ASCII 码值小于 122,就正常进行加 1 转换;如果等于 122(即当前字符是 'z'
),就将转换后的字符设置为 'a'
。
-
大写字母处理:对于大写字母(通过
else
分支进入,也就是当字符是字母但不是小写字母时,就是大写字母情况),处理逻辑和小写字母类似,只是大写字母'Z'
的 ASCII 码值是 90,所以通过shifted_char = chr(ord(char) + 1) if ord(char) < 90 else 'A'
来进行转换,即当大写字母的 ASCII 码值小于 90 时,正常加 1 转换为下一个大写字母;当等于 90(即当前字符是'Z'
)时,循环回到'A'
。
如果当前字符不是字母(通过最外层 if char.isalpha():
判断为 False
时),则直接将这个字符添加到 result
字符串中,保持原样不变,例如对于单词中的空格、标点符号等非字母字符都按此处理。
结果:
例如,调用 shift_char("hello")
函数,会返回 "ifmmp"
,因为每个小写字母都被替换为了字母表中的下一个小写字母;调用 shift_char("WORLD")
会返回 "XPSME"
,将每个大写字母替换为了下一个大写字母;而调用 shift_char("Hello, World!")
会返回 "Ifmmp, Xpsme!"
,其中字母部分按规则替换,非字母的逗号、空格和感叹号等字符保持原样。