【问题标题】:Python dec to bin from file to filePython dec从文件到文件的bin
【发布时间】:2018-03-20 18:00:02
【问题描述】:

我在使用 python 脚本时遇到了一些问题。我不太擅长这种语言,因为我正在为我的朋友做点什么。

代码可以运行,但输出很奇怪。一些随机的东西,而不是二进制数。

代码如下:

def decToBin(n):
    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: # otwieramy plik do odczytu
    for line in plik:
        x=int(line)
        with open('wyniki.txt', 'w') as plik1:
            plik1.write(decToBin(x))
        plik1.close()
plik.close()

这里是脚本的链接: repl.it

/编辑 好的,想通了,下面是代码:

def decToBin(n):
wynik = ""
while n > 0:
    wynik = str(n % 2) + wynik
    n = int(n/2)
return wynik
plik1=open('wyniki.txt', 'w')
print("zamiana liczb z systemu dziesietnego na binarny")
with open('program.txt', 'r') as plik:  # otwieramy plik do odczytu
    for line in plik:
    x = int(line)
    plik1.write(decToBin(x)) 
    plik1.write("\n")  
plik1.close()

【问题讨论】:

  • 您能否将您的代码放入适当的代码块中?以这种方式阅读真的很难。附带说明一下,您应该删除 plik.close()plik1.close(),因为您的 with-statements 已经解决了这个问题。
  • 请将此代码重构为minimal reproducible example,它不需要读者拥有名为“program.txt”的文件,并且不会在其系统上创建新文件。像“我试过 print(decToBin(3)) 并希望得到 '111',但我得到了 [实际输出]”之类的东西会很好。
  • 你能举一个输入文件的例子吗?另外,输出中“随机事物”的示例?顺便说一句,代码的缩进是“关闭的”并且难以阅读,因为 python 语法依赖于缩进,它比其他语言(如 java)更重要。

标签: python binary decimal


【解决方案1】:

首先要做的事情:已经有一些东西可以精确地做你想做的事情,所以使用它是明智和有效的:

for char in text:
     bin(int(char))

我猜,您的代码中的问题是您使用的是 Python 3.x,其中整数之间的标准除法返回一个浮点数(截至 [https://www.python.org/dev/peps/pep-0238/][PEP-0238])。 以下是关于如何更改功能以使其工作的建议。您可以对照内置的 bin 函数对其进行检查:

def decToBin(n):
    wynik = ""
    while n > 0:
        wynik = str(n % 2) + wynik
        n = n // 2
    return wynik

【讨论】:

  • 好的,效果更好,但它现在只转换源文件中的最后一个数字
  • 尝试将 with open('wyniki.txt', 'w') as plik1: 更改为 with open('wyniki.txt', 'a') as plik1: 。我还稍微编辑了我之前的回复,即我只是将int(n / 2) 更改为n // 2
【解决方案2】:

这里有一个文本示例的方法——Python 不会像 Java/C 那样将字符转换为整数。相反,您将获得序数值,然后将其转换为二进制数

def to_bin(c):
    bin_rep = bin(ord(c))
    print bin_rep   # for testing
    return bin_rep  # can be written to a file here or not...

text = "Hello there"
for each_char in text:
    to_bin(each_char)

我认为这种方法值得尝试使用输入文件的样本,然后将其重构为文件 r/w。

要对文件执行此操作,请尝试以下操作:

write_str = ""
with open('program.txt', 'r') as plik: # otwieramy plik do odczytu
    for line in plik:
        for each_char in line:
            write_str += str(to_bin(each_char))
with open('wyniki.txt', 'w') as plik1:
    plik1.write(write_str)
    plik1.close()
plik.close()

如果你想颠倒字节的顺序,整个文件可以颠倒或改变 write_str += str(to_bin(each_char)) 到 write_str = str(to_bin(each_char)) + write_str

【讨论】:

  • 好的,但是我需要通过算法来解决这个问题,比如使用 while 什么的,这就是问题
  • 查看修改后的答案 - 使用嵌套的 for 循环。您可以选择写入文件,但我认为最好(出于多种原因)在最后写入 - 否则会大大减慢程序速度
猜你喜欢
  • 2020-09-07
  • 2017-04-06
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 2022-12-23
  • 2018-09-15
  • 2021-02-19
相关资源
最近更新 更多