将字符串的字符转换为相反大小写的 Python 程序
在这个问题中,我们将切换每个字符串字符的大小写。切换每个字符串字符大小写的最简单方法是使用 swapcase() 内置方法。
此外,我们还可以使用字符的 ASCII 值来交换它们的大小写。Python 还包含 isUpper() 和 isLower() 方法来检查字符的大小写,以及 lower() 和 upper() 方法来更改大小写。
在这里,我们将学习解决问题的不同方法。
问题陈述 - 我们给出了一个字符串 alpha。我们需要切换字符串字符的大小写。意思是将大写字母转换为小写字母,将小写字母转换为大写字母。
示例
输入
alpha = "TutorialsPoint"
输出
'tUTORIALSpOINT'
说明 - 在这里,我们切换了每个字符的大小写。
输入
alpha = "AAAA"
输出
'aaaa'
输入
alpha = '12qwER@'
输出
'12QWer@'
说明 - 我们更改了每个字母字符的大小写,并保持特殊字符不变。
方法 1
在此方法中,如果字符为大写,我们会将 32 添加到字符的 ASCII 值中。否则,我们从字符的 ASCII 值中减去 32,将字符转换为大写。
算法
步骤 1 - 将字符串转换为字符列表。
步骤 2 - 遍历字符列表。
步骤 3 - 如果字符介于 'A' 到 'Z' 之间,则将字符的 ASCII 值加 32,并更新列表中的字符。
步骤 4 - 如果字符介于 'a' 到 'z' 之间,则从字符的 ASCII 值中减去 32,并更新列表中的字符。
步骤 5 - 使用 join() 方法将列表中的所有字符转换为字符串。
步骤 6 - 返回结果字符串。
示例
def changeCase(alpha): alpha_list = list(alpha) # 字符串到列表 # 遍历字符串字符列表 for p in range(len(alpha_list)): if alpha_list[p] >= 'A' and alpha_list[p] <= 'Z': alpha_list[p] = chr(ord(alpha_list[p]) + 32) # 改为小写 elif alpha_list[p] >= 'a' and alpha_list[p] <= 'z': alpha_list[p] = chr(ord(alpha_list[p]) - 32) # 改为大写 alpha = ''.join(alpha_list) # List to string return alpha alpha = "TutorialsPoint" alpha = changeCase(alpha) print("翻转每个字符的大小写后的字符串为 -", alpha)
输出
翻转每个字符的大小写后的字符串为 - tUTORIALSpOINT
时间复杂度 - O(N) 遍历字符串字符。
空间复杂度 - O(N) 将字符串存储在字符列表中。
方法 2
在此方法中,我们使用 isUpper() 方法来检查字符是否为大写。此外,我们分别使用 upper() 和 lower() 方法将字符转换为大写和小写。
算法
步骤 1 - 使用空字符串初始化"temp"以存储结果字符串。
步骤 2 - 迭代字符串。
步骤 3 - 如果字符为大写,则使用 lower() 方法将字符转换为小写并将其附加到临时字符串。
步骤 4 - 否则,使用 upper() 方法将字符转换为大写并将其附加到临时字符串。
步骤 5 - 返回"temp"字符串。
示例
def changeCase(alpha): temp = "" for ch in alpha: # 使用 isupper() 方法检查字符是否为大写 if (ch.isupper()): # 将字符转换为小写 temp += ch.lower() else: temp += ch.upper() # 将字符转换为大写 return temp alpha = "TutorialsPoint" alpha = changeCase(alpha) print("翻转每个字符的大小写后的字符串为 -", alpha)
输出
翻转每个字符的大小写后的字符串为 - tUTORIALSpOINT
时间复杂度 - 遍历字符串的 O(N)。
空间复杂度 - 存储结果字符串的 O(N)。
方法 3
在此方法中,我们使用 swapcase() 方法来切换字符的大小写。我们在切换每个字符的大小写后将 alpha 字符串存储到其自身。
示例
def changeCase(alpha): # 使用 swapcase() 函数切换字符串字符的大小写 alpha = alpha.swapcase() return alpha alpha = "AbcSDe" alpha = changeCase(alpha) print("翻转每个字符的大小写后的字符串为 -", alpha)
输出
翻转每个字符的大小写后的字符串为 - aBCsdE
时间复杂度 - O(N)
空间复杂度 - O(1)
方法 4
在此方法中,我们将使用正则表达式和 lambda 函数来切换每个字符串字符的大小写。
算法
步骤 1 - 初始化"patt"以搜索小写和大写字母字符。
步骤 2 - 接下来,使用 re.sub() 方法将所有字母字符替换为其相反的大小写。
步骤 3 - 使用"patt"作为sub() 方法的第一个参数、用于切换字符的 lambda 函数作为第二个参数、原始字符串作为第三个参数。
步骤 4 - 返回 alpha 字符串。
示例
import re def changeCase(alpha): # 正则表达式 patt = r'[a-zA-Z]' # 切换每个字符的大小写 alpha = re.sub(patt, lambda ch: ch.group().lower() if ch.group().isupper() else ch.group().upper(), alpha) return alpha alpha = "TutorialsPoint" alpha = changeCase(alpha) print("翻转每个字符的大小写后的字符串为 -", alpha)
输出
翻转每个字符的大小写后的字符串为 - tUTORIALSpOINT
时间复杂度 - O(N)
空间复杂度 - O(1)
方法 5
在此方法中,我们将对字符的 ASCII 值与 32 执行 XOR 运算以切换大小写。
当我们将 32 与任何字母字符进行 XOR 时,它会切换 ASCII 值的二进制表示的第 6 位。
让我们通过下面的示例来理解它。
65 = 'A' = 1000001
97 = 'a' = 1100001
32 = 0100000
因此,当我们对 65 和 32 进行异或时,由于第 6 位被翻转,结果变为 97,同样,对 97 和 32 进行异或也变为 32。
这适用于所有字母字符的 ASCII 值。
算法
步骤 1 - 开始遍历字符串。
步骤 2 - 执行 isAlphabeticChar() 函数检查当前字符是否为字母。
步骤 3 - 在 isAlphabeticChar() 函数中,如果 ASCII 值介于 65 和 90 之间,则返回 true,否则97 和 122。否则,返回 false。
步骤 4 - 如果当前字符是字母字符,则将其与 32 进行异或,并将更新后的字符附加到"临时"字符串。
步骤 5 - 否则,将原始字符附加到临时字符串。
步骤 6 - 返回临时字符串。
示例
def isAlphbeticChar(char): Ascii = ord(char[0]) # 使用 ASCII 值来验证字符 if((Ascii >= 65 and Ascii <= 90) or (Ascii >= 97 and Ascii <= 122)): return True else: return False def changeCase(alpha): temp = "" for ch in range(len(alpha)): if(isAlphbeticChar(alpha[ch])): temp += chr(ord(alpha[ch]) ^ (1 << 5)) else: temp += alpha[ch] return temp alpha = "TutorialsPoint" alpha = changeCase(alpha) print("翻转每个字符的大小写后的字符串为 -", alpha)
输出
翻转每个字符的大小写后的字符串为 - tUTORIALSpOINT
时间复杂度 - O(N)
空间复杂度 - O(N)
我们学习了 5 种方法来切换字符串的每个字符。第一种方法使用 ASCII 值,第二种方法使用 isUpper()、upper() 和 lower() 方法。
此外,第三种方法使用 swapcase() 方法,第四种方法使用正则表达式,最后一种方法使用 XOR 运算符。