函数需要一串数字并在每个奇数位之前和之后插入一个破折号:异常:字符串不能以' - '开头或结尾。

时间:2016-08-09 02:34:04

标签: python

任务:编写一个方法,该方法接收一个数字并返回一个字符串,在每个奇数位之前和之后放置一个破折号。有一个例外:不要用短划线开始或结束字符串。

这就是我所拥有的:

num = "32343"
dash = ""

for digit in num:
    if int(num[0]) % 2 != 0:
        dash = digit + "-"
    else:
        dash += digit
    if int(digit) % 2 != 0:
        dash += "-" + digit + "-"
    else:
        dash += digit
    if int(num[-1]) % 2 != 0:
        dash += "-" + digit
    else:
        dash += digit

print(dash)

正在打印" 3--3--3"

如果有人能告诉我哪里出错了,我们将不胜感激!

2 个答案:

答案 0 :(得分:0)

解决方案只是一系列if - else案例需要考虑,这是不言自明的:

num = "32343"
string = ""
for i in xrange(0,len(num)):
    if i == 0 and i == len(num) - 1 and int(num[i]) % 2 != 0:
        string = num[i]
    elif i == 0 and int(num[i]) % 2 != 0:
        string = num[i] + "-"
    elif i == len(num) - 1  and int(num[i]) % 2 != 0:
        string = string + "-" + num[i]
    elif int(num[i]) % 2 !=0:
        string =  string + "-" + num[i] + "-"
    elif int(num[i]) % 2 == 0:
        string = string + num[i]

print string 

答案 1 :(得分:0)

您可以使用拼接([:]语法)以各种方式处理此问题,但我的第一个问题是通过生成器。你使用mod(%)是一个很好的开始,但你可以避免使用字符串格式和隐含的其他几个elif。

编辑:我注意到你应该仍然有一个尾随 - 在第一个数字和前一个 - 在结束数字上,例如。使用拼接,我在修订版中删除了这些,不再产生第0个和最后一个元素:

def dash(num):
    """ add surrounding -'s to any digit in num which is odd """
    for n in num:
        if int(n) % 2 != 0:
            n = "-%s-" % n
        yield n

def remove_bookends(_str):
    """ if - is at the start or end of _str, remove it """
    if _str[0] is "-":
        _str = _str[1:]
    if _str[-1] is "-":
        _str = _str[:-1]
    return _str

if __name__ == '__main__':
    num = "32343"
    _str = "".join([n for n in dash(num)])
    _str = remove_bookends(_str)
    print _str