Monica_MTF 2023-02-07 21:05 采纳率: 73.9%
浏览 33
已结题

Python排序数字返回紧凑形式的字符串

Python#389
函数main()接收一个包含若干自然数的列表,要求对其中的自然数升序排序,然后返回紧凑形式的字符串。
例如,main([5,6,7,8,9,14,13,12,11,23,29,30,39])返回'5-9,11-14,23,29-30,39',
也就是把连续的自然数组合到一起使用减号连接,单个不连续的自然数独立显示,每组之间使用半角逗号分隔。
考点:选择结构与循环结构,排序
我咋感觉要用到排序算法啊……
排序的话有一个sorted()函数排序,但是这个是对字典用的.

def main(numbers):
    #return numbers
    ans=[]
    list.sort(numbers)
    for i in numbers:
        if numbers[i+1]-numbers[i]==1:
            ans.append(i)
            return min(ans)+'-'+max(ans)
        else:
            return i
'''
答题错误!您的代码执行结果为:
Traceback (most recent call last):
  File xxx.py, line 13, in <module>
    print(main([5, 6, 7, 8, 9, 14, 13, 12, 11, 23, 29, 30, 39]))
  File xxx.py, line 8, in main
    return min(ans)+'-'+max(ans)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
'''
  • 写回答

2条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2023-02-07 22:17
    关注
    def main(numbers):
        new = sorted(i for i in numbers if i > 0)
        result = []
        n = len(new)
        start = new[0]
        for i in range(n):
            if i == n-1 or new[i+1]-new[i] > 1:
                if new[i] == start:
                    result.append(str(start))
                else:
                    result.append(str(start)+'-'+str(new[i]))
                if i < n-1: start = new[i+1]
        return ",".join(result)
    
    nums = [5,6,7,8,9,14,13,12,11,23,29,30,39]
    print(main(nums))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月16日
  • 已采纳回答 2月8日
  • 创建了问题 2月7日

悬赏问题

  • ¥50 adb连接不到手机是怎么回事?
  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头
  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目