2016-04-09 11 views
0

insert() bir liste sonsuzun üzerinden bir döngü kullanmak durumunda 1 ile başlayan artan sayıların sırası, newlines ile 'Yok' olarak yazdırılır. Bunun neden olabileceğini bilen var mı? split_2 ile newlines ile fikir liste lines değiştirilmiş bir biçimi olmasıdır arada Neden Zaten .txt dosyası içinde yer alır <code>crop</code> için bir değer girerek fonksiyonunu <code>appendA</code> çalıştırdığınızda, <code>index</code> ve <code>newlines</code> bir şekilde <code>index</code> ile sonsuza basılır

, değiştirilmesi, line aynı pozisyon ( index) eklenir edilir.

crop = input("Which crop? ") 
quantity = input("How many? ") 
newlines = [] 
newlines = list(newlines) 

def appendA(): 

file_initial = open('cropdatabase.txt', 'r') 
lines = file_initial.readlines() 

for line in lines: 
    if crop in line: 
     index = lines.index(line) 
     print (index) 
     line = str(line) 
     split_2 = line.split (' ') 
     split_2.append (quantity + ' ') 
     split_2 = str(split_2) 

     # everything works up to here. 

     newlines = lines.insert (index, split_2) 
     print (newlines) 

file.close() 

def appendB(): 

file = open('cropdatabase.txt', 'a+') 
file.write ('\n') 
file.write (crop + ' ') 
file.write (quantity + ' ') 


with open('cropdatabase.txt', 'a+') as file: 
if crop in open('cropdatabase.txt').read(): 
    appendA() 
else: 
    appendB() 
file.close() 
+0

Yinelenen aynı yinelenebilirliğe bir şeyler eklemeye devam edersiniz. O sürecin bitmesini nasıl beklerdin? – Reti43

+0

Ancak kuşkusuz, yalnızca 'mahsul' içinde bulunduğu çizgiyi etkilemeli? – superato

+0

Neye ekliyorum? – superato

cevap

1

Sizin yanlış anlama muhtemelen nasıl insert() ve yineleme çalışmaları kaynaklanır.

3 öğeli bir listeniz olduğunu varsayalım. for item in my_list'u yaptığınızda, Python kaç tane öğe olduğunu arayamaz ve bu kadar çok sayıda indeks üzerinde yineleme yapar. Liste tükenene kadar yinelemeye devam edecektir. Bir endekse bir öğe eklediğinizde, listede bir diğer endeksi ileriye doğru itecektir. Yani, geçerli döngüde i dizininde ne var, bir sonraki için i+1'da olacak ve tekrar sizde çalışacaksınız. İşte basit bir gösteri.

>>> a = [1, 2, 3] 
>>> for index, item in enumerate(a): 
...  print(item) 
...  a.insert(index, '{0}{0}'.format(index)) 
...  print(a) 

0 
['00', 0, 1, 2] 
0 
['00', '11', 0, 1, 2] 
0 
['00', '11', '22', 0, 1, 2] 
0 
['00', '11', '22', '33', 0, 1, 2] 
0 
['00', '11', '22', '33', '44', 0, 1, 2] 
0 
['00', '11', '22', '33', '44', '55', 0, 1, 2] 
... 

dizine i yerine yeni bir eleman ekleme de listesinde değişiklik istediniz? Örneğin, lines[index] = split_2.

insert() ile ilgili diğer bir şey, newlines niçin yazdığına ve bu nedenle neden None numaralı baskıdır. Bu gibi fonksiyonların diğer örnekleri, list.append(), list.sort() ve random.shuffle()'dur.

İlgili konular