注册 登录
编程论坛 Python论坛

python字符串大小写和函数参数的问题

kyletan0808 发布于 2019-04-11 14:36, 3166 次点击
大家好,我是新手请多多关照。
求教一个问题:我想用函数 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())

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

13 回复
#2
wp2319572019-04-11 15:27
upper 是针对整个字符串的
另:你的for if 基本语法都没写对呢
#3
TysonKoothra2019-04-11 15:42
程序代码:

#接收用户输入(为使代码尽量简单故未过滤输入)
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编辑过]

#4
wp2319572019-04-11 16:07
回复 3楼 TysonKoothra
嗯,又测试了一下。
x[i+1].upper() 可以实现单个字符的转换
#5
TysonKoothra2019-04-11 16:08
回复 4楼 wp231957
刚才修改了下程序,重新贴了一下代码
#6
TysonKoothra2019-04-11 16:09
回复 5楼 TysonKoothra
还有python里面单引号包括的也是字符串,即使只有一个字符
#7
wp2319572019-04-11 16:18
>>> 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()  这是非法的
#8
TysonKoothra2019-04-11 16:23
回复 7楼 wp231957
确实是, 第一次我写错了. 然后我发现传进来的是一个字符串, 我就把程序改了.
#9
wp2319572019-04-11 16:31
这是我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))
#10
wp2319572019-04-11 21:21
当然了,用正则也能完成 ,并且代码量 要比这些个少一些
#11
kyletan08082019-04-12 13:46
回复 2楼 wp231957
额。。是漏了冒号吧,多谢提醒
#12
kyletan08082019-04-12 14:10
以下是引用TysonKoothra在2019-4-11 15:42:39的发言:


#接收用户输入(为使代码尽量简单故未过滤输入)
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 == "." or x_l == "?" or x_l == "!":
           x_l = x_l.upper()
    print("".join(x_l))

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


Tyson:
感谢帮忙。
查了些资料再结合你修改的代码后明白一些了:你把参数x转化成list类型是因为原始参数不能更改。
另外学到了一个新的(对我来说)函数join。 但是print语句里面的("")是什么意思?是指空格还是引号里面的内容?
#13
TysonKoothra2019-04-12 14:27
回复 12楼 kyletan0808
""是个空字符串. join的用法的话, 比如这样:
程序代码:

>>> paths = ["src", "tools", "check.java"]
>>> "/".join(paths)
'src/tools/check.java'
>>>
#14
kyletan08082019-04-15 01:16
感谢两位大神无私奉献
1