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

Python十进制转二进制文件读写脚本输出异常求助

搞定你的十进制转二进制脚本问题

嘿,我看了你的代码,问题其实出在一个很容易踩的Python语法坑上——除法操作符的选择,还有一些小细节需要调整,咱们一步步来:

核心问题:浮点除法搞砸了转换逻辑

你在decToBin函数里写的n = n / 2,在Python中这是浮点除法,哪怕两个整数相除,结果也会是浮点数。比如输入5的话,第一次循环后n变成2.5,接下来n % 2得到的是0.5,把这个转成字符串拼进去,自然会出现奇怪的内容;而且浮点数会一直除以2趋近于0但永远不会等于0,循环会无限执行(实际中因为浮点数精度问题会停,但结果肯定完全不对)。

修复方案

1. 换成整数除法

把n = n / 2改成n = n // 2,//是Python的整数除法,会直接舍去小数部分,完全符合十进制转二进制时"除以2取整"的逻辑。

2. 处理0的特殊情况

现在的函数如果传入0会返回空字符串,咱们加个判断,当n=0时直接返回"0",避免输出空内容。

3. 优化文件写入逻辑

你原来的写入代码没写完,要注意:如果每次循环都用open(..., 'w')打开文件,会覆盖之前的内容,应该用a(追加)模式;更高效的做法是在循环外同时打开输入和输出文件,减少IO操作。

修复后的完整代码

def decToBin(n):
    if n == 0:
        return "0"
    wynik = ""
    while n > 0:
        wynik = str(n % 2) + wynik
        n = n // 2  # 用整数除法替代浮点除法,关键修复点!
    return wynik

print("zamiana liczb z systemu dziesietnego na binarny")

# 同时打开输入和输出文件,避免重复打开关闭
with open('program.txt', 'r') as plik_wejsciowy, open('wyniki.txt', 'a') as plik_wyjsciowy:
    for line in plik_wejsciowy:
        # 去掉每行的换行符和多余空格,防止转换出错
        cleaned_line = line.strip()
        # 跳过空行
        if not cleaned_line:
            continue
        try:
            x = int(cleaned_line)
            bin_result = decToBin(x)
            plik_wyjsciowy.write(f"{bin_result}\n")
            print(f"Liczba {x} w systemie binarnym: {bin_result}")
        except ValueError:
            print(f"Uwaga: Linia '{cleaned_line}' nie jest poprawną liczbą dziesiętną!")

额外优化点说明

  • 加入了try-except块,处理文件中可能存在的非数字内容,避免脚本直接崩溃。
  • 用strip()清理每行的空白字符,防止因为换行符或空格导致整数转换失败。
  • 输出文件用追加模式,确保所有转换结果都能保留,不会被新内容覆盖。

内容的提问来源于stack exchange,提问作者Krystian Niżeniec

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:09:15