Форум сайта python.su
0
doza_and
вопрос совершенно неясен.
class Data: def __init__(self, name, health): self.name = name self.health = health print(self.name) print(self.health) def rez(self): rez = int(name1.health) - int(name2.health) print(rez) while 1==1: name1 = input() health1 = input() name2 = input() health2 = input() name1 = Data(name1, health1) name2 = Data(name2, health2) name1.rez()
Отредактировано white (Май 6, 2020 12:45:35)
Офлайн
294
whiteнет, неправильно, после ввода пользователем данных, создаються ДВА экземпляра(инстанса, обьекта) класса Data у котороых есть атрубуты self.name , self.health (у каждого свое) котороые связываються с переменными name1 и name2.
Правильно ли я понимаю:
после того как пользователь ввел:
name1 = input()
health1 = input()
name2 = input()
health2 = input()
В классе появились (не знаю как их назвать) переменные self.name = name1 ; self.health = health1 и т.д. .
whiteони как бы и сохранились, он создал новые два экземпляра класса Data и связал их с переменными name1 и name2. Теперь обращение к этим переменным будет вызывать уже новые экземпляры класса, а старые никуда не делись, просто вы бльше не можете к ним обращаться, и они будут удалены сборщиком мусора как только так сразу.
Когда цикл while пошел на 2ой круг он затер предыдущие значение self.name, self.health? В моем понимании они должны как бы сохранится!?
whiteда, потому как они вычисляються в момент вызова метода, и нигде после этого не храняться..
Тот же вопрос с методом rez, после каждого круга цикла значения заменяются на новые?
whiteчтобы они “оставались как бы в памяти” их нужно как бы записать в память.И так как вы лучше не делать. класс Data не дожен знать что есть какието инстансы name1 и name2. сделайте rez() просто функцией или если уж хотите делать методом класса то передавайте в него втоой обьект, а еще можно использовать магический метод __sub__()
И собственно как тогда можно реализовать что бы значения метода rez оставались как бы в памяти, ну и как потом можно к этим значениям обратится?
[code python][/code]
Офлайн
44
white
class Test: var = [] def __init__(self, test): self.test = test self.var.append(test) def show(self): print("-->", self.test) for i in range(5): var =Test(i) var.show() print(var.var)
('-->', 0) [0] ('-->', 1) [0, 1] ('-->', 2) [0, 1, 2] ('-->', 3) [0, 1, 2, 3] ('-->', 4) [0, 1, 2, 3, 4]
и вставьте ссылку на его url Отредактировано AD0DE412 (Май 6, 2020 17:06:11)
Офлайн
0
Всем спасибо что помогли хоть чуть чуть разобраться.
К сожалению я понял, что таким способом успеха мне не добиться, и концепция изменилась.
Теперь будет , что то типа базы в которую я ввожу данные, они сохраняются. потом опять ввожу и они тоже сохраняются)), но могут выполняться и математические операции типа сложения и вычитания (до этого я дойду позже)
Я не буду вас просить, что бы вы написали это за меня т.к. этим я занимаюсь сугубо для интереса.
Периодически возникают вопросы которые я не знаю как задать гугля, и вот очередной вопрос из этой рубрики:
class Data(): var = [] def __init__ (self, name, price): self.name = name self.price = price def file(): text = open('text.txt', 'a') text.write(str(name.name)+ " " +str(name.price) + "\n") def sech(): i = input("Кого ищем: ", ) text = open('text.txt', 'r') for num, line in enumerate(text, 1): if i in line: print(str(num) + " " + line) Data.var = line else: pass while 1==1: name = input("Имя: ", ) price = input("Цена: ", ) name = Data(name, price) file() sech() print(Data.var)
Офлайн
294
whiteпотому что var это список, и если вы хотите добавить в него элемент нужно вызывать метод списка append(), а вы делаете Data.var = line, и Data.var, вжух-вжух, и уже не список, а строка.
1. Почему в переменную var записывается только последняя строка из поиска? У AD0DE412 ,который ответил постом выше , все получается. Взял часть его алгоритма.
whiteну у строк есть метот find() ишет подстроку в строке, возвращает индекс первого вхождения или -1 если не нашло
2. как можно реализовать в функции sech поиск конкретной строки с условием, что я не знаю есть ли эта строка там?
whiteну вообще да, хотя если у вас будет там всего сотня другая значений, то можно и в виде txt(csv, json,или на крайняк dbf)
3. “база данных” в txt это извращение?
[code python][/code]
Офлайн
0
PEHDOM
ну у строк есть метот find() ишет подстроку в строке, возвращает индекс первого вхождения или -1 если не нашло
import random class Data(): def __init__ (self, name, price): self.name = name self.price = price def file(): text = open('text.txt', 'a') text.write(str(name.name)+ " " +str(name.price) +" "+ "\n") def sech(): i = input("Кого ищем: ", ) text = open('text.txt', 'r') for num, line in enumerate(text, 1): if i in line: b = random.randint(0, 10000) print(str(num) + " " + line) lin = line + str(b) print(lin) else: pass sech1(line) def sech1(lin): f = str(input("поиск: ", )) text = open('text.txt', 'r') for lin in text: if f in lin: print(lin) else: pass return while 1==1: name = input("Имя: ", ) price = input("Цена: ", ) name = Data(name, price) file() sech()
name = input("Имя: ", ) price = input("Цена: ", ) ib = id(name) name = Data(name, price, ib) file() sech()
name = input("Имя: ", ) price = input("Цена: ", ) ib = random.randint(0, 100000) name = Data(name, price, ib) file() sech()
Отредактировано white (Май 7, 2020 10:04:11)
Офлайн
0
Всем огромное спасибо за подсказки. Но походу использовать txt в моей задумке это гиблое дело.
Так что я пропаду на какое то время, пока не придумаю другой способ реализации)
Но все же, подскажите как удалить найденную строку из фала.
Понимаю что это делается путем перезаписи файла, но не в какую получается.
Отредактировано white (Май 7, 2020 16:15:08)
Офлайн
294
whiteда вполне возможно
Возможно ли что переменная id может повторятся, после того как я заново запущу скрип.
ib = random.randint(0, 100000)
whiteПисал по памяти, Мб чегото забыл, но сам принцип работы такой:
подскажите как удалить найденную строку из фала.
Понимаю что это делается путем перезаписи файла, но не в какую получается.
infile = 'file1.txt' outfile = "file2.txt" delete_string = 'Mary had a little lamb' infile = open(infile) outfile = open(outfile, "w+") for line in infile: if line.rstrip() == delete_string: continue outfile.write(line) infile.close() outfile.close()
[code python][/code]
Отредактировано PEHDOM (Май 7, 2020 21:59:21)
Офлайн
0
PEHDOM
Писал по памяти, Мб чегото забыл, но сам принцип работы такой:
def dell (num): ## Удаляем найденную строку ## print ("переданное значение из sech1: ", num) text = open('text.txt', 'r') spisok = text.readlines() w = int(num) text.close() text1 = open('text.txt', 'w') spisok[w-1] = " \n" text1.writelines(spisok) text1.close()
Офлайн
0
Добрый день!
Всех с праздником!
Начал я складывать из “кубиков” одну целую программу), и не пойму. Если выше делал все работало а именно у меня получалось дописывать файл, то почему теперь не записывает. Всю голову сломал не пойму в чем косяк.
class Data(): def __init__(self, name, price, ib): self.name = name self.price = price self.ib = ib def vvod_data(): intiker = intik.get() inprice = inpri.get() try: inprice = float(inprice) ib = 123 name = str(intiker) price =str(inprice) name = Data(name, price, ib) file() except: print("fault") def file(): text = open('text123.txt', 'a') text.write(str(name.name)+ " " +str(name.price) +" " + str(name.ib)+ " " + "\n") text.close()
Офлайн