首页 > 解决方案 > 如何在乘法和 mod 中不乘以空间?

问题描述

我已经成功地制作了一个函数,它接受一个字符串和一个 int 并返回一个从参数字符串派生的新字符串,但重复/删除了一些字符。每个字符都乘以它的 ord mod x。不过,我不确定如何防止它出现在空白处。

这是整个代码块,包括 doctest:

def balloon_string(string, x):
    """
    >>> balloon_string('abcdef', 4)
    'abbccceff'
    >>> balloon_string('A great day!', 4)
    'Agggrreaay!'
    >>> balloon_string('ABC 1234', 3)
    'AAC 1224'
    """
    l = []
    for ch in string:
        l.append(str(ch*(ord(ch)%x)))
    return ''.join(l)

我从中得到的输出是:

Expecting:
    'abbccceff'
ok

Expecting:
    'Agggrreaay!'
ok

Expected:
    'AAC 1224'
Got:
    'AAC  1224'

如您所见,最后一个有一个额外的空间,我不知道如何摆脱它。

标签: python

解决方案


您可以像这样在一行中完成所有操作:

def balloon_string(string, x):
    return ''.join((c * (ord(c) % x)) if c != ' ' else c for c in string)

print(balloon_string('abcdef', 4))
# abbccceff
print(balloon_string('A great day!', 4))
# A gggrrea ay!
print(balloon_string('ABC 1234', 3))
# AAC 1224

推荐阅读