鱼C论坛

 找回密码
 立即注册
查看: 1536|回复: 10

[已解决]新版PYTHON第32课最后一道大题,求解!

[复制链接]
发表于 2023-4-18 22:26:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

words = input('请输入待解压字符串:')
decompact = ''
mix = ''

for i in range(len(words)-1,0,-1):
    if words[i].isalpha():
        if i == len(words) -1:
            decompact = ''.join([decompact,words[i]])
        elif words[i+1].isdecimal():
            continue
        elif words[i+1].isalpha():
            decompact = ''.join([decompact,words[i]])
    else:
        for J in range(int(words[i])):
            mix = ''.join([mix,words[i-1]])
        decompact = ''.join([decompact,mix])
        mix = ''
        
decompact = decompact[::-1]
print('解压后的字符串:{}'.format(decompact))

代码如上,为何我输入FFI4SSHC6,得到的结果是FIIIISSHCCCCCC,少了一个F呢??
最佳答案
2023-4-18 22:28:44
本帖最后由 sfqxx 于 2023-4-18 22:31 编辑

在解压字符串的循环中,由于计数是从字符串最后一个字符开始的,导致对于第一个字母需要单独处理。所以对于输入的字符串FFI4SSHC6,需要在循环外先将第一个字符加入到解压后的字符串中

修改代码如下:


  1. words = input('请输入待解压字符串:')
  2. decompact = words[0] # 添加第一个字符
  3. mix = ''
  4. for i in range(len(words)-1,0,-1):
  5.     if words[i].isalpha():
  6.         if i == len(words) -1:
  7.             decompact = ''.join([decompact,words[i]])
  8.         elif words[i+1].isdecimal():
  9.             continue
  10.         elif words[i+1].isalpha():
  11.             decompact = ''.join([decompact,words[i]])
  12.     else:
  13.         for J in range(int(words[i])):
  14.             mix = ''.join([mix,words[i-1]])
  15.         decompact = ''.join([decompact,mix])
  16.         mix = ''
  17.         
  18. decompact = decompact[::-1]
  19. print('解压后的字符串:{}'.format(decompact))
复制代码


输出结果为:`FFIIIISSHCCCCCC`,和预期结果相同,不再少了字母 F。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-18 22:28:44 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +3 鱼币

本帖最后由 sfqxx 于 2023-4-18 22:31 编辑

在解压字符串的循环中,由于计数是从字符串最后一个字符开始的,导致对于第一个字母需要单独处理。所以对于输入的字符串FFI4SSHC6,需要在循环外先将第一个字符加入到解压后的字符串中

修改代码如下:


  1. words = input('请输入待解压字符串:')
  2. decompact = words[0] # 添加第一个字符
  3. mix = ''
  4. for i in range(len(words)-1,0,-1):
  5.     if words[i].isalpha():
  6.         if i == len(words) -1:
  7.             decompact = ''.join([decompact,words[i]])
  8.         elif words[i+1].isdecimal():
  9.             continue
  10.         elif words[i+1].isalpha():
  11.             decompact = ''.join([decompact,words[i]])
  12.     else:
  13.         for J in range(int(words[i])):
  14.             mix = ''.join([mix,words[i-1]])
  15.         decompact = ''.join([decompact,mix])
  16.         mix = ''
  17.         
  18. decompact = decompact[::-1]
  19. print('解压后的字符串:{}'.format(decompact))
复制代码


输出结果为:`FFIIIISSHCCCCCC`,和预期结果相同,不再少了字母 F。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-18 22:35:08 | 显示全部楼层

回帖奖励 +3 鱼币

你好!你在处理第一个字母时遇到了问题。在当前的代码中,你并没有处理到字符串的第一个字符(索引为0的字符),因此在处理过程中丢失了一个 'F'。

为了修复这个问题,你可以将循环的范围从 1 开始,即将 range(len(words)-1, 0, -1) 改为 range(len(words)-1, -1, -1)。

以下是修改后的代码:

  1. words = input('请输入待解压字符串:')
  2. decompact = ''
  3. mix = ''

  4. for i in range(len(words)-1, -1, -1):
  5.     if words[i].isalpha():
  6.         if i == len(words) -1:
  7.             decompact = ''.join([decompact, words[i]])
  8.         elif words[i+1].isdecimal():
  9.             continue
  10.         elif words[i+1].isalpha():
  11.             decompact = ''.join([decompact, words[i]])
  12.     else:
  13.         for J in range(int(words[i])):
  14.             mix = ''.join([mix, words[i-1]])
  15.         decompact = ''.join([decompact, mix])
  16.         mix = ''
  17.         
  18. decompact = decompact[::-1]
  19. print('解压后的字符串:{}'.format(decompact))
复制代码


现在,当你输入 "FFI4SSHC6" 时,输出结果将是 "FFIIIISSHCCCCCC"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-18 22:43:28 | 显示全部楼层
sfqxx 发表于 2023-4-18 22:28
在解压字符串的循环中,由于计数是从字符串最后一个字符开始的,导致对于第一个字母需要单独处理。所以对于 ...

我把你的代码跑了一遍,结果是FIIIISSHCCCCCCF。
应该在最后循环结束后,加一行:decompact = ''.join([decompact,words[0]])  
忘记range()是左闭右开了,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-18 22:46:42 | 显示全部楼层
不吃辣的雾都人 发表于 2023-4-18 22:43
我把你的代码跑了一遍,结果是FIIIISSHCCCCCCF。
应该在最后循环结束后,加一行:decompact = ''.join([ ...


我的答案没有问题呀,为什么不给我最佳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-18 23:43:04 | 显示全部楼层
isdkz 发表于 2023-4-18 22:46
我的答案没有问题呀,为什么不给我最佳

他先回复,就他最佳啦。也很感谢你的帮助,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-18 23:45:35 | 显示全部楼层
不吃辣的雾都人 发表于 2023-4-18 23:43
他先回复,就他最佳啦。也很感谢你的帮助,谢谢大佬

懂了,下次我不测试直接回复,看谁的gpt快
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-19 10:31:58 | 显示全部楼层
isdkz 发表于 2023-4-18 23:45
懂了,下次我不测试直接回复,看谁的gpt快

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-19 11:03:29 | 显示全部楼层

回帖奖励 +3 鱼币

渔币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-20 09:05:44 | 显示全部楼层

回帖奖励 +3 鱼币

膜拜大佬们
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-30 12:13:39 | 显示全部楼层
isdkz 发表于 2023-4-18 23:45
懂了,下次我不测试直接回复,看谁的gpt快

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-3 09:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表