标题:python字符串大小写和函数参数的问题
只看楼主
kyletan0808
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2019-4-11
结帖率:50%
已结贴  问题点数:20 回复次数:13 
python字符串大小写和函数参数的问题
大家好,我是新手请多多关照。
求教一个问题:我想用函数 get_string()来接收用户输入的字符串然后作为参数传送给函数capitalize_it(x),再通过capitalize_it(x)将字符串中某些字母大写,如".", "?", "!"后面单词的首字母和单独的i大写(不是每个单词首字母都大写)效果如下:
输入
Hi everyone!my name is xxx.please to meet you all.i'm a novice and i appreciate any help.thank you.
输出
Hi everyone!My name is xxx.Please to meet you all.I'm a novice and I appreciate any help.Thank you.
下面是部分代码:

#接收用户输入(为使代码尽量简单故未过滤输入)
def get_string()
    string = input("Please enter a string:")  
    return string
#将字符串符合条件的字母变成大写
def capitalize_it(x)
    for i in range(0,len(x)):
        if x[i] == " " or x[i] == "." or x[i] == "?" or x[i] == "!"
           x[i+1].upper()
    print(x)

#call capitalize_it(x)
capitalize_it(get_string())

#我试过多种方法但都没有用。求指点,拜谢

搜索更多相关主题的帖子: 字符串 函数 参数 字母 大写 
2019-04-11 14:36
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
upper 是针对整个字符串的
另:你的for if 基本语法都没写对呢

DO IT YOURSELF !
2019-04-11 15:27
TysonKoothra
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:71
专家分:374
注 册:2018-10-21
得分:12 
程序代码:
#接收用户输入(为使代码尽量简单故未过滤输入)
def get_string():
    string = input("Please enter a string:")  
    return string
#将字符串符合条件的字母变成大写
def capitalize_it(x):
    x_l = list(x)
    for i in range(0,len(x_l)-1):
        if x_l[i] == "." or x_l[i] == "?" or x_l[i] == "!":
           x_l[i+1] = x_l[i+1].upper()
    print("".join(x_l))

#call capitalize_it(x)
capitalize_it(get_string())


[此贴子已经被作者于2019-4-11 16:08编辑过]

2019-04-11 15:42
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
回复 3楼 TysonKoothra
嗯,又测试了一下。
x[i+1].upper() 可以实现单个字符的转换

DO IT YOURSELF !
2019-04-11 16:07
TysonKoothra
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:71
专家分:374
注 册:2018-10-21
得分:0 
回复 4楼 wp231957
刚才修改了下程序,重新贴了一下代码
2019-04-11 16:08
TysonKoothra
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:71
专家分:374
注 册:2018-10-21
得分:0 
回复 5楼 TysonKoothra
还有python里面单引号包括的也是字符串,即使只有一个字符
2019-04-11 16:09
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:8 
>>> s="test"
>>> s[2]=s[2].upper()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> s[2].upper()
'S'
>>>
测试了一下:
s[2]=s[2].upper()  这是非法的

DO IT YOURSELF !
2019-04-11 16:18
TysonKoothra
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:71
专家分:374
注 册:2018-10-21
得分:0 
回复 7楼 wp231957
确实是, 第一次我写错了. 然后我发现传进来的是一个字符串, 我就把程序改了.
2019-04-11 16:23
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
这是我copy别人的一段代码   楼主可以参考一下  和三楼TysonKoothra大侠的代码 大同小异

程序代码:
# coding: utf-8

#此函数的功能就是把神马 空格 点 问号 叹号 之后的字符转换成大写
#函数传入参数:一段asscii字符串
def fconv(x):
    result=''
    flag=False
    for c in x:
        if c in " .?!":
          result+=c
          flag = True
        elif flag==True:
              result += c.upper()
              flag = False
        else:
            result += c
    return result     


if __name__=='__main__':
  s="Hi everyone!my name is xxx.please to meet you all.i\'m a novice and i appreciate any help.thank you."
  print(fconv(s))

DO IT YOURSELF !
2019-04-11 16:31
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
当然了,用正则也能完成 ,并且代码量 要比这些个少一些

DO IT YOURSELF !
2019-04-11 21:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494072-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.282307 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved