Найти - Пользователи
Полная версия: Хьюстон, у нас проблемы.
Начало » Python для новичков » Хьюстон, у нас проблемы.
1 2 3 4
PEHDOM
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? откуда ваша функция знает чт такие обьекты существует? в вашем коде ничего такого нет.
white
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()
PEHDOM
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
AD0DE412
white вам стоит прочитать что то из профлитиратуры это будет для вас более продуктивно чем вести что то вроде личной странички на форуме (спрашивать про не понятные моменты это нормально но мне кажется не стоит правращать это в кашу)

зы рекомендую Лутца (это по большому счету единственное что читалось мной по python да объем большой но лучше изучить это один раз чем несколько раз в разных книгах)
там есть ответы на большинство ваших вопросов но это только начало (если че мопед не мой) я вот все еще в начале
ззы ну это конечно не более чем как ИМХО
white
Все еще раз огромное спасибо!
Попробую почитать Лутца, но мне теория очень плохо дается. На практике как то нагляднее
FishHook
white
Камрад! Не бывает практики без теории. Никогда. Не бывает. Наплюй в рот тому кто говорит, что бывает.
Особенно не бывает в информатике. Можно быть гинекологом от бога, ковырять в нутрях по зову души - чисто интуитивно, но писать программы так не выйдет.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB