[]

python, listedeki degerleri numaralandirma

bi dosya var, dosya icinde sayilar var, o listedeki 1. sayi ile 2.sayiyi, 2. sayi ile 3.sayiyi toplayip, 3. ile 4. toplayip ... cikan degerleri baska bi doyaya yazmak istiyorum. dosyadaki degerleri okuyabilmeyi anladim da bi turlu o loop'u yazmaya basaramadim, kolaydir bence bilene de, bi el atin lutfen.

tesekkur.

f=open("hop.txt","r")

num=f.readlines()

for i in range(lfor i in range(len(num)):

gibi seyler yapiyorum da olmuyor.

dosyanin icerigi de
1
2
3
4
5
olsun.

 
f=open("numbers.txt","r");
numbers=f.readlines();
resultList=[]
for i in range(1,len(numbers)):
-----resultList.append(int(numbers[i-1])+int(numbers+[i]));

buna benzer birşey olması lazım
  • milistroke  (03.09.12 13:31:36 ~ 13:46:01) 
selam.

ne yaptiginizi anladim. python bilmiyorum dediniz diye soyleme geregi hissetim, belki biliyorsunuz da python saymaya sifirdan basliyor. ben de bi seyler degistirdim, ettim de olmadi maalesef, "IndexError: list assignment index out of range" diyor, sanirim sinirlarla/saymayla ilgili sorun da onu da cozemedim maalesef. benim denedigim hali de su sekilde:


f=open("hop.txt","r")
numbers=f.readlines()
resultList=[]
for i in range(0,(len(numbers)-2)):
resultList[i]=float(numbers[i])+float(numbers[i+1])
print resultList()


-o da 5 sayi varya, len deyince 5 sayi oldugunu buluyor. iki cikardik, 3.
bize de 0, 1, 2, 3 kaliyo loop icin. ki zaten 5 deger oldugu icin 4 degerimiz olmasi lazim da olmadi maalesef.
  • c non  (03.09.12 14:24:16 ~ 14:25:08) 
selamlar,
ben kodu güncelledim bir de ona bakın.

  • milistroke  (03.09.12 14:26:46) 
maalesef olmadi o da: "ValueError: invalid literal for int() with base 10: '1.0\n'"


bi de son satirda yazdiginiz son satirda "int(numbers+[i]"da bi hata var mi?
  • c non  (03.09.12 15:11:36) 
dosyanın içinde sayı dışında birşey varsa onu integer'a cast ederken hata veriyor olabilir. gelen değerler için kontrol yapmak gerekir o zaman da:

for i in range(1,len(numbers)):
-----if math.isnan(numbers[i-1])==0 and math.isnan(numbers[i])==0:
-----------resultList.append(int(numbers[i-1])+int(numbers+[i]));

bu arada sayılar eğer küsüratlıysa int yerine float yazın.
  • milistroke  (03.09.12 15:22:59 ~ 15:25:00) 
-"name 'math' is not defined"

bi de: "&&" "math" ve "isnan" nedir?
  • c non  (03.09.12 15:30:36) 
&& logical AND anlamına gelir. ama python'da "and" yazmak lazımmış. isnan'da math librarysinde bir fonksiyon: "is not a number" anlamına gelir, true ya da false döndürür. dosyanın başını ve sonunu kopyalasanız buraya daha kolay olur.

kodun başına "import math" yazın
  • milistroke  (03.09.12 15:33:28) 
dosya o kadar. ben burda bunu becerip asil koduma koyucam bunlari, once sunu kotarmam gerek. o yuzden kod bu kadar. sunu anlasam, cok az benzerini mekanik bi seyi modellemede kullanicam.. deniyorum hemen.


  • c non  (03.09.12 15:41:36) 
File "liste.py", line 10, in <module>
if math.isnan(numbers[i-1])==0 and math.isnan(numbers[i])==0:
TypeError: a float is required

dedi simdi de.

denedigim son hal de su:

import math

f=open("hop.txt","r")
numbers=f.readlines()
resultList=[]

for i in range(1,len(numbers)):
if math.isnan(numbers[i-1])==0 and math.isnan(numbers[i])==0:
resultList.append(int(numbers[i-1])+int(numbers+[i]))
print resultList()
  • c non  (03.09.12 15:45:19 ~ 15:47:00) 
dediğim gibi, dosyada sayı dışında karakterler okundugu için hata veriyor convert ederken. şöyle çalışması lazım:

import re;

for i in range(1,(len(numbers))):
----resultList.append(float(re.sub(r'\s','',numbers[i-1])+float(re.sub(r'\s','',numbers[i]));
print resultList()

gelen her string'in içinde eğer \n,\t,\a gibi karakterler varsa onları kaldırıyor ardından float'a çevirip topluyor...
  • milistroke  (03.09.12 16:18:23) 
listede sayidan baska bi sey yok.
yine de calismadi, ve cok ilginc en sonda veriyor hatayi da. ki son satiri siliyim, son satir da print, hata yine oluyor:

hata veren hali de su:


import re

f=open("hop.txt","r")
numbers=f.readlines()
resultList=[]


for i in range(1,(len(numbers))):
resultList.append(float(re.sub(r'\s','',numbers[i-1])+float(re.sub(r'\s','',numbers[i]))

print (resultList)
  • c non  (03.09.12 16:39:44) 
eksik parantez koymuşum da o yüzden...

resultList.append(float(re.sub(r'\s','',numbers[i-1]))+float(re.sub(r'\s','',numbers[i])))
  • milistroke  (03.09.12 17:52:22) 
selam selam,

sizinkilerden de faydalanip soyle bi sey yazdim, sansin ve sonuna kadar yardiminiz yardimiyla calisti:


f=open("hop.txt","r")
numbers=f.readlines()

liste=[]

for i in range(0,(len(numbers)-1)):
toplam=float(numbers[i])+float(numbers[i+1])
print "toplam lan:", toplam
liste.append(toplam)

print("#######")

print(liste)


cidden cok saol!!
  • c non  (03.09.12 18:37:59) 
sadece tek sorun kaldi, bu listedekileri bi dosyaya yazmak gerek, bokunu cikarmis gibi olcam ama o nasil olacak?

soyle bi sey denedim, yemedi:


f=open("hop.txt","r")
numbers=f.readlines()

liste=[]

for i in range(0,(len(numbers)-1)):

file=open("data.txt","a")
toplam=float(numbers[i])+float(numbers[i+1])
print "toplam lan:", toplam
liste.append(toplam)
file.write(toplam)
file.close()

print("#######")


print(liste)
  • c non  (03.09.12 18:44:34) 
tamam işte onun için de ayrı bi file açıp write ile yazdıracaksınız, doğru olmuş. ama write sadece string kabul ediyor o nedenle de str kullanarak string'e typecast edeceksiniz. yazdıgınız değerden sonra satır başı yapmak istiyorsanız da "\n" karakterini ekleyeceksiniz. yani:

sayi=21.1212;
file=open("hede","w"); //"a" derseniz dosya varsa sonuna ekler
file.write(str(sayi)+"\n");
file.close();

resultList'e gerek yok o zaman.
append yapacağınız yerde file.write(str(total)+"\n"); deseniz de olur...

sayenizde python öğreniyorum ben de :}
  • milistroke  (03.09.12 19:04:41 ~ 19:06:23) 
oldu. son halini de koyim, biri bakar eder falan:

f=open("hop.txt","r")
numbers=f.readlines()

liste=[]

for i in range(0,(len(numbers)-1)):

file=open("hoppa.txt","a")
toplam=float(numbers[i])+float(numbers[i+1])
print "toplam lan:", toplam
liste.append(toplam)
file.write(str(toplam)+"\n")
file.close()

print("#######")


print(liste)

cok saol tekrar tekrar
  • c non  (03.09.12 21:17:26) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.