2017-01-12 1 views
0

Моя цель - записать в файле zerty.txt записи в списке с несколькими параметрами, введенными при запуске файла, поэтому я пробовал много неудачных путиTypeError: 'type' object is not itable python, когда я использую .join

Я прочитал множество ответов на это сообщение об ошибке SO, никто из них не помог мне понять, чего я не вижу.

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 сказал, что вы переборе liste в note_code.py но p, который вы получаете в каждом цикле, - это объект etudiant, а не список.

Я думаю, что вы хотите сделать что-то вроде:

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 дие ça уоиз аура Памятной ;-)

+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

. У меня есть TypeError: sequence item 0 : ожидаемый экземпляр str, найденный этуидиан – Zenix

+0

Несомненно. Потому что у вас есть список объектов, а не строк. Вы можете присоединиться только к списку строк –

Смежные вопросы