鱼C论坛

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

[已解决]python问题

[复制链接]
发表于 2022-3-2 10:08:45 | 显示全部楼层 |阅读模式
6鱼币
任务:请编写一个程序,将用户输入的字符串重新格式化,使得字母和数字相互分隔(即一个字母一个数字相互间隔)
reboot = input("输入:")
i = 0
j = 0
alpha = []
number = []
for each in reboot:
    if each.isalpha():
        i += 1
        alpha.append(each)
    elif each.isdigit():
        j += 1
        number.append(each)
l = 0
if i == j + 1:
    sort = alpha[0]
    for k in range(1,i):
        if l < j:
            sort = sort + number[l] + alpha[k]
            l += 1
    print("输出:", sort)
elif i == j - 1:
    sort = number[0]
    for k in range(1,j):
        if l < i:
            sort = sort + alpha[l] + number[k]
            l += 1
    print("输出:", sort)
elif i == j :
    sort = alpha[0]
    for k in range(1,i):
        if l < j :
           sort = sort + number[l] + alpha[k]
    print("输出:", sort)
else:
    print("输出:字符串中数字和字母的数量不满足重新格式化的条件")




s = input("请输入测试字符串:")
    
str09 = []
strAZ = []
    
# 将数字和字母进行归类存放
for each in s:
    if each.isdecimal():
        str09.append(each)
    else:
        strAZ.append(each)
    
len09 = len(str09)
lenAZ = len(strAZ)
    
# 如果两个容器的元素个数相差 1 个以上,则不满足重新格式化的条件
if abs(len09 - lenAZ) > 1:
    print("字符串中数字和字母的数量不满足重新格式化的条件。")
else:
    if len09 > lenAZ:
        shorter = strAZ
        longer = str09
    else:
        shorter = str09
        longer = strAZ
    
    result = []
    for i in range(len(shorter)):
        result.append(longer[i])
        result.append(shorter[i])
    
    # 由于 longer 是有可能等于 shorter 的,就不必执行下面这一步
    if len(longer) > len(shorter):
        result.append(longer[-1])
    
print("".join(result))



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

if i == j + 1:
    for k in range(1, i):
        if l < j:
            sort = sort + number[l] + alpha[k]
            l += 1
elif i == j - 1:
    sort = number[0]
    for k in range(1, j):
        if l < i:
            sort = sort + alpha[l] + number[k]
            l += 1
elif i == j:
    for k in range(1, i):
        if l < j:
            sort = sort + number[l] + alpha[k]
else:
    sort = "输出:字符串中数字和字母的数量不满足重新格式化的条件"

print(sort)

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

最佳答案

查看完整内容

逻辑上没啥问题,可以减少代码 时间复杂度和答案一样,不过我更偏好答案的风格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

if i == j + 1:
    for k in range(1, i):
        if l < j:
            sort = sort + number[l] + alpha[k]
            l += 1
elif i == j - 1:
    sort = number[0]
    for k in range(1, j):
        if l < i:
            sort = sort + alpha[l] + number[k]
            l += 1
elif i == j:
    for k in range(1, i):
        if l < j:
            sort = sort + number[l] + alpha[k]
else:
    sort = "输出:字符串中数字和字母的数量不满足重新格式化的条件"

print(sort)

时间复杂度和答案一样,不过我更偏好答案的风格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-2 11:06:26 | 显示全部楼层
求大佬检查!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

哦哦我知道了,答案有注释,看上去省力点
所以一眼看上去感觉答案好点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

好的谢谢 其他没啥bug就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 06:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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