Уведомления

Группа в Telegram: @pythonsu

#1 Май 9, 2020 11:30:51

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Хьюстон, у нас проблемы.

white
def file()
плохая идея, переименйте функцию от греха подальше? например? на write_file
 def file():
....
    text.write(str(name.name)+ " " +str(name.price) +" "  + str(name.ib)+ " " + "\n")
...
конкатенация строк плохо, используйте format(), join(), или f-строки
что такое name.name, name.price, name.ib? откуда ваша функция знает чт такие обьекты существует? в вашем коде ничего такого нет.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#2 Май 9, 2020 12:35:36

white
Зарегистрирован: 2018-11-28
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

Хьюстон, у нас проблемы.

PEHDOM
конкатенация строк плохо, используйте format(), join(), или f-строки
что такое name.name, name.price, name.ib? откуда ваша функция знает что такие объекты существует? в вашем коде ничего такого нет.

Не совсем понял, то вы имеете ввиду, в связи со своей не опытностью.
На этапе создания своих “кирпичиков” писал вот такой скрип:
 class Data():
    def __init__ (self, name, price, ib):
        self.name = name
        self.price = price
        self.ib = ib
    
def file():
## Записываем данные в файл text ##    
    text = open('text.txt', 'a')
    text.write(str(name.name)+ " " +str(name.price) +" "+ str(name.ib)+ " " + "\n")
    text.close()
       
while 1==1:
    name = input("Имя: ", )
    price = input("Цена: ", )
    ib = id(name)
    name = Data(name, price, ib)
    file()
И этот скрип в принципе работает.

Этот скрип я делал на основе выше на писаного “кирпичика”
 from tkinter import *
import tkinter as tk
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:
## Делаем проверку на числовой ввод в Entry (т.е. если будут в строку вводится не цифры, пишет  fault##
        inprice = float(inprice)
        ib = 123
        name = str(intiker)
        price =str(inprice)
        name = Data(name, price, ib)
        wrfile()
    except:
        print("fault")
def wrfile():
## Записываем в файл данные ##
    text = open('Base.txt', 'a')
    text.write(str(name.name)+ " " +str(name.price) +" "
               + str(name.ib)+ " " + "\n")
    text.close()

Теперь попробую пояснить как это должно работать:
Есть часть кода где создается окно (tkinter), в нем три виджета ( Entry1, Entry2, Batton1)
Соответственно intik = Entry1; insech = Entry2. При нажатие на кнопку переходим в функцию
vvod_data(). Там вынимаем данные из Entry1, Entry2. Делаем проверку что в Entry2 только цифры.
         ib = 123
        name = str(intiker)
        price =str(inprice)
        name = Data(name, price, ib)
этими строчками мы создаем переменную (не знаю как ее правильно назвать) в классе Data()
Дальше идем в функцию wrfile(). Собственно там мы открываем фаил и записываем в него строчки из класса Data(). Я вообще правильно мыслю ?

Почему то в первом случае работает, во втором нет?!

я понимаю что можно выйти из ситуации вот так:

 def vvod_data():
    intiker = intik.get()
    inprice = inpri.get()
    try:
## Делаем проверку на числовой ввод в Entry (т.е. если будут в строку вводится не цифры, пишет  fault##
        inprice = float(inprice)
        ib = 123
        name = str(intiker)
        price =str(inprice)
        wrfile(name, price, ib)
    except:
        print("fault")
def wrfile(name, price, ib):
## Записываем в файл данные ##
    text = open('Base.txt', 'a')
    text.write(str(name)+ " " +str(price) +" "
               + str(ib)+ " " + "\n")
    text.close()

Отредактировано white (Май 9, 2020 13:15:57)

Офлайн

#3 Май 10, 2020 11:18:02

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Хьюстон, у нас проблемы.

white
этими строчками мы создаем переменную (не знаю как ее правильно назвать) в классе Data()
нет, этими строчами вы создаете обьект типа Data и связываете с переменной name. Но ваша переменная name живет ровно до тех пор пока работает функция vvod_data(). как только функция завершает рабоу, переменная name перестает существать.
white
Почему то в первом случае работает, во втором нет?!
вам нужно почитать что такое области видимости, https://python-scripts.com/scope
white
я понимаю что можно выйти из ситуации вот так:
єто не выход из ситуации, а правильне решение. ваша функция не долна знать что сущетсвтуют гдето какието еще обьекты.
white
Не совсем понял, то вы имеете ввиду, в связи со своей не опытностью.
конкатенауия строк тоесть сложение. В пайтоне строки неизменяемые, и когда вы проводите сложение каждый раз создаеться новый обьект. в случаях подобных ващему лучше использовать мктод format()
https://pythonworld.ru/osnovy/formatirovanie-strok-metod-format.html
или F строки(если у вас пайтон версии >=3.6) https://python-scripts.com/f-strings



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#4 Май 10, 2020 13:23:04

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Хьюстон, у нас проблемы.

white вам стоит прочитать что то из профлитиратуры это будет для вас более продуктивно чем вести что то вроде личной странички на форуме (спрашивать про не понятные моменты это нормально но мне кажется не стоит правращать это в кашу)

зы рекомендую Лутца (это по большому счету единственное что читалось мной по python да объем большой но лучше изучить это один раз чем несколько раз в разных книгах)
там есть ответы на большинство ваших вопросов но это только начало (если че мопед не мой) я вот все еще в начале
ззы ну это конечно не более чем как ИМХО



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Май 10, 2020 21:30:34)

Офлайн

#5 Май 10, 2020 14:46:58

white
Зарегистрирован: 2018-11-28
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

Хьюстон, у нас проблемы.

Все еще раз огромное спасибо!
Попробую почитать Лутца, но мне теория очень плохо дается. На практике как то нагляднее

Офлайн

#6 Май 10, 2020 17:15:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Хьюстон, у нас проблемы.

white
Камрад! Не бывает практики без теории. Никогда. Не бывает. Наплюй в рот тому кто говорит, что бывает.
Особенно не бывает в информатике. Можно быть гинекологом от бога, ковырять в нутрях по зову души - чисто интуитивно, но писать программы так не выйдет.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version