Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 7, 2022 08:23:12

Rad.89
Зарегистрирован: 2022-06-07
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Cписок файлов в Class

Всем привет. Не могу понять как сделать следующее:

Даны файлы. Картинки. допустим 3 шт. Лежал они в директории файла программы.
Нужно через Class вызывая переменную img_file выборочно доставать из класса ту или иную картинку.

Образно думаю должно быть так:

 Class Image:
    img_file = #  (здесь у нас функция загрузки и перечисления файлов из директории)
print('выбрана картинка: ' + img_file (2))
>>> Выбрана картинка: *картинка 2*

Это нужно, что бы в дальнейшем в коде использовать быстрый вызов нужной картинки применив один вызов с обозначением номера файла.
ну допустим есть код:

ТЕЛО КОДА
ТЕЛО КОДА

ЗАГРУЖЕН ФАЙЛ 1 \
ЗАГРУЖЕН ФАЙЛ 2 |—– вот это можно сократить до ПЕРЕМЕННАЯ = ?
ЗАГРУЖЕН ФАЙЛ 3 /

ТЕЛО КОДА
ТЕЛО КОДА
if ТЕЛО КОДА:
КОД С ФАЙЛОМ 2. —— а здесь в коде просто вызывать ПЕРЕМЕННУЮ с обозначением номера файла


Как это сделать?
Может быть есть другой вариант решения, более простой?
P.s. PY мой первый язык) грубо говоря: только начал учить)

Офлайн

#2 Июнь 7, 2022 09:46:30

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

Cписок файлов в Class

Rad.89
только начал учить)
ну вот и учи! Купи учебник и учи, выполняй задания, изучай темы одну за другой, если что-то совсем непонятно будет из прочитанного - приходи спрашивай.
Ты же бред несешь голимый, не одного слова осмысленного в твоем потоке сознания нет. Только начал учить язык, и уже классы? Серьезно? Ну сделай то что тебе нужно без классов, покажи код, обсудим



Отредактировано FishHook (Июнь 7, 2022 09:57:48)

Офлайн

#3 Июнь 7, 2022 10:20:48

Rad.89
Зарегистрирован: 2022-06-07
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Cписок файлов в Class

Не злитесь, пожалуйста. Я понимаю, что знающий человек может граничить с раздражением, когда его просят помочь советом. И понимаю, что в силу неопытности могу задавать вопросы не так, “как все привыкли”. Но тем не менее: вопрос считаю не банальным. К слову: код игры про курочку, подыхающую без еды и отдыха, если вовремя не покормить, написан и работает исправно. Хочу понять, как можно сократить выгрузку файлов, что бы не прописывать одно и тоже каждый раз. Благодарю за терпение.
И спрошу по другому тогда:
Вопрос в том, что бы сократить количество строк выгрузки файлов.
Вот есть загрузка файлов. как можно выгружать все файлы в одном действии? что бы потом просто ввел переменную с номером и из списка достал нужный мне фаил?:

 # ~ загрузка файлов изображений
img_folder = os.path.join(game_folder, 'sprites')
playerimg1 = resource_path('sprites/chikin.png')
playerimg2 = resource_path('sprites/chikin_3.png')
playerimg3 = resource_path('sprites/chikin_2.png')
playerimg_dead = resource_path('sprites/chikin_dead.png')
btn_food_img = resource_path('sprites/btn_food.png')
btn_energy_img = resource_path('sprites/btn_energy.png')
     # ~ вариант загрузки файла без хитрости resource_path
health_img = pygame.image.load(os.path.join(img_folder, 'hart1.png'))
energy_img = pygame.image.load(os.path.join(img_folder, 'energy1.png'))
food_img = pygame.image.load(os.path.join(img_folder, 'food.png'))
bg_res = resource_path('sprites/background.png')
player_img1 = pygame.image.load(playerimg1)
player_img2 = pygame.image.load(playerimg2)
player_img3 = pygame.image.load(playerimg3)
player_img_dead = pygame.image.load(playerimg_dead)
btn_food=pygame.image.load(btn_food_img)
btn_energy=pygame.image.load(btn_energy_img)
bg = pygame.image.load(bg_res)

есть классы. Что бы здесь вместо PLYER_IMG1 я вводил ту переменную ^ и просто указывал номер нужного мне файла:
 class Player (pygame.sprite.Sprite):	
	def __init__(self):
		pygame.sprite.Sprite.__init__(self)
		self.image = player_img1   #в этом месте приходится прописывать конкретное имя переменной с файлом.
		self.image = pygame.transform.scale(self.image,(scale))	
		self.rect = self.image.get_rect()		
		self.rect.center=((int(pl_pos)), (pl_x))
class Health (pygame.sprite.Sprite):
	def __init__(self):
		pygame.sprite.Sprite.__init__(self)
		self.image = health_img
		self.image = pygame.transform.scale(health_img,(20,20))
		self.rect = self.image.get_rect()
		self.rect.center=(10, 85)

Офлайн

#4 Июнь 7, 2022 10:23:10

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

Cписок файлов в Class

Rad.89
Вот есть загрузка файлов. как можно выгружать все файлы в одном действии?
вы знаете что такое “функция” и зачем они нужны?



