所以我正在尝试创建一个函数,它以与s.upper相同的方式将字符串的所有字母大写,但是以函数的格式。我想尝试利用ord()和chr(),但声明如果字符串的字符是> 90,则将其替换为比原始矿石少32的字符。我觉得我有一些作品,但我不知道如何实际把它放在一起。我知道我需要一个字符串累加器,但如何将它们放在一起并不是我的意思。到目前为止,我有这个:
def Uppercase(s):
x = ''
for ch in s:
x = -----> confused about what the accumulation would be
if ch ord() > 91:
s.replace(ch, chr(ord())-----> not sure that this is possible to implement
答案 0 :(得分:4)
如果某个字符的ord()
值介于97和122之间(包括两者),那么您可以从中减少32以获得相应的大写字母。
使用str.join
和list comprehension
的单行代码:
>>> def upper_case(s):
return "".join([ chr(ord(x)-32) if 97<=ord(x)<=122 else x for x in s ])
>>> upper_case("foo bar")
'FOO BAR'
更易阅读的版本:
>>> def upper_case(s):
new_strs = []
for char in s:
ordi = ord(char)
if 97 <= ordi <= 122:
new_strs .append( chr(ordi-32) )
else:
new_strs.append(char)
return "".join(new_strs) #join the list using str.join and return
...
>>> upper_case("foo bar")
'FOO BAR'
>>> from string import ascii_lowercase
>>> upper_case(ascii_lowercase)
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
答案 1 :(得分:3)
使用列表,然后再将各个字符连接在一起:
def Uppercase(s):
result = []
for ch in s:
value = ord(ch)
if 97 <= value <= 122:
value -= 32
result.append(chr(value))
return ''.join(result)
我的版本只更改字节值介于97(a
)和122(z
)之间的字符。 str.join()
将字符串列表转换回一个字符串,并带有可选的分隔符文本(此处为空)。
您可以将其折叠为执行相同操作的列表理解:
def Uppercase(s):
return ''.join([chr(ord(ch) - 32) if 'a' <= ch <= 'z' else ch for ch in s])
但如果你刚开始使用Python,那可能就不太容易理解了。
第一个版本的if
语句已替换为conditional expression;表单true_expression if some_test else false_expression
首先评估some_test
,然后根据结果返回true_expression
或false_expression
。
任何一个版本都会导致:
>>> Uppercase('Hello world!')
'HELLO WORLD!'