Python - 当我使用递归时,如何清除我的尾随空格字符串?

时间:2016-10-29 08:05:23

标签: python recursion

我对编程很新,而python是我的第一语言。我正在自学,所以也许我错过了一些东西。对不起,如果我无法正确解决我的问题。

我编写了一个函数,它接受0-99之间的任何数字,并根据字典将其转换为普通话。这是功能:

trans = {'0':'ling', '1':'yi', '2':'er', '3':'san', '4': 'si','5':'wu', '6':'liu', '7':'qi', '8':'ba', '9':'jiu', '10': 'shi'}

def convert_to_mandarin(us_num, flag = True):
'''
us_num, a string representing a US number 0 to 99
returns the string mandarin representation of us_num
'''
    if len(us_num) == 1:
        if us_num != '0':
            return trans[us_num]
        elif flag:
            return trans[us_num]
        else:
            return '\b'
    elif len(us_num) > 1:
        if us_num[0] == '1':
            return trans['10'] +' '+ convert_to_mandarin(us_num[1:], False)
        else:
            return trans[us_num[0]] + ' ' + trans['10'] + ' ' + convert_to_mandarin(us_num[1:], False)
    else:
        return convert_to_mandarin(us_num[:-1], False) + trans[us_num[-1]]

但是对于以0结尾的数字,返回的字符串带有尾随空格。例如,如果n = convert_to_mandarin(' 10')则返回n =' shi' 但我希望它是n =' shi' 那么如何摆脱尾随空间呢?

1 个答案:

答案 0 :(得分:1)

您插入空格并尝试使用退格键删除它。但这在文件或调试方面都不好。

不要返回返回退格区的任何内容,然后使用str.rstrip删除添加的字符串以删除尾随空格:

trans = {'0':'ling', '1':'yi', '2':'er', '3':'san', '4': 'si','5':'wu', '6':'liu', '7':'qi', '8':'ba', '9':'jiu', '10': 'shi'}

def convert_to_mandarin(us_num, flag = True):
    '''
    us_num, a string representing a US number 0 to 99
    returns the string mandarin representation of us_num
    '''
    if len(us_num) == 1:
        if us_num != '0':
            return trans[us_num]
        elif flag:
            return trans[us_num]
        else:
            return ''
    elif len(us_num) > 1:
        if us_num[0] == '1':
            return (trans['10'] +' '+ convert_to_mandarin(us_num[1:], False)).rstrip()
        else:
            return (trans[us_num[0]] + ' ' + trans['10'] + ' ' + convert_to_mandarin(us_num[1:], False)).rstrip()
    else:
        return convert_to_mandarin(us_num[:-1], False) + trans[us_num[-1]]

(有时修正后比试图找出如何避免问题更容易,尤其是递归。请注意,如果没有替换,rstrip将返回相同的字符串,因此开销是可以忽略的)