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
相关产品推荐
相关产品推荐

