Форум сайта python.su
Всем приветы. Помогите разобраться с чтением данных из файла, а конкретно чисел.
Цель задачи считать числа, занести их в массив, сделать арифметические операции и вывести одно число.
Мой быдлокодинг выглядит так
f = open("cars.in","r")
n=int(f.readline())
A=range(n)
B=range(n)
h=0
while h<n:
h=h+1
s=f.readline()
p=s.find(' ')
k=s[0:p]
g=int(k)
print s
A[h]=g #ошибка здесь. не получается преобразовать строку в два числа
k=int(s[p:])
B[h]=k
f.close()
min=99999999
for i in range(n-1):
for j in rane(i+1,n):
t=abs((A[i]-A[j])/(B[i]-B[j]))
if min>t : min=t
r=str(t)
output = open("cars.out","w")
output.write(r)
output.close
Офлайн
Мда, код действительно походит на что-то с чем-то:) Ну начнем разбирать.
Посмотрел внимательно код, вывод: книжек ты не читал.
f = open("cars.in","r")
n = int(f.readline())
A = [] #создаем пустой список
B = []
for h in xrange(n): #Цикл for - главный цикл в питоне, перебирает все элементы. Может использоваться везде
#или почти везде. 90% всех циклов (на вскидку) - циклы for
s = f.readline()
a,b = s.split(' ') # split - разбиение строки на список, параметр функции - граница между элементами
# "A,B = список" - так называемый "unpacking", распаковка списка в элементы A и B (возможна
# и обратная операция)
A.append(a) # добавление элемента в список
B.append(b)
# ну а по поводу подсчета результата мне нечего сказать.
Офлайн
Спасибо большое. да перешёл с дельфи -)
ну а книжки я читал, только наверно плохо
Офлайн
pheonixт.к. ТЗ не четкое, сделал так: берет по 2 строки из файла делит по формуле, выводит минимальное, строки берет только те где по 2 параметра. разбирайся ;)
т.е нужно считать данные, потом посчитать abs(12-2/20-21), но так как данных может быть много (около 100 строк) нужно посчитать каждое с каждым и вывести минимальное значение
r = []
a0 = b0 = 0
for i, x in enumerate( [x for x in [s.split() for s in open('file.txt','r').readlines() ] if len(x) == 2] ):
a,b = float(x[0]), float(x[1])
if i % 2: r.append( abs( a0 - a / b0 - b ) )
a0, b0 = a, b
print min(r)
Отредактировано (Апрель 4, 2010 16:27:04)
Офлайн
Как правильно записывать и считывать числа с плавающей точкой одинарной точности в двоичном файле? Подскажите, что не так в этом примере… В файл записывается неверное число. Для формата с двойной точносьтью всё работает корректно.
# -*- coding: CP1251 -*-
import struct
filename = '16_gslib_format.txt'
x = 12
y = 1111111114.333333
fmt = '=if'
num = struct.calcsize(fmt)
print num
fp = open(filename, 'wb')
fp.write(struct.pack(fmt, x, y))
fp.close()
fp = open(filename, 'rb')
(x,z) = struct.unpack(fmt, fp.read(num))
fp.close()
# print '%10i %10i %10i' % x, y, z
print ('%10i %20f' % (x, z))
Офлайн
karakurt2float в питоне реализован через сишный double, когда вы приводите его к сишному float - мантисса урезается. Попробуйте 11.11 - запишется нормально.
Как правильно записывать и считывать числа с плавающей точкой одинарной точности в двоичном файле? Подскажите, что не так в этом примере… В файл записывается неверное число. Для формата с двойной точносьтью всё работает корректно.
Офлайн