String 解压缩压缩字符串

String 解压缩压缩字符串,string,python-3.x,compression,String,Python 3.x,Compression,我的问题是,我不知道现在该去哪里使用代码,我必须创建一个解压缩代码。我得到错误(TypeError:不能将序列与'str'类型的非int相乘),并假设它是,因为我没有正确地将字符串相乘。另外,我不能使用列表,只能对这个赋值进行字符串操作 作为一个例子,假设输出如下->cat2dog1qwerty3->CATDOGQWERTYQWERTYQWERTY 功能: def decompress(compressed_in): new_word = True char_holder = "" decomp

我的问题是,我不知道现在该去哪里使用代码,我必须创建一个解压缩代码。我得到错误(TypeError:不能将序列与'str'类型的非int相乘),并假设它是,因为我没有正确地将字符串相乘。另外,我不能使用列表,只能对这个赋值进行字符串操作

作为一个例子,假设输出如下->cat2dog1qwerty3->CATDOGQWERTYQWERTYQWERTY

功能:

def decompress(compressed_in):
new_word = True
char_holder = ""
decompressed_out = ""
for char in compressed_in:
    if char.isalpha and new_word:
        char_holder += char
        new_word = False
    elif char.isalnum:
        decompressed_out += char * char_holder
        new_word = True
return decompressed_out
主要内容:


因为这显然是一个家庭作业,我不会给你代码,但这里有几个问题,我看到你的介绍

  • 缩进。这可能是复制和粘贴的产物,但是
    def
    后面的每一行都应该缩进

  • 不调用函数。当您编写
    char.isalpha
    时,这可能不是您想要的
    .isalpha()
    是一个函数,所以需要用括号调用它,比如
    char.isalpha()

  • isalnum()
    可能不是您想要的函数。它检查某个东西是字母还是数字,但您已经检查了字母,因此您可能需要检查某个东西是否是数字的函数。这并不是绝对必要的,因为另一个
    if
    条件仍然会首先触发,但这是您可能会被扣分的

  • 您永远不会清除
    char\u holder
    。看起来你是有意的,因为你有一个布尔
    新词
    ,你一直在跟踪,但你没有正确地使用它。在某些时候,你应该做的是
    char\u holder=char
    (即不是
    +=
    )。我会让你决定把逻辑放在哪里

  • 最后,为了你所犯的错误。你没有正确地将事物相乘,这是正确的。想想乘法语句中的类型是什么,变量会有什么值。例如,在第一次传递中,
    char\u holder
    将等于
    'cat'
    ,而
    char
    将等于
    '3'
    。尝试在Python解释器中键入
    '3'*'cat'
    ,看看会发生什么。从这里可以明显看出,您需要做什么来修复此问题


  • 嗯,我修正了一些问题,得到了一个空白的答案,这比一个错误要好。我也完全删除了这个新单词,因为我觉得我不需要它。我只想告诉你,你还没有真正调用
    isalpha()
    。通过在它后面不包含括号,您基本上只是询问Python它是否存在,这总是正确的。因此,您的
    elif
    分支永远不会发生。另外,语句
    int(char)
    本身没有任何作用。你必须把结果分配给某个变量。对了,我修复了这两个错误并使代码正常工作。谢谢你的帮助。我只是想知道,我该如何编辑代码,使其与2位数字或更像CAT22DOG14的数字一起工作就像您有一个名为
    char\u holder
    的临时变量一样,您可以创建一个名为
    num\u holder
    的类似变量,或者临时保存您的数字,每次遇到后续数字时,用它展开
    num\u holder
    。这就需要更多的逻辑来知道你什么时候看完了数字(即,当你再次看到字母时),也可能需要一些逻辑来处理字符串末尾出现的数字(后面没有任何字母)。好吧,我试着这么做是为了好玩,我真的不知道如何在char停止的第一个_循环中开始第二个循环。我试过使用len,但可能也做得不对。我用红漆在代码中添加了这些东西,现在使用num_holder
    # Import
    from compress import decompress
    
    # Inputs
    compressed_in = str(input("Enter a compressed string: "))  # compressed
    
    # Outputs
    decompressed_out = decompress(compressed_in)
    print(decompressed_out)