【问题标题】:Capitalizing each words with chr and ord用 chr 和 ord 将每个单词大写
【发布时间】:2020-04-01 10:58:39
【问题描述】:

首先我必须从用户那里接收一个字符串。该函数将大写引入的字符串对象。它会使单词以大写字符开头,所有剩余字符都小写。这是我所做的:

ssplit = s.split()
for z in s.split():
    if ord(z[0]) < 65 or ord(z[0])>90:
        l=(chr(ord(z[0])-32))
        new = l + ssplit[1:]
        print(new)
    else:
        print(s)

我看不出我做错了什么。

【问题讨论】:

  • 它有助于通过打印内容来检查变量状态:例如print(ssplit) 将显示它是一个列表,而 print(l) 将打印一个字符串。您不能连接字符串和列表。

标签: python-3.x letter capitalize chr ord


【解决方案1】:

有许多 python 方法可以为您轻松解决这个问题。例如,str.title() 会将给定字符串中每个单词的开头大写。如果你想确保所有其他都是小写,你可以先做str.lower()然后str.title()

s = 'helLO how ARE YoU'
s.lower()
s.capitalize()
# s = 'Hello How Are You'

【讨论】:

    【解决方案2】:

    按照@Pyer 的建议使用str.title() 很好。如果您需要使用 chrord,您应该正确设置变量 - 请参阅代码中的 cmets

    s = "this is a demo text"
    ssplit = s.split()
    
    # I dislike magic numbers, simply get them here:
    small_a = ord("a") # 97
    small_z = ord("z")
    
    cap_a = ord("A")   # 65
    
    delta = small_a - cap_a
    
    for z in ssplit :  # use ssplit here - you created it explicitly
        if small_a <= ord(z[0]) <= small_z:
            l = chr(ord(z[0])-delta)
            new = l + z[1:]            # need z here - not ssplit[1:]
            print(new) 
        else:
            print(s)
    

    输出:

    This
    Is
    A
    Demo
    Text
    

    【讨论】:

    • 它完全解决了我的问题,非常感谢。但这是我无法理解的;尽管字母的大小写是混合的,例如,即使我们在运行程序时编写 ProGRamming,我们也会得到“Programming”。我的意思是,我们在哪一行让其他字母变小了?
    • @Ch nowhere - 它只会更正第一个字母并“按原样”取其余字母 - 如果您需要将所有其他字母小写,则还必须更正任何非小写字母 - 或simpy do: ssplit = s.lower().split() 所以你只有小写字母开头
    猜你喜欢
    • 2012-08-30
    • 1970-01-01
    • 2021-10-05
    • 2012-04-13
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    相关资源
    最近更新 更多