如何从字符串中删除参数?

时间:2016-01-13 04:10:48

标签: python

要求您输入姓名和字符串的学校作业。使用名称确定首字母并从字符串中删除首字母。打印原始名称,原始字符串,首字母和结果字符串。

我不知道该怎么办。

  1. 字符似乎没有出现在第一个函数中的“Initials are%s ...”中

  2. 无法弄清楚如何从txt中删除参数字符。

  3. 代码:

    def main():
        global chars, txt, fullName
        fullName = raw_input("Please input your name: ")
        txt = raw_input("Type in any string: ")
        chars = ''
        getInitials(fullName)
        print "Full name is %s. Original String is %s" % (fullName, txt)
        removeChars(txt,chars)
        print "Initials are %s. Resulting string is %s" %(chars, txt)
    
    def getInitials(fullName):
        chars = ''.join(name[0].upper() for name in fullName.split())
        return
    
    def removeChars(txt, chars):
        for char in txt:
            if char in chars:
                txt = txt.replace(char,'')
        return txt
    
    
    main()
    

3 个答案:

答案 0 :(得分:0)

您错误地使用global(通常认为这是不好的做法),如果您return某些内容来自您的功能,那么完全没必要:

def main():
    fullName = raw_input("Please input your name: ")
    txt = raw_input("Type in any string: ")
    chars = getInitials(fullName)
    sv = removeChars(txt, chars)
    print "Full name is %s. Original String is %s" % (fullName, txt)
    print "Initials are %s. Resulting string is %s" % (chars, sv)

def getInitials(fullName):
    chars = ''.join(name[0].upper() for name in fullName.split())
    return chars

def removeChars(txt, chars):
    for char in txt:
        if char in chars:
            txt = txt.replace(char, '')
    return txt 

main()

虽然removeChars效率不高,因为字符串是不可变的,因此每个替换都会创建一个新字符串。您可以使用条件例如:getInitials执行与def removeChars(txt, chars): return ''.join(char for char in txt if char.upper() not in chars) 相同的操作。

upper()

注意:您可能需要进行foldLeft比较

答案 1 :(得分:0)

你遗漏了一些重要的事情:

  • getInitials()中,您将返回None,而不是chars变量。将您的return声明更改为return chars

  • main函数中,您正在调用getInitials,但未使用返回值。由于removeChars期待chars并且您最初将其设置为空字符串,因此不会删除任何内容。

更改以下内容:

getInitials(fullName)

为:

chars = getInitials(fullName)
  • 您的removeChars()函数正在返回结果,但您未在main中捕获该结果。

变化:

removeChars(txt,chars)

为:

txt = removeChars(txt, chars)

这里有几点需要注意:

  • txt = removeChars(txt, chars)未更改txt,它正在分配一个全新的值。它碰巧使用相同的变量名称。在您的原始帖子中,您有一个使用sv作为变量名称的打印语句:print "Initials are %s. Resulting string is %s" %(chars, sv),如果您将removeChars的结果分配给sv,则会获得在txt
  • 中仍然可以使用相同的输出和原始字符串
  • 删除global声明。
  • 您在getInitials的原始回复是一个空的回复声明。这将返回None。没有return语句的函数也会返回None。有关详细信息,请参阅此question
  • 您的removeChars效率低下,因为字符串是不可变的。这意味着变量重复地重新创建字符串。但是,对于像这样的小型示例程序,它可以正常工作。

答案 2 :(得分:-1)

你的意思是这样吗?

def main():

    fullName = input("Please input your full name: ")
    txt = input("Type in any string: ")

    initials = '.'.join(name[0].upper() for name in fullName.split())

    print(fullName)
    print (txt)
    print(initials)

main()

你没有得到我,我只是想帮忙。