Офлайн

#5 Июнь 7, 2022 10:28:20

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

Cписок файлов в Class

Rad.89
Не злитесь, пожалуйста. Я понимаю, что знающий человек может граничить с раздражением, когда его просят помочь советом. И понимаю, что в силу неопытности могу задавать вопросы не так, “как все привыкли”.
я на вас злюсь не за то, что вы вопросы задаете, форум для того и существует. А за то, что вы не освоив азов лезете в сложные темы. Это ярко демонстрирует хаотический характер вашего самообразования. Казалось бы, в век интернета нет проблем с получением любой мыслимой литературы. Ну скачайте вы себе учебники и учитесь последовательно. Может я не прав? Ок, какую литературу вы уже освоили, что прочитали?



Офлайн

#6 Июнь 7, 2022 10:31:21

Rad.89
Зарегистрирован: 2022-06-07
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Cписок файлов в Class

FishHook
Я пробовал через def. Но это опять же, если в нее прописывать все строки по каждой картинки отдельно. Или есть некая структура типа как если бы image=блаблабла загрузить из папки (список файлов). А уже через def доставать image(номер файла). Правильно мыслю?

Офлайн

#7 Июнь 7, 2022 10:37:33

Rad.89
Зарегистрирован: 2022-06-07
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Cписок файлов в Class

FishHook
сейчас читаю Доусона. По ходу чтения вопросы возникают и я решаю их по ходу. Тестирую новый материал. По пути написал свою первую игру на pygame. И вот один момент наступил, по которому я не могу найти нигде подсказку, как решить… Как упаковать код загрузки файлов в одну переменную и потом вытаскивать нужный файл? Нет. В целом понятно как. делал. Работал с файлами в простых структурах. Но здесь я не могу оптимизировать((

Офлайн

#8 Июнь 7, 2022 10:46:13

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Cписок файлов в Class

Корявенькая реализация того, что, думаю, вы подразумеваете. Я сам к ООП только подкрадываюсь, но по поводу того, что к классам вы рано лезете - это точно. По началу нужно хорошо овладеть уже имеющимися типами данных, циклами, функциями, а уже потом преступать к созданию собственных типов.

  
import os
 
class Image:
 
    def __init__(self):
        self.img_list = []
 
    def __repr__(self):  # переопределил встроенный метод для отображения списка файлов
        for i in self.img_list:
            print(i)
 
    def find_image(self, path=os.getcwd()):  # Ищет жпэг в той же дир. что и программа,
        for adress, folder, file in os.walk(path):  # если не указан другой путь.
            for i in file:
                if '.jpg' in i:
                    self.img_list.append(os.path.join(adress, i))
 
    def show(self, particular=False):  # Открывает файл в средстве просм. изображений по умолч.
        if not particular:             # Если передан particular, откроет только его.
            for i in self.img_list:
                os.startfile(i)
        else:
            for i in self.img_list:
                if particular in i:
                    os.startfile(i)
 
x = Image()
x.find_image()
x.__repr__()
x.show()

Отредактировано Palrom (Июнь 7, 2022 10:58:06)

Офлайн

#9 Июнь 7, 2022 11:18:03

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Cписок файлов в Class

Можно и так попробовать

 import os
class Imgs:
    def __init__(self) -> None:
        # Add working vars
        self.imgdir = "imgs"
        self.imgext = (".img", ".png")
        self.images = {}
        # Check if dir is exists and append vars
        if os.path.isdir(self.imgdir):
            self.ipath = os.path.join(os.getcwd(), self.imgdir)
            for file in os.listdir(self.ipath):
                if file.endswith(self.imgext):
                    self.images[os.path.splitext(file)[0]] = file
        else:
            self.ipath = "The dir is missing. Check your path"
    def img_file(self, fname, full_path=False):
        """Return full/short file name"""
        result = self.images.get(str(fname))
        # Check if file name is correct and full_path option
        if result:
            if full_path:
                fpath = os.path.join(self.ipath, result)
            else:
                fpath = result
        else:
            fpath = None
            print("The file name is wrong or file is not exist")
        return fpath
    def __repr__(self) -> str:
        return self.ipath
cimg = Imgs()
print(cimg)
print(cimg.img_file(1))
print("======")
print(cimg.img_file(2))
print("======")
print(cimg.img_file("screen"))
print("======")
print(cimg.img_file("screen", full_path=True))



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Отредактировано ZerG (Июнь 7, 2022 11:19:49)

Офлайн

#10 Июнь 7, 2022 13:37:50

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1394
Репутация: +  124  -
Профиль   Отправить e-mail  

Cписок файлов в Class

Rad.89
КОД С ФАЙЛОМ 2. —— а здесь в коде просто вызывать ПЕРЕМЕННУЮ с обозначением номера файла
  
img_names = ['chicken.png', 'chicken_2.png', 'chicken_3.png', 'food.png'] #os.listdir(path)
#создать словарь
pygame_imgs = {name[:-4]: pygame.image.load(os.path.join(img_folder, name)) for name in img_names}
# создавать переменные как далее не нужно
player_img1 = pygame.image.load(playerimg1)
# вместо этого использовать pygame_imgs['название_картинки']
pygame_imgs['chicken']

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version