Python中随机生成的二进制数组如何转换为十进制?
报错原因
报错ValueError: invalid literal for int() with base 2: ' '的核心原因是你做字符串替换后得到的new5末尾存在多余空格,base为2的int()转换只允许输入内容包含0和1,空格属于非法字符,因此触发报错。
另外你的现有逻辑也不符合需求:你要把矩阵中每一行对应一个二进制数分别转十进制,但你现在把所有二进制数用空格拼接成了一个字符串,直接转换也得不到每个二进制数对应的十进制结果。
修复方案
直接遍历矩阵的每一行,把每行的数字拼接成二进制字符串再转换即可,完全不需要用JSON序列化加多次替换的冗余逻辑,修复后代码如下:
import random binarios = int(input('请输入要生成的二进制数个数:')) digitos = int(input('请输入每个二进制数的位数:')) # 生成二进制矩阵 matriz = [[random.randint(0, 1) for _ in range(digitos)] for _ in range(binarios)] print("生成的二进制矩阵:", matriz) # 逐行转换为十进制 decimal_list = [] for row in matriz: # 把行内的数字转成字符串拼接成二进制串 bin_str = ''.join(str(bit) for bit in row) decimal_num = int(bin_str, 2) decimal_list.append(decimal_num) print(f"二进制串 {bin_str} 对应的十进制数为:{decimal_num}")
如果你确实需要把所有二进制位拼接成一个大的二进制数再转十进制,也可以直接拼接所有位,不需要插入空格:
# 拼接所有二进制位为一个大串转十进制 full_bin_str = ''.join(str(bit) for row in matriz for bit in row) full_decimal = int(full_bin_str, 2) print(f"所有二进制位拼接后的大串对应的十进制数为:{full_decimal}")
内容的提问来源于stack exchange,提问作者Joss
相关产品推荐
相关产品推荐

