python 中的较低函数
Lower function in python
我想在python
中制作自己的下层函数
就像我们使用的一样:
>>“你好,世界!”.lower()
>>你好,世界!
我想自己做下层函数
我试过这段代码:
String = "Hello, World!"
def lowerFunction(MyStr):
if "A" in MyStr:
MyStr = MyStr.replace("A",'a')
if "B" in MyStr:
MyStr = MyStr.replace("B",'b')
if "C" in MyStr:
MyStr = MyStr.replace("C",'c')
if "D" in MyStr:
MyStr = MyStr.replace("D",'d')
if "E" in MyStr:
MyStr = MyStr.replace("E",'e')
if "F" in MyStr:
MyStr = MyStr.replace("F",'f')
if "G" in MyStr:
MyStr = MyStr.replace("G",'g')
if "H" in MyStr:
MyStr = MyStr.replace("H",'h')
if "I" in MyStr:
MyStr = MyStr.replace("I",'i')
if "J" in MyStr:
MyStr = MyStr.replace("J",'j')
if "K" in MyStr:
MyStr = MyStr.replace("K",'k')
if "L" in MyStr:
MyStr = MyStr.replace("L",'l')
if "M" in MyStr:
MyStr = MyStr.replace("M",'m')
if "N" in MyStr:
MyStr = MyStr.replace("N",'n')
if "O" in MyStr:
MyStr = MyStr.replace("O",'o')
if "P" in MyStr:
MyStr = MyStr.replace("P",'p')
if "Q" in MyStr:
MyStr = MyStr.replace("Q",'q')
if "R" in MyStr:
MyStr = MyStr.replace("R",'r')
if "S" in MyStr:
MyStr = MyStr.replace("S",'s')
if "T" in MyStr:
MyStr = MyStr.replace("T",'t')
if "U" in MyStr:
MyStr = MyStr.replace("U",'u')
if "V" in MyStr:
MyStr = MyStr.replace("V",'v')
if "W" in MyStr:
MyStr = MyStr.replace("W",'w')
if "X" in MyStr:
MyStr = MyStr.replace("X",'x')
if "Y" in MyStr:
MyStr = MyStr.replace("Y",'y')
if "Z" in MyStr:
MyStr = MyStr.replace("Z",'z')
return MyStr
print(lowerFunction(String))
但是这段代码太大了,我们可以用不同的技术来实现吗?
提前致谢
您的代码中有太多挑战。
正在执行多个替换语句。对于其中的每一步,python 都会在内部创建一个新字符串。在 Python 中,字符串是不可变的。
if条件太多。
def _lowerFunction(char):
if 65 <= ord(char) <= 90:
return chr(ord(char) + 32)
return char
def lowerFunction(myStr):
return ''.join([_lowerFunction(char) for char in myStr])
使用 ord
和 chr
来检查它是大写还是小写字符。
>>> ord('a') # ord example
97
>>> ord('A')
65
>>> chr(97) # chr example
'a'
>>> chr(98)
'b'
您可以使用ascii来替换字符。
stri = "Hello, World!"
lower_stri = ''.join([chr(ord(i)+32) if ord(i) >= 65 and ord(i) <= 90 else i for i in stri ])
这将检查字符是否在大写字母之间,并将其替换为小写字母。
此代码可能对您有所帮助
def lowerFunction(MyStr):
MyStr=list(MyStr)
for i in range(len(MyStr)):
v=ord(MyStr[i])
if v>=65 and v<=90:
MyStr[i]=chr(v+32)
MyStr=''.join(MyStr)
return MyStr
val=lowerFunction('Hello, World!')
print(val)
Python 具有翻译字符的特殊功能 - str.translate()
它需要 str.maketrans('ABC', 'abc')
来创建查找 table。
但您不必手动编写 ABC...Z
和 abc...z
,因为您在变量 string.ascii_uppercase
、string.ascii_lowercase
.
中拥有它们
import string
def lower(text):
lookup = str.maketrans(string.ascii_uppercase, string.ascii_lowercase)
return text.translate(lookup)
text = lower("Hello, World!")
print(text)
结果
'hello, world!'
当然,这与其他解决方案一样仅适用于 ASCII。
对于 Unicode,它需要 maketrans()
中的所有字符
顺便说一句: 使用这个你可以用 ROT13
加密文本
import string
def rot13(text):
lookup = str.maketrans('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm')
return text.translate(lookup)
text = ro13("Hello, World!")
结果
'Uryyb, Jbeyq!'
使用大小写字母列表的另一种解决方案。 更快,所以你应该使用它,但这个解决方案更接近原始解决方案。
def lower_function(my_string):
for lower, upper in zip(string.ascii_lowercase, string.ascii_uppercase):
my_string = my_string.replace(upper, lower)
return my_string
zip
像这样创建大小写对:
list(zip('abc', 'ABC'))
等于 [('a', 'A'), ('b', 'B'), ('c', 'C')]
。如果没有 list
,它会创建一个迭代器,这对于 for 循环来说很好。
与目前的其他解决方案一样,它仅适用于 ASCII 字符,而 lower 方法也适用于其他字符。这将导致所有小写字母:
"CSÖN CSÖN gyűrŰ Arany GYŰRŰ".lower() # gives "csön csön gyűrű arany gyűrű"
但是您可以在 zip
部分使用更长的字符列表,例如
zip(string.ascii_lowercase + 'áéíóöőúüűä', string.ascii_uppercase + "ÁÉÍÓÖŐÚÜŰÄ")
但是可能还有一些其他问题,比如German scharfes s。
我想在python
中制作自己的下层函数就像我们使用的一样:
>>“你好,世界!”.lower()
>>你好,世界!
我想自己做下层函数
我试过这段代码:
String = "Hello, World!"
def lowerFunction(MyStr):
if "A" in MyStr:
MyStr = MyStr.replace("A",'a')
if "B" in MyStr:
MyStr = MyStr.replace("B",'b')
if "C" in MyStr:
MyStr = MyStr.replace("C",'c')
if "D" in MyStr:
MyStr = MyStr.replace("D",'d')
if "E" in MyStr:
MyStr = MyStr.replace("E",'e')
if "F" in MyStr:
MyStr = MyStr.replace("F",'f')
if "G" in MyStr:
MyStr = MyStr.replace("G",'g')
if "H" in MyStr:
MyStr = MyStr.replace("H",'h')
if "I" in MyStr:
MyStr = MyStr.replace("I",'i')
if "J" in MyStr:
MyStr = MyStr.replace("J",'j')
if "K" in MyStr:
MyStr = MyStr.replace("K",'k')
if "L" in MyStr:
MyStr = MyStr.replace("L",'l')
if "M" in MyStr:
MyStr = MyStr.replace("M",'m')
if "N" in MyStr:
MyStr = MyStr.replace("N",'n')
if "O" in MyStr:
MyStr = MyStr.replace("O",'o')
if "P" in MyStr:
MyStr = MyStr.replace("P",'p')
if "Q" in MyStr:
MyStr = MyStr.replace("Q",'q')
if "R" in MyStr:
MyStr = MyStr.replace("R",'r')
if "S" in MyStr:
MyStr = MyStr.replace("S",'s')
if "T" in MyStr:
MyStr = MyStr.replace("T",'t')
if "U" in MyStr:
MyStr = MyStr.replace("U",'u')
if "V" in MyStr:
MyStr = MyStr.replace("V",'v')
if "W" in MyStr:
MyStr = MyStr.replace("W",'w')
if "X" in MyStr:
MyStr = MyStr.replace("X",'x')
if "Y" in MyStr:
MyStr = MyStr.replace("Y",'y')
if "Z" in MyStr:
MyStr = MyStr.replace("Z",'z')
return MyStr
print(lowerFunction(String))
但是这段代码太大了,我们可以用不同的技术来实现吗?
提前致谢
您的代码中有太多挑战。
正在执行多个替换语句。对于其中的每一步,python 都会在内部创建一个新字符串。在 Python 中,字符串是不可变的。
if条件太多。
def _lowerFunction(char):
if 65 <= ord(char) <= 90:
return chr(ord(char) + 32)
return char
def lowerFunction(myStr):
return ''.join([_lowerFunction(char) for char in myStr])
使用 ord
和 chr
来检查它是大写还是小写字符。
>>> ord('a') # ord example
97
>>> ord('A')
65
>>> chr(97) # chr example
'a'
>>> chr(98)
'b'
您可以使用ascii来替换字符。
stri = "Hello, World!"
lower_stri = ''.join([chr(ord(i)+32) if ord(i) >= 65 and ord(i) <= 90 else i for i in stri ])
这将检查字符是否在大写字母之间,并将其替换为小写字母。
此代码可能对您有所帮助
def lowerFunction(MyStr):
MyStr=list(MyStr)
for i in range(len(MyStr)):
v=ord(MyStr[i])
if v>=65 and v<=90:
MyStr[i]=chr(v+32)
MyStr=''.join(MyStr)
return MyStr
val=lowerFunction('Hello, World!')
print(val)
Python 具有翻译字符的特殊功能 - str.translate()
它需要 str.maketrans('ABC', 'abc')
来创建查找 table。
但您不必手动编写 ABC...Z
和 abc...z
,因为您在变量 string.ascii_uppercase
、string.ascii_lowercase
.
import string
def lower(text):
lookup = str.maketrans(string.ascii_uppercase, string.ascii_lowercase)
return text.translate(lookup)
text = lower("Hello, World!")
print(text)
结果
'hello, world!'
当然,这与其他解决方案一样仅适用于 ASCII。
对于 Unicode,它需要 maketrans()
顺便说一句: 使用这个你可以用 ROT13
加密文本import string
def rot13(text):
lookup = str.maketrans('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm')
return text.translate(lookup)
text = ro13("Hello, World!")
结果
'Uryyb, Jbeyq!'
使用大小写字母列表的另一种解决方案。
def lower_function(my_string):
for lower, upper in zip(string.ascii_lowercase, string.ascii_uppercase):
my_string = my_string.replace(upper, lower)
return my_string
zip
像这样创建大小写对:
list(zip('abc', 'ABC'))
等于 [('a', 'A'), ('b', 'B'), ('c', 'C')]
。如果没有 list
,它会创建一个迭代器,这对于 for 循环来说很好。
与目前的其他解决方案一样,它仅适用于 ASCII 字符,而 lower 方法也适用于其他字符。这将导致所有小写字母:
"CSÖN CSÖN gyűrŰ Arany GYŰRŰ".lower() # gives "csön csön gyűrű arany gyűrű"
但是您可以在 zip
部分使用更长的字符列表,例如
zip(string.ascii_lowercase + 'áéíóöőúüűä', string.ascii_uppercase + "ÁÉÍÓÖŐÚÜŰÄ")
但是可能还有一些其他问题,比如German scharfes s。