鱼C论坛

 找回密码
 立即注册
查看: 1537|回复: 4

[已解决]python问题

[复制链接]
发表于 2022-3-2 10:08:45 | 显示全部楼层 |阅读模式
6鱼币
任务:请编写一个程序,将用户输入的字符串重新格式化,使得字母和数字相互分隔(即一个字母一个数字相互间隔)

  1. reboot = input("输入:")
  2. i = 0
  3. j = 0
  4. alpha = []
  5. number = []
  6. for each in reboot:
  7.     if each.isalpha():
  8.         i += 1
  9.         alpha.append(each)
  10.     elif each.isdigit():
  11.         j += 1
  12.         number.append(each)
  13. l = 0
  14. if i == j + 1:
  15.     sort = alpha[0]
  16.     for k in range(1,i):
  17.         if l < j:
  18.             sort = sort + number[l] + alpha[k]
  19.             l += 1
  20.     print("输出:", sort)
  21. elif i == j - 1:
  22.     sort = number[0]
  23.     for k in range(1,j):
  24.         if l < i:
  25.             sort = sort + alpha[l] + number[k]
  26.             l += 1
  27.     print("输出:", sort)
  28. elif i == j :
  29.     sort = alpha[0]
  30.     for k in range(1,i):
  31.         if l < j :
  32.            sort = sort + number[l] + alpha[k]
  33.     print("输出:", sort)
  34. else:
  35.     print("输出:字符串中数字和字母的数量不满足重新格式化的条件")
复制代码





  1. s = input("请输入测试字符串:")
  2.    
  3. str09 = []
  4. strAZ = []
  5.    
  6. # 将数字和字母进行归类存放
  7. for each in s:
  8.     if each.isdecimal():
  9.         str09.append(each)
  10.     else:
  11.         strAZ.append(each)
  12.    
  13. len09 = len(str09)
  14. lenAZ = len(strAZ)
  15.    
  16. # 如果两个容器的元素个数相差 1 个以上,则不满足重新格式化的条件
  17. if abs(len09 - lenAZ) > 1:
  18.     print("字符串中数字和字母的数量不满足重新格式化的条件。")
  19. else:
  20.     if len09 > lenAZ:
  21.         shorter = strAZ
  22.         longer = str09
  23.     else:
  24.         shorter = str09
  25.         longer = strAZ
  26.    
  27.     result = []
  28.     for i in range(len(shorter)):
  29.         result.append(longer[i])
  30.         result.append(shorter[i])
  31.    
  32.     # 由于 longer 是有可能等于 shorter 的,就不必执行下面这一步
  33.     if len(longer) > len(shorter):
  34.         result.append(longer[-1])
  35.    
  36. print("".join(result))
复制代码




提问:
1.第一个代码是我自己写的,请问可以满足这个任务吗,是否会有bug?(我自己测试了几组没啥问题)
2.如果没有bug请问可以怎么优化?
3. 第二个代码是答案的,请问和我的相比哪个好些?
最佳答案
2022-3-2 10:08:46
逻辑上没啥问题,可以减少代码
  1. reboot = input("输入:")
  2. i = 0
  3. j = 0
  4. alpha = []
  5. number = []
  6. for each in reboot:  # 分组
  7.     if each.isalpha():
  8.         i += 1
  9.         alpha.append(each)
  10.     elif each.isdigit():
  11.         j += 1
  12.         number.append(each)
  13. l = 0
  14. sort = alpha[0]

  15. if i == j + 1:
  16.     for k in range(1, i):
  17.         if l < j:
  18.             sort = sort + number[l] + alpha[k]
  19.             l += 1
  20. elif i == j - 1:
  21.     sort = number[0]
  22.     for k in range(1, j):
  23.         if l < i:
  24.             sort = sort + alpha[l] + number[k]
  25.             l += 1
  26. elif i == j:
  27.     for k in range(1, i):
  28.         if l < j:
  29.             sort = sort + number[l] + alpha[k]
  30. else:
  31.     sort = "输出:字符串中数字和字母的数量不满足重新格式化的条件"

  32. print(sort)
复制代码


时间复杂度和答案一样,不过我更偏好答案的风格

最佳答案

查看完整内容

逻辑上没啥问题,可以减少代码 时间复杂度和答案一样,不过我更偏好答案的风格
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-2 10:08:46 | 显示全部楼层    本楼为最佳答案   
逻辑上没啥问题,可以减少代码
  1. reboot = input("输入:")
  2. i = 0
  3. j = 0
  4. alpha = []
  5. number = []
  6. for each in reboot:  # 分组
  7.     if each.isalpha():
  8.         i += 1
  9.         alpha.append(each)
  10.     elif each.isdigit():
  11.         j += 1
  12.         number.append(each)
  13. l = 0
  14. sort = alpha[0]

  15. if i == j + 1:
  16.     for k in range(1, i):
  17.         if l < j:
  18.             sort = sort + number[l] + alpha[k]
  19.             l += 1
  20. elif i == j - 1:
  21.     sort = number[0]
  22.     for k in range(1, j):
  23.         if l < i:
  24.             sort = sort + alpha[l] + number[k]
  25.             l += 1
  26. elif i == j:
  27.     for k in range(1, i):
  28.         if l < j:
  29.             sort = sort + number[l] + alpha[k]
  30. else:
  31.     sort = "输出:字符串中数字和字母的数量不满足重新格式化的条件"

  32. print(sort)
复制代码


时间复杂度和答案一样,不过我更偏好答案的风格
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-2 11:06:26 | 显示全部楼层
求大佬检查!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-2 11:18:23 | 显示全部楼层
大马强 发表于 2022-3-2 11:16
逻辑上没啥问题,可以减少代码

哦哦我知道了,答案有注释,看上去省力点
所以一眼看上去感觉答案好点
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-2 11:26:57 | 显示全部楼层

好的谢谢 其他没啥bug就行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 06:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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