Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将一串数字读作单词,然后将每个单词打印为数字_Python - Fatal编程技术网

Python 将一串数字读作单词,然后将每个单词打印为数字

Python 将一串数字读作单词,然后将每个单词打印为数字,python,Python,我想弄清楚如何编写一个代码,将输入从0转换为任何正整数,输入0时返回字符串0,输入1时返回字符串10,输入2时返回字符串1110,输入3时返回字符串3110,依此类推,也就是说,当输入0出现时,输出为0,然后,当输入1时,它查看0的输入并将其读取为“一个零”并打印10,for 2将输入1读取为“一个一个零”并打印1110,依此类推。我知道该怎么做,但它太模糊了,无法翻译成代码。当我发布这篇文章时,我不知道它被调用了什么,但从那以后我发现它是look-and-see序列,我的问题是我不能使用迭代,

我想弄清楚如何编写一个代码,将输入从0转换为任何正整数,输入0时返回字符串0,输入1时返回字符串10,输入2时返回字符串1110,输入3时返回字符串3110,依此类推,也就是说,当输入0出现时,输出为0,然后,当输入1时,它查看0的输入并将其读取为“一个零”并打印10,for 2将输入1读取为“一个一个零”并打印1110,依此类推。我知道该怎么做,但它太模糊了,无法翻译成代码。当我发布这篇文章时,我不知道它被调用了什么,但从那以后我发现它是look-and-see序列,我的问题是我不能使用迭代,也不能使用内置的len()或string.append()函数。

如果你不能使用任何迭代,那么你需要使用递归,并在0处停止。它看起来像这样:

def whatever(input):
    """
    >>> whatever(0)
    '0'
    >>> whatever(1)
    '10'
    >>> whatever(2)
    '1110'
    >>> whatever(3)
    '3110'
    >>> whatever(4)
    '132110'
    >>> whatever(5)
    '1113122110'
    """
    def looksay(input, result):
        if not input:
            return result
        else:
            left, right = input[0], input[1:]
            if not result:
                result = '1' + left
            else:
                left_result, count, right_result = result[:-2], int(result[-2]), result[-1]
                if left == right_result:
                    result = left_result + str(count + 1) + right_result
                else:
                    result = result + '1' + left
            return looksay(right, result)
    def helper(number, result):
        if number == 0:
            return result
        else:
            return helper(number - 1, looksay(result, ''))
    return helper(input, '0')

if __name__ == '__main__':
    import doctest
    doctest.testmod()

好吧,我想我知道你打算在这里做什么了。下面是一个可能的解决方案:

import collections

def string(n):
    if n == 0:
        return '0'
    # We're going to count the digits in the previous number
    previous = string(n - 1)

    # This creates a dictionary with the number of occurences of each digit
    current = collections.Counter(previous)

    # Now format it as desired:
    return ''.join(['{}{}'.format(c, d)
                    for d, c in sorted(current.items(), reverse=True)])

print(string(4))
# prints 132110
@DSM,正确指出,下面有另一种解释,按顺序读出前面数字的数字。下面是一种方法:

def string(n):
    if n == 0:
        return '0'

    result = []
    # We're going to iterate over the previous number's digits.
    # The loop will transform '3110' to ['3', '11', '0'].
    for digit in string(n - 1):
        # If it's the first char, just add it to the list
        if not result:
            result.append(digit)
        # If the current digit is the same as the last one, add it to the 
        # last element of the list
        elif digit == result[-1][0]:
            result[-1] += digit
        # If it's a different digit, add it to the end of the list.
        else:
            result.append(digit)

    # Now format the resulting list and return it.
    return ''.join(['{}{}'.format(len(digits), digits[0])
                    for digits in result])

print(string(4))
# prints 132110

是的,这就是程序应该如何工作,如果输入4,那么“132110”应该是输出,而不是后者,它将是(0)给出“0”给出“0”给出“10”给出“1110”给出“3110”给出“3110”好的,但是你的4示例没有遵循我给你的模式。按照我的建议,4应该是'100',你可以翻译成'1-1,2-0',然后写'1120'。我强烈建议您使用单元测试编写代码(按照我为您绘制的模式),然后发布代码,以便其他人了解您的意图。这是一个“看”和“说”的序列,我最初的问题是,我不知道它有一个可用于将其分类的名称,另一个问题是我不能使用迭代,len(),或者.append()来编写这段代码。我将其解释为不同的“看一说”顺序,因此f(5)将是“1113122110”,而不是“13123110”——也就是说,您只需从左到右阅读f(4),然后说“一个一[后跟]一个三[后跟]一个二[后跟]两个一[后跟]一个零”。嗯,@DSM,这当然也是一种可能的解释。对于前四个例子,我们的解释似乎是相同的。问题是,这是他给出的唯一例子。如果我们把游戏分发出去:-),我的代码是def(n):如果n==0,则返回“0”。在itertools中,c和ger的连接((str(len(list(ger)))+c)。groupby(f(n-1))。这很好,嗯,我该怎么说呢,简短?;)
groupby
比我的乱七八糟要好得多。这是一个先看后说的序列,但对于这一部分,我不能使用迭代,也不能使用内置的len()函数,这就是我被难倒的原因,我应该把它放到问题中。维基百科上有一篇关于这个序列的文章-。