2017-01-12 140 views
0

我的目標是在「zerty.txt」文件中寫入列表中的條目,當我運行文件時輸入了多個參數,所以我嘗試了許多不成功的方式TypeError:'type'object is not iterable python when I use .join

我已閱讀了許多關於這個錯誤消息的答案,他們都沒有幫助我理解我所缺少的東西。

imgur.com/Gq1HtXb note_code.py:

import etudiant as MP 

liste = [] 

n = int(input("Nb de d'etudiant : ")) 

for i in range(0,n): 
    a = MP.etudiant() 
    a.saisie() 
    liste.append(a) 

print("les étudiants :") 
for p in liste: 
    print("-------") 
    p.affichage() 
    p.save() 

http://imgur.com/VNHEX0Ietudiant.py:

class etudiant: 
    def __init__(self): 
     self.nom = "vide" 
     self.age = 0 

    def saisie(self): 
     self.nom = input("Nom : ") 
     self.note = int(input("note : ")) 

    def affichage(self): 
     print("Son nom est ", self.nom) 
     print("sa note : ", self.note) 

    def save(liste): 
     with open('zerty.txt', mode='wt', encoding='utf-8') as myfile: 
      myfile.write('\n'.join(liste)) 
      myfile.write('\n') 
+0

提示:'p.save()'...這是什麼電話?你只有'def save(liste):' –

+0

nrmaly它調用函數def save(liste): – Zenix

+0

'liste'是應該是'self'的別名。你想通過一個列表嗎? –

回答

0

像cricket_007說你在note_code.py迭代liste但你在每個循環中得到的petudiant對象而不是列表。

我想你想要做的是一樣的東西:

etudiant.py

class etudiant: 
    def __init__(self): 
     self.nom = "vide" 
     self.age = 0 

    def saisie(self): 
     self.nom = input("Nom : ") 
     self.note = int(input("note : ")) 

    def affichage(self): 
     print("Son nom est ", self.nom) 
     print("sa note : ", self.note) 

    def save(self): 
     with open('zerty.txt', mode='at', encoding='utf-8') as myfile: 
      myfile.write('\n'.join([self.nom, self.note])) 
      myfile.write('\n') 

但什麼是更好的是:

note_code.py:

import etudiant as MP 

liste = [] 

n = int(input("Nombre d'étudiants : ")) 

liste = [MP.etudiant().saisie() for i in range(n)] 

print("les étudiants :") 
with open('zerty.txt', mode='wt', encoding='utf-8') as myfile: 
    for p in liste: 
     print("-------") 
     p.affichage() 
     p.save(myfile) 

etudiant.py:

class etudiant: 
    def __init__(self): 
     self.nom = "vide" 
     self.age = 0 

    def saisie(self): 
     self.nom = input("Nom : ") 
     self.note = int(input("note : ")) 

    def affichage(self): 
     print("Son nom est ", self.nom) 
     print("sa note : ", self.note) 

    def save(self, file_to_save): 
     file_to_save.write('{}\n{}\n'.format(self.nom, self.note)) 

J'espère闕CA VOUS光環助手;-)

+0

Merci它幫了我;) – Zenix

+0

你會考慮[接受這個答案](https://stackoverflow.com/help/someone-answers)? – EvensF

1

你的對象不是可迭代。

def save(liste): 
    ... 
    myfile.write('\n'.join(liste)) # liste is 'self' 

也許你的意思是?

def save(self, liste): 

但是,即使如此,你需要一個參數。

for p in liste: 
    print("-------") 
    p.affichage() 
    p.save() # here... save what? 'p.save(liste)', maybe? 

及注意事項:你只能加入一個字符串列表,所以你會需要一些額外的功能添加到您的對象轉換爲字符串

+0

的'liste'變量,我有一個 TypeError:序列項0 :預期的str實例,etudiant發現 – Zenix

+0

當然。因爲你有一個對象列表,而不是字符串。你只能加入字符串列表 –

相關問題