针对HJ30的字符串合并处理,代码未见异常,辛苦协助看下什么问题呢?

针对问题:HJ30 字符串合并处理

image.png

我写的代码:



input_str = input()

def convert(hex_v):
  int_v = int(hex_v, 16)
  bin_v = bin(int_v) # 0b1010

  reversed_bin_v = bin_v[::-1]

  striped_reversed_bin_v = reversed_bin_v[0:len(reversed_bin_v)-2]

  reversed_int_v = int(striped_reversed_bin_v, 2)

  reversed_hex_v = hex(reversed_int_v)

  return reversed_hex_v[2:].upper()

replaced_str = input_str.replace(' ', '')

def sort_oddeven(list):

  odd_list = []
  even_list = [] 
  
  for i in range(len(list)):
    if i % 2 == 0:
      even_list.append(list[i])
    else: 
      odd_list.append(list[i])
  
  even_list.sort()
  odd_list.sort() 

  result = [None for _ in list] 

  for i in range(len(list)):
    if i % 2 == 0:
      result[i] = even_list.pop(0)
    else: 
      result[i] = odd_list.pop(0)
  
  return result 

sorted_str = sort_oddeven(list(replaced_str))

for ch in sorted_str:
  #print("ch:", ch)
  print(convert(ch), end='')

对于第一个示例验证成功:

image.png

但是第二个示例验证失败:
image.png

我的实际输入输出:
image.png

辛苦大佬看下是什么原因导致的呢?一直没有看到有什么异常。

阅读 609
1 个回答

这个题目是 AI 在我的指导下做出来的,和你的格式不一样,你的格式需要提供给评分程序运行,我的为了方便单元测试运行,但是相信你简单修改应该可以用。

# 十六进制字符翻转操作函数
def convert(hex_v):
    try:
        # 将字符转为十六进制对应的整数
        int_v = int(hex_v, 16)
        # 转为4位二进制字符串(不足补零)
        bin_v = bin(int_v)[2:].zfill(4)
        # 翻转二进制字符串
        reversed_bin_v = bin_v[::-1]
        # 翻转后的二进制转回整数
        reversed_int_v = int(reversed_bin_v, 2)
        # 整数转为大写十六进制字符串
        reversed_hex_v = hex(reversed_int_v)[2:].upper()
        return reversed_hex_v
    except ValueError:
        # 如果不是合法的十六进制字符,原样返回
        return hex_v

# 奇偶位分离并排序函数
def sort_oddeven(lst):
    odd_list = []  # 存放奇数位字符
    even_list = []  # 存放偶数位字符
    # 分离奇偶位(0为偶数位,1为奇数位)
    for i in range(len(lst)):
        if i % 2 == 0:
            even_list.append(lst[i])  # 偶数位
        else:
            odd_list.append(lst[i])   # 奇数位
    # 分别对偶数位和奇数位排序
    even_list.sort()
    odd_list.sort()
    # 交替合并排序后的奇偶位字符
    result = []
    even_idx = 0  # 偶数位索引
    odd_idx = 0   # 奇数位索引
    for i in range(len(lst)):
        if i % 2 == 0:
            result.append(even_list[even_idx])
            even_idx += 1
        else:
            result.append(odd_list[odd_idx])
            odd_idx += 1
    return result

# 主处理流程函数
def process_input(input_str):
    replaced_str = input_str.replace(' ', '')  # 去除所有空格
    sorted_str = sort_oddeven(list(replaced_str))  # 奇偶位分离排序
    # 对每个字符执行翻转操作并拼接结果
    return ''.join(convert(ch) for ch in sorted_str)

# 程序主入口
def main():
    input_str = input()  # 读取输入
    print(process_input(input_str), end='')  # 输出结果

if __name__ == "__main__":
    main()

以下是 unit test 代码

import pytest
from hex_binary_transform_oddeven_sort import process_input

def test_example_1():
    # 输入: ab CD, 输出: 3B5D
    assert process_input('ab CD') == '3B5D'

def test_example_2():
    # 输入: 123 15, 输出: 88C4A
    assert process_input('123 15') == '88C4A'

运行结果

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题