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

如何编写支持0-9、大小写字母输入、非法输入报错及规则排序的程序

问题分析

现有代码存在几个核心缺陷:

  • 没有输入合法性校验,也没有限制单字符输入
  • 不支持非法输入后的重试逻辑
  • 默认的sorted排序规则不符合「数字>大写字母>小写字母」的优先级要求
  • 没有在每次输入合法后实时展示排序后的结果

完整实现代码

# 程序功能:模拟接收端乱序接收数据包后按规则重组逻辑
# 需求说明:
# 1. 仅接受0-9数字、A-Z大写字母、a-z小写字母三类单字符输入
# 2. 非法输入提示重试,累计收集至少10个合法输入
# 3. 每次合法输入后,按「数字优先、大写次之、小写最后」的规则排序展示所有已输入内容
# 场景对应:乱序收到的数据包按规则重排,对应TCP/IP协议栈的报文重组逻辑

# 初始化存储合法输入的列表
valid_chars = []
# 定义最少需要收集的合法输入数量
MIN_REQUIRED = 10

print("输入规则:每次仅可输入1个字符,仅支持0-9数字、A-Z大写字母、a-z小写字母")

# 循环收集输入,直到达到最少要求数量
while len(valid_chars) < MIN_REQUIRED:
    # 计算当前是第几次有效输入请求
    input_count = len(valid_chars) + 1
    current_input = input(f"请输入第 {input_count} 个字符:")
    
    # 输入合法性校验
    # 校验1:输入长度必须为1
    if len(current_input) != 1:
        print("输入错误:每次仅允许输入1个字符,请重试")
        continue
    # 校验2:字符必须是数字/大写字母/小写字母
    if not (current_input.isdigit() or current_input.isupper() or current_input.islower()):
        print("输入错误:仅支持输入0-9数字、A-Z大写字母、a-z小写字母,请重试")
        continue
    
    # 校验通过,加入合法输入列表
    valid_chars.append(current_input)
    
    # 按规则排序:数字优先级0,大写字母优先级1,小写字母优先级2,同类型按字符自然顺序排序
    sorted_chars = sorted(valid_chars, key=lambda c: (0 if c.isdigit() else 1 if c.isupper() else 2, c))
    
    # 输出当前排序后的所有内容
    print(f"第 {input_count} 次输入合法,当前已输入内容按规则排序后为:{''.join(sorted_chars)}")

# 收集完成后,支持用户继续输入额外内容(满足10个以上的要求)
while True:
    extra_confirm = input("已收集到10个合法输入,是否需要继续输入?(y/n):").strip().lower()
    if extra_confirm == 'n':
        break
    if extra_confirm != 'y':
        print("输入无效,请输入y或n")
        continue
    # 继续收集额外输入
    extra_input = input(f"请输入第 {len(valid_chars)+1} 个字符:")
    if len(extra_input) != 1:
        print("输入错误:每次仅允许输入1个字符,请重试")
        continue
    if not (extra_input.isdigit() or extra_input.isupper() or extra_input.islower()):
        print("输入错误:仅支持输入0-9数字、A-Z大写字母、a-z小写字母,请重试")
        continue
    valid_chars.append(extra_input)
    sorted_chars = sorted(valid_chars, key=lambda c: (0 if c.isdigit() else 1 if c.isupper() else 2, c))
    print(f"第 {len(valid_chars)} 次输入合法,当前已输入内容按规则排序后为:{''.join(sorted_chars)}")

# 最终输出全部排序后的结果
final_sorted = sorted(valid_chars, key=lambda c: (0 if c.isdigit() else 1 if c.isupper() else 2, c))
print(f"所有输入收集完成,最终排序结果为:{''.join(final_sorted)}")

核心实现说明

  • 非法输入处理:通过两层校验判断输入是否符合要求,不符合时直接提示重试,不会占用有效输入计数,满足「非法输入不被接受、提示重试」的需求
  • 自定义排序规则:通过给不同类型字符分配优先级权重,实现要求的排序顺序,避免默认sorted把大写字母排在数字前面的问题
  • 实时排序展示:每次合法输入后立刻重新排序所有已收集的字符并输出,完全模拟接收端收到乱序数据包后实时重组排序的过程
  • 可扩展输入:满足最少10个合法输入的要求后,支持用户选择继续输入更多内容,符合「10个及以上合法输入」的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:57:02