Я учусь создавать файлы .txt, а также как их писать и читать, проблема, с которой я столкнулся сейчас, заключается в том, что я хочу создать программу, в которой я могу создавать, редактировать и удалять символы, похожие на таблицу и что эти новые символы сохраняются в файле .txt
Увидев, что у персонажей есть общие атрибуты, я подумал об использовании классов, я не особо в этом разбираюсь, но знаю немного, мой основной идея заключалась в том, чтобы запросить атрибуты и сгенерировать объект и добавить его в список символов, делая это таким образом, все в порядке, но данные не сохраняются при повторном запуске программы
class PLAYER:
def __init__(self,Name,Attack,Defense,Health):
self.Name=Name
self.Attack=Attack
self.Defense=Defense
self.Health=Health
options=[0,1,2,3]
characters=[]
while True:
counter=0
archive = open("players.txt","w")
print("ID|NAME|ATTACK|DEFENSE|HEALTH")
while counter != len(characters):
print("(",counter,")", characters[0+counter].Name,characters[0+counter].Attack,characters[0+counter].Defense,characters[0+counter].Health)
counter += 1
print("Character Manager")
print("( 0 ) Create")
print("( 1 ) Edit")
print("( 2 ) Delete")
print("( 3 ) Exit")
while True:#Choose the option
try:
option=int(input("-> "))
while option not in options:
print("Are you looking to find more options? Sorry, friend, there is no budget for that")
option=int(input("-> "))
break
except ValueError:
print("Please write the number in parentheses of the option you want to do")
if option==3:#Exit
archive.close()
break
elif option==0:#Crear
NAME=input("What will his name be? ")
while True:#Ataque
try:
ATTACK=int(input("How much attack will it have? "))
break
except:
print("please put an integer value")
while True:#Defensa
try:
DEFENSE=input("How much will your defense be? ")
break
except:
print("please put an integer value")
while True:#Vida
try:
HEALTH=input("How much life will it have?")
break
except:
print("please put an integer value")
characters.append(PLAYER(NAME,ATTACK,DEFENSE,HEALTH))
elif option==1:#Edit
print("Which character do you want to edit?")
ID=int(input("-> "))
characters.remove(characters[ID])
NAME=input("What will be his new name? ")
while True:#Ataque
try:
ATTACK=int(input("How much attack will it have? "))
break
except:
print("please put an integer value")
while True:#Defensa
try:
DEFENSE=input("How much will your defense be?")
break
except:
print("please put an integer value")
while True:#Vida
try:
HEALTH=input("How much life will it have?")
break
except:
print("please put an integer value")
characters.append(PLAYER(NAME,ATTACK,DEFENSE,HEALTH))
elif option==2:#Delete
print("¿Qué personaje quieres eliminar?")
ID=int(input("-> "))
characters.remove(characters[ID])
Вверх до этого момента я не использовал файл .txt, чтобы снова не показывать полный код, я помещаю только те части, которые меняются.
counter=0
archive = open("players.txt","w")
print("ID|NAME|ATTACK|DEFENSE|HEALTH")
while counter != len(characters):
a=("(",counter,")", characters[0+counter].Name,characters[0+counter].Attack,characters[0+counter].Defense,characters[0+counter].Health)
archive.write(a)
archive.write("\n")
counter += 1
archive.close()
archive = open("personajes.txt","r")
print(archive.read())
print("Character Manager")
print("( 0 ) Create")
print("( 1 ) Edit")
print("( 2 ) Delete")
print("( 3 ) Exit")
Проблема, которую я обнаружил здесь, заключается в том, что аргумент записи должен быть str, а не кортеж, но при установке
a = str ("all the stuff")
Мне кажется
TypeError: str() takes at most 3 arguments (7 given)
Итак, пока у меня заканчиваются идеи, чтобы найти способ решить эту проблему, я надеюсь, что вы может помочь мне решить эту проблему, поскольку я не смог найти решение самостоятельно
пример того, что я ищу, выглядит следующим образом
ID|NAME|ATTACK|DEFENSE|HEALTH
Character Manager
( 0 ) Create
( 1 ) Edit
( 2 ) Delete
( 3 ) Exit
-> 0
What will his name be? Joseph
How much attack will it have? 20
How much will your defense be? 10
How much life will it have?50
ID|NAME|ATTACK|DEFENSE|HEALTH
( 0 ) Joseph 20 10 50
Character Manager
( 0 ) Create
( 1 ) Edit
( 2 ) Delete
( 3 ) Exit
но я хочу это, когда я start, старые зарегистрированные символы появляются, если есть
Если я использую f-строку
counter=0
archive = open("players.txt","w")
print("ID|NAME|ATTACK|DEFENSE|HEALTH")
while counter != len(characters):
a=f"( {counter} ) {characters[counter].Name} {characters[counter].Attack} {characters[counter].Defense} {characters[counter].Health}"
archive.write(a)
archive.write("\n")
counter += 1
archive.close()
archive = open("personajes.txt","r")
print(archive.read())
Новые символы печатаются, но в момент закрытия программы и повторного открытия символов, которые где создано до исчезновения