如何自定义实现用户输入矩阵并转换为二维列表
自定义矩阵输入转二维列表的实现与问题修复
原代码的问题分析
你的代码存在两个核心问题:
- 仅能处理单个字符的数字,遇到多位数(如
10、-5)时会将其拆分为多个单独数字,导致结果错误 - 没有处理输入末尾可能存在的空行(比如输入最后一个
;会触发一次空行添加)
修正方案1:保留逐字符遍历逻辑(贴合你的原始写法)
修改逐字符遍历的逻辑,收集连续的数字字符(包括负号),直到遇到分隔符(空格或;),再将收集到的字符转为整数:
user_input = input("Enter a numerical sequence: ") index_counter = 0 matrix = [] str_len = len(user_input) while index_counter < str_len: row = [] while index_counter < str_len and user_input[index_counter] != ";": # 跳过空格 if user_input[index_counter] == " ": index_counter += 1 continue # 收集连续的数字字符(支持负号) num_str = "" # 先判断是否是负号 if user_input[index_counter] == "-": num_str += "-" index_counter += 1 # 收集后续的数字字符 while index_counter < str_len and user_input[index_counter].isdigit(): num_str += user_input[index_counter] index_counter += 1 # 将收集到的数字字符串转为整数,加入行列表 if num_str: # 避免空字符串(比如连续空格的情况) row.append(int(num_str)) # 跳过当前的分号 if index_counter < str_len: index_counter += 1 # 仅当行不为空时添加到矩阵(避免最后一个分号产生空行) if row: matrix.append(row) print(matrix)
测试示例
输入:1 2 3;-4 56 7;89 10 -11;
输出:[[1, 2, 3], [-4, 56, 7], [89, 10, -11]]
修正方案2:使用字符串分割简化逻辑(更高效易读)
如果不想用逐字符遍历,也可以通过字符串分割的方式实现,逻辑更清晰:
user_input = input("Enter a numerical sequence: ") # 按分号分割行,过滤空行 rows_str = [row for row in user_input.split(";") if row.strip()] matrix = [] for row_str in rows_str: # 按空格分割每个数字,过滤空字符串(处理连续空格) nums_str = [num for num in row_str.split(" ") if num.strip()] # 转换为整数列表 row = [int(num) for num in nums_str] matrix.append(row) print(matrix)
测试示例
输入:1 2 3;45 67 89;
输出:[[1, 2, 3], [45, 67, 89]]
内容的提问来源于stack exchange,提问作者Samurai
相关产品推荐
相关产品推荐

