2015-05-22 2 views
-50

Мне нужна программа на Python, которая читала бы из файла и несколько каждого числа сама по себе, как в x^2.Как умножить один и тот же номер? (x^2)

Например (цифры могут меняться), то список будет:

5 
6 
8 
3 
5 
9 

Программа должна заменить цифры в том же файле, их квадратов. Результат должен выглядеть следующим образом:

25 
36 
64 
9 
25 
81 

Вот что я до сих пор

import math 

info = open("info.txt", "r") 

for el in info: 
    info.readline() 
    info.write(pow(info) + "\n") 
info.close() 

Я не уверен, что делать здесь, так как пау необходимы два элемента, чтобы работать, и я понятия не имею, как это сделать. Любая помощь или советы?

+18

Как 'x^y' умножить число само по себе? Разве это не будет 'x^2'? – mgilson

+6

Или, проще говоря, 'x * x' – kindall

+10

Вы неправильно используете' readline() 'и' pow() ', и вы не используете файл IO правильно. Вернитесь к учебнику. – TigerhawkT3

ответ

13

Несколько вещей, которые я заметил с вашим кодом. Вы не можете писать в файл, когда вы открываете его с разрешениями на чтение (это то, что означает «r» в качестве второго аргумента), поэтому вам нужно закрыть его и снова открыть с правами на запись («w»). Во-вторых, у python есть встроенный оператор питания (**), поэтому нет необходимости в математическом импорте. Я использовал список для добавления ответов и использования одного и того же списка для записи чисел в один и тот же файл.

info = open("test.txt", "r") 
lines = info.readlines() 

numbers = [] 
for l in lines: 
    num = int(l) 
    numbers.append(str(num**2)) 
info.close() 

info = open("test.txt", "w") 
info.write("\n".join(numbers)) 
info.close() 

Это good practice to use with open потому что он автоматически закрывает файл, когда блок завершается. Также я использовал понимание списка, чтобы сократить цикл for. Мой способ сделать это будет:

numbers = [] 
with open("input.txt", "r") as info: 
    lines = info.readlines() 
    numbers = [str(int(num)**2) for num in lines] 

with open("output.txt", "w") as info: 
    info.write("\n".join(numbers))