1

问题:

在不改变 mult_tasks 的情况下,为 mult_tasks_line 编写一个定义,以便 doctests 通过。
所以:

print mult_tasks("3469") 将产生:

(3*3) (3*4) (3*6) (3*9)
(4*3) (4*4) (4*6) (4*9)
(6*3) (6*4) (6*6) (6*9)
(9*3) (9*4) (9*6) (9*8)

def mult_tasks_line(first_num, str_numbers):

    """
    >>> mult_tasks_line("4", "3469")
    '(4*3) (4*4) (4*6) (4*9) '
    """
    #Add your code here

def mult_tasks(str_numbers):

    """
    >>> mult_tasks("246")
    '(2*2) (2*4) (2*6) \\n(4*2) (4*4) (4*6) \\n(6*2) (6*4) (6*6) \\n'
    >>> mult_tasks("1234")
    '(1*1) (1*2) (1*3) (1*4) \\n(2*1) (2*2) (2*3) (2*4) \\n(3*1) (3*2) (3*3) (3*4) \\n(4*1) (4*2) (4*3) (4*4) \\n'
    """

    #Do not alter any code in this function
    result_tasks = ""
    for ch in str_numbers:
        result_tasks += mult_tasks_line(ch, str_numbers) + "\n"
    return result_tasks


if __name__ == "__main__":
    import doctest
    doctest.testmod(verbose = True)

我已经尝试过这样做:

def mult_tasks_line(first_num, str_numbers):
    digits=0
    for num in str_numbers:
        while digits<len(str_numbers):
            print "("+first_num+"*"+str_numbers[digits]+")",
            digits=digits+1

def mult_tasks(str_numbers):
    result_tasks = ""
    for ch in str_numbers:
        result_tasks += mult_tasks_line(ch, str_numbers),"\n"
    return result_tasks

这是我尝试过的,第一个函数非常接近,但它没有单引号。当运行 mult_tasks_line("4", "3469") 它出来了(4*3) (4*4) (4*6) (4*9)

但是第二个功能似乎完全错误。这是第二个函数的结果:

mult_tasks("246”)

(2*2) (2*4) (2*6) 

Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module> mult_tasks("246")
File "/Users/HuesFile/Downloads/Mastery Test/2.py", line 25, in mult_tasks
result_tasks += mult_tasks_line(ch, str_numbers),"\n" 
TypeError: cannot concatenate 'str' and 'tuple' objects
4

2 回答 2

0

据我了解,您想从一串数字字符中打印有序元组的矩阵,而分隔符

def mult_tasks_line(first_num, str_numbers):
    return ''.join(
        ['({n1}*{n2}) '.format(n1 = first_num, n2 = n2 ) for n2 in str_numbers])

def mult_tasks(str_numbers):
    result_tasks = ""
    for ch in str_numbers: 
        result_tasks += mult_tasks_line(ch, str_numbers) + "\n" 
    return result_tasks

然后

print mult_tasks("3469")

(3*3) (3*4) (3*6) (3*9) 
(4*3) (4*4) (4*6) (4*9) 
(6*3) (6*4) (6*6) (6*9) 
(9*3) (9*4) (9*6) (9*9) 

如预期的。结果可以缩放,因为它适用于任意字符串。

您希望计算乘法吗?

于 2015-05-12T09:10:30.827 回答
0

显然mult_tasks包含不正确的行

result_tasks += mult_tasks_line(ch, str_numbers),"\n"

result_tasks是一个字符串,在这里它与一个元组连接(它们由带或不带括号的逗号构成)mult_tasks_line(ch, str_numbers), "\n"导致异常。

您需要将此行修改为

result_tasks += mult_tasks_line(ch, str_numbers) + "\n"

您的代码中的另一个问题是它mult_tasks_line不返回值,而只是打印它。你想做这样的事情

def mult_tasks_line(first_num, str_numbers):
    result = []
    for ch in str_numbers:
        result.append('({}*{})'.format(first_num, ch))
    return ' '.join(result)
于 2015-05-12T09:13:09.513 回答