2015-12-28 74 views
3

在下面的程序中,我创建了一个名为“Tv”的类,并且从这个类中实例化了两个对象,分别称为“vardagsrums_tv”和“koks_tv”。在该程序的主要功能中,用户可以在两个对象中改变不同的设置,例如,例如,,音量和频道,通过我创建的某些类方法。到现在为止还挺好。如何将信息保存到python文件中? (简单编程)

问题的核心是,当用户改变了这些不同的设置(音量,频道)时,我想将它们保存到一个文本文件,以便当用户关闭程序并重新打开它时,所有的设置都将随着用户的离开而改变。

这是我的计划:

def main(): 
vardagsrums_tv = Tv(read_file(2), read_file(1)) 
koks_tv = Tv(read_file(5), read_file(4)) 
choice = None 
print("***Välkommen till TV-simulatorn***") 
while choice != "3": 
    print(""" 
      1. Vardagsrums TV 
      2. Köks TV 
      3. Avsluta 
      """) 
    choice = input("Välj ett alternativ: ") 
    print("") 




    while choice == "1": 
     print(vardagsrums_tv) 
     print(""" 
       1. Byt kanal 
       2. Sänk ljudvolymen 
       3. Höj ljudvolymen 
       4. Återvänd till huvudmenyn 
       """) 
     choice_one = input("Välj ett alternativ: ") 
     if choice_one == "1": 
      vardagsrums_tv.byt_kanal() 
     elif choice_one == "2": 
      vardagsrums_tv.sank_volym() 
     elif choice_one == "3": 
      vardagsrums_tv.hoj_volym() 
     elif choice_one == "4": 
      choice = None 
      break 
     else: 
      print("Var god välj ett av de fyra alternativen.") 




    while choice == "2": 
     print(koks_tv) 
     print(""" 
       1. Byt kanal 
       2. Sänk ljudvolymen 
       3. Höj ljudvolymen 
       4. Återvänd till huvudmenyn 
       """) 
     choice_two = input("Välj ett alternativ: ") 
     if choice_two == "1": 
      koks_tv.byt_kanal() 
     elif choice_two == "2": 
      koks_tv.sank_volym() 
     elif choice_two == "3": 
      koks_tv.hoj_volym() 
     elif choice_two == "4": 
      choice = None 
      break 
     else: 
      print("Var god välj ett av de fyra alternativen.") 




    if choice not in ("1", "2", "3", None): 
     print("Du har angivit ett felaktigt alternativ. Försök igen!") 
lista_1 = [] 
lista_1.append(vardagsrums_tv) 
print(lista_1) 
lista_2 =[] 
lista_2.append(koks_tv) 
write_file(lista_1, lista_2) 

在我的main()函数结束时,你会发现,我尝试如何将当前设置保存到我的文本文件。我创建一个列表并尝试以某种方式从我的对象“vardagsrums_tv”和“koks_tv”中获取信息。我想,如果你可以打印一个对象并获得设置,那么你也可以将它附加到列表中。很明显,它没有按计划运行,因为我有一个错误。我希望你明白我在做什么:我想从一个对象(vardagsrums_tv,koks_tv)内部保存信息到一个文本文件,但我似乎无法利用我想要的信息。

这里是程序的其余部分:

def read_file(val): 
val = val 
text_file = open("C:\\Users\\Viktor\\Desktop\\laboration_5.txt", "r") 
textrader = text_file.readlines() 
lista = [] 
for i in range(len(textrader)): 
    text_line = textrader[i] 
    element = text_line.split(",") 
    lista += element[0], element[1], element[2] 
text_file.close() 
return lista[val] 

def write_file(tv_1, tv_2): 
rad_1 = tv_1 
rad_2 = tv_2 
for i in range(len(vardagsrums_tv)): 
    rad_1 += vardagsrums_tv[i], "," 
for i in range(len(koks_tv)): 
    rad_2 += koks_tv[i], "," 
text_file = open("C:\\Users\\Viktor\\Desktop\\laboration_5.txt", "w") 
text_file.append(rad_1) 
text_file.append(rad_2) 
text_file.close 

class Tv(object): 
"""En vardagsrums TV""" 
def __init__(self, kanal, volym): 
    self.kanal = int(kanal) 
    self.volym = int(volym) 




def __str__(self): 
    rep = "Vardagsrums TV\n" 
    rep += "Kanal: " + str(self.kanal) + "\n" 
    rep += "Volym: " + str(self.volym) + "\n" 
    return rep 




def byt_kanal(self): 
    kanal = int(input("Ange din önskade kanal: ")) 
    while kanal < 1 or kanal > 100: 
     print("Du har angivet en felaktig kanal. Vänlig ange en kanal mellan 1 och 100!") 
     kanal = int(input("Ange din önskade kanal: ")) 
    self.kanal = kanal 




def hoj_volym(self, hoj = 1): 
    self.volym += hoj 
    if self.volym > 10: 
     print("Du kan inte höja volymen ytterligare.") 
     self.volym = 10 




def sank_volym(self, sank = 1): 
    self.volym -= sank 
    if self.volym < 0: 
     print("Du kan inte sänka volymen ytterligare.") 
     self.volym = 0 


def main(): 
vardagsrums_tv = Tv(read_file(2), read_file(1)) 
koks_tv = Tv(read_file(5), read_file(4)) 
choice = None 
print("***Välkommen till TV-simulatorn***") 
while choice != "3": 
    print(""" 
      1. Vardagsrums TV 
      2. Köks TV 
      3. Avsluta 
      """) 
    choice = input("Välj ett alternativ: ") 
    print("") 




    while choice == "1": 
     print(vardagsrums_tv) 
     print(""" 
       1. Byt kanal 
       2. Sänk ljudvolymen 
       3. Höj ljudvolymen 
       4. Återvänd till huvudmenyn 
       """) 
     choice_one = input("Välj ett alternativ: ") 
     if choice_one == "1": 
      vardagsrums_tv.byt_kanal() 
     elif choice_one == "2": 
      vardagsrums_tv.sank_volym() 
     elif choice_one == "3": 
      vardagsrums_tv.hoj_volym() 
     elif choice_one == "4": 
      choice = None 
      break 
     else: 
      print("Var god välj ett av de fyra alternativen.") 




    while choice == "2": 
     print(koks_tv) 
     print(""" 
       1. Byt kanal 
       2. Sänk ljudvolymen 
       3. Höj ljudvolymen 
       4. Återvänd till huvudmenyn 
       """) 
     choice_two = input("Välj ett alternativ: ") 
     if choice_two == "1": 
      koks_tv.byt_kanal() 
     elif choice_two == "2": 
      koks_tv.sank_volym() 
     elif choice_two == "3": 
      koks_tv.hoj_volym() 
     elif choice_two == "4": 
      choice = None 
      break 
     else: 
      print("Var god välj ett av de fyra alternativen.") 




    if choice not in ("1", "2", "3", None): 
     print("Du har angivit ett felaktigt alternativ. Försök igen!") 
lista_1 = [] 
lista_1.append(vardagsrums_tv) 
print(lista_1) 
lista_2 =[] 
lista_2.append(koks_tv) 
write_file(lista_1, lista_2) 

main() 
input("Vänligen tryck enter för att avsluta.") 
+2

你有没有考虑过[pickle](https://docs.python.org/3/library/pickle.html)?另请阅读[PMOTW](https://pymotw.com/2/pickle/)。至于管理对象,请看[搁置](https://pymotw.com/2/shelve/index.html#module-shelve) – Pynchia

回答

1

你应该打开你的laboration_5.txt文件,"a"(追加),而不是"w"(写),否则将覆盖该文件。然后使用text_file.write(data)将数据附加到该文件。确保你在text_file.close()之后关闭你的文件。

text_file = open("C:\\Users\\Viktor\\Desktop\\laboration_5.txt", "a") 
text_file.write(rad_1) 
text_file.write(rad_2) 
text_file.close() 
+1

'with'语句!那么你不必“确定”任何东西; Python处理它。 '用open(“C:\\ Users \\ Viktor \\ Desktop \\ laboration_5.txt”,“a”)作为text_file:',然后把两个'write'放在一个缩进块中,而且你不需要关闭“。 – ShadowRanger

+0

同意,但这对作者原始代码影响最小。这似乎是情况正确的举动。 – vesche

相关问题