为什么我不能将修改后的str_func函数返回给main函数?

时间:2015-09-02 13:39:04

标签: python string function replace

我已经完成了大约80%的这个程序,但我不能为我的生活弄清楚如何用星号替换元音并打印新的字符串。

说明如下:

  1. 提示用户输入他/她的名字。
  2. 输出名称中的字母数。
  3. 打印名称中以空格分隔的所有字母,全部在一行上。
  4. 以全部大写字母打印名称。
  5. 使用一个切片从名称中创建一个新字符串,但没有第一个和最后一个字母。
  6. 打印这个新字符串。
  7. 将原始名称传递给名为str_func的函数。
  8. 在str_func函数内:
    • 用星号替换名称中的元音
    • 将修改后的名称返回给主
    • 返回main,打印str_func返回的字符串。
  9. 到目前为止我的代码:

    def main():
    
        name = input('Enter your first name: ')
    
        print(name)
    
        ### print name with spaces in between characters
        spaces = ''
        for ch in name:
            spaces = spaces + ch + ' '
        print(spaces[:-1]) # to get rid of space after e
    
        print('name in caps is,',name.upper())  # print name in all caps
    
        print('After chopping the name we get',name[1:4])
    
        print(str_func)
    
    def str_func():
    
        str_func = name.replace('a','*')
        return str_func
    
    
    
    main()
    

    我的一位朋友在某种程度上说明我的str_func函数存在问题:

      

    当你调用它时,该函数应该在主函数中将名称作为参数。   你不打印它。你叫它,像这样:   new_name = str_func(name)

         

    像这样定义str_func()。我为你准备了一些伪代码。

    def str_func(name):
           ###make a string containing the vowels
           ###loop through the name
           ###replace vowel if found with *
           ### after loop, return the name
    

    请帮助!!

3 个答案:

答案 0 :(得分:0)

这可能会对你有帮助。

C:\Users\Dinesh Pundkar\Desktop>python a.py
Enter your first name: Guido
Guido
G u i d o
('name in caps is,', 'GUIDO')
('After chopping the name we get', 'uid')
Guido

C:\Users\Dinesh Pundkar\Desktop>python a.py
Enter your first name: Jfalcone
Jfalcone
J f a l c o n e
('name in caps is,', 'JFALCONE')
('After chopping the name we get', 'fal')
Jf*lc*n*

C:\Users\Dinesh Pundkar\Desktop>

输出

{{1}}

答案 1 :(得分:0)

其他人已经为您的问题提供了解决方案,但我会尝试改进整个代码。我不知道你介绍了哪些函数,所以我可能会为每个步骤提供一个天真的和pythonic的实现。

  • 首先,您没有回答问题2:打印输入字符串的长度。您可以手动计算它们:

    size = 0
    for letter in name:
        size += 1
    print(size)
    

    或使用内置函数len

    size = len(name)
    print(size) # or print(len(name)) if you don't need the intermediate variable
    
  • 您可以使用join字符串方法改善输入的间距:

    spaced = ' '.join(name)
    print(spaced) # or print(' '.join(name)) if you don't need spaced
    

    您可以将任何可迭代的字符串传递给join并且字符串适合。

  • 您的切片会输入您输入的第二个,第三个和第四个字母。无论它的长度是多少。您需要使用之前计算的字符串的长度:

    sliced = name[1:size-1]
    print(sliced)
    

    或在切片表示法中使用负数从字符串末尾开始计算:

    print(name[1:-1])
    
  • 您需要编写一个函数并调用它来改变字符串。因此,您必须将其称为:

    mutated = str_func(name)
    print(mutated)
    

    该函数可以迭代原始字符串:

    def str_func(original):
        copy = ''
        for letter in original:
            if letter in 'auieoy':
                copy += '*'
            else:
                copy += letter
        return copy
    

    或使用replace

    def str_func(original):
        copy = original
        for vowel in 'aeuioy':
            copy = copy.replace(vowel, '*')
        return copy
    

    您甚至可以使用translate,它更适合更常用的用途:

    def str_func(original):
        from string import maketrans
        vowels = 'auieoy'
        return original.translate(maketrans(vowels, '*' * len(vowels)))
    

将所有这些组合在一起:

from string import maketrans

def do_stuff():
    name = input('Enter your first name: ')
    print('Your input is', name)
    print('It\'s length is', len(name))
    print('Adding spaces:', ' '.join(name))
    print('Capitalizing it:', name.upper())
    print('Chopping it:', name[1:-1])
    mutated = str_func(name)
    print('Removing vowels:', mutated)

def str_func(original):
    vowels = 'auieoy'
    return original.translate(maketrans(vowels, '*' * len(vowels)))

if __name__ == '__main__':
    do_stuff()

答案 2 :(得分:-1)

test = 'qwertyuiopasdfghjklzxcvbnm'

def changestring(string):
    for x in 'aeiou':
        string = string.replace(x, '*')
    return string

changestring(test)
'qw*rty***p*sdfghjklzxcvbnm'

这是你想要做的吗?