You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现任意输入数字的自适应右对齐输出?

实现任意输入数字的动态右对齐输出

你当前的问题在于用了固定宽度的格式化({:>10}),没法根据输入数字的实际长度动态调整对齐宽度。要适配任意输入,核心是先算出输入中最长数字的位数,再用这个长度作为统一的右对齐宽度。

解决方案步骤:

  • 提取输入中的所有数字,计算每个数字的字符串长度,找到最大值(即最长数字的位数)
  • 保留你原有的数字降序排序逻辑
  • 用动态宽度的格式化语句输出每个数字

修正后的代码

如果输入是纯数字(无需保留前导零等格式),可以直接转成数字处理:

# 处理输入并转为数字列表
nums = list(map(int, input().split()))
# 按数字值降序排序
sorted_nums = sorted(nums, reverse=True)
# 计算最长数字的位数
max_width = len(str(max(nums)))
# 动态宽度右对齐输出
for num in sorted_nums:
    print(f"{num:>{max_width}}")

如果需要保留输入的原始字符串格式(比如带前导零的数字),可以直接操作字符串:

n = input().split()
# 按数字值降序排序字符串列表
m = sorted(n, key=int, reverse=True)
# 计算最长字符串的长度
max_width = max(len(s) for s in n)
# 动态宽度右对齐输出
for s in m:
    print(f"{s:>{max_width}}")

测试示例输入

输入:8 11 12 123 45678
输出:

45678
  123
   12
   11
    8

为什么你之前的尝试没生效?

你试过的print("{:>len(i)}".format(i))写法有误——格式字符串里的宽度参数不能直接嵌入len(i)这类表达式,必须把宽度作为参数传入格式化函数,或者用f-string直接嵌入变量,就像上面代码中的写法。

内容的提问来源于stack exchange,提问作者ChioStar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:20:31