Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3492 posts.

Python для новичков » Как исправить ошибку в отслеживании столкновения с врагами в игре на pygame? » Март 28, 2021 20:43:48

Я создаю игрушку, думал вроде бы настроил столкновение игрока с врагами. Но когда очередной раз запускал чтобы проверить не ошибся ли при работе с музыкой, узнал что сталкиваться с врагом я могу только с левой его стороны. Пробовал исправить, но, смерть защитывается только подходя к врагу слева.
 def pause():
    if paused == True:
        pause = myfont1.render('ПАУЗА!', 10, (200, 200, 200)) # Строки паузы
        pause1 = myfont1.render("Чтобы продолжить жмите ENTER", 10, (200, 200, 200))
        screen.set_alpha(100) # Прозрачность слоя выставленна на 100
        win.blit(screen1, (0, 0)) # Включение слоя скрин1
        screen1.blit(pause, (480, 250)) # Отрисовка надписи паузы
        screen1.blit(pause1, (180, 350)) # Отрисовка надписи паузы
    else:
        screen.set_alpha(255)
def otladka():
    if cord == True: # Вывод строк в экран отладки
        string1 = myfont.render('Игрок: X '+ str(x) + ' Y ' + str(y), 0, (30,20,60)) # Строки экрана отладки
        string2 = myfont.render('Враг(и) в зоне видимости: X: ' + str(sx) + ' Y: ' + str(sy) + ' X1: ' + str(sx1) + ' Y1: ' + str(sy1), 0, (30,20,60))
        string5 = myfont.render('Координаты мышки в окне: ' + str(a), 0, (30,20,60))
        string6 = myfont.render('Кол-во FPS: ' + str(fps), 0, (30,20,60))
        screen.blit(string2, (0, 50))
        screen.blit(string1, (0, 30))
        screen.blit(string5, (0, 10))
        screen.blit(string6, (0, 90))
fu = input()
#from menu import menu
import pygame as pg
import random
import time
pg.init() # импортируем библиотеку для игрушки
win = pg.display.set_mode((1200, 700)) # Создвние главного окна программы
screen = pg.Surface((1200, 700)) # Втоой слой
screen1 = pg.Surface((1200, 700)) # Третий слой
pg.display.set_caption('game')  #Создание окна "GAME"
width = 100 # Ширина
height = 100 # Высота
x = 600 # Позиция Y Игрока
y = 400 # Позиция X игрока
speed = 30 # Скорость игрока
spd = 10 # Скорость врага
sy = -100 # Позиция Y врага
sx = 100 # Позиция X врага
spd1 = 10 # Скорость врага1
sy1 = -60 # Позиция Y врага1
sx1 = 350 # Позиция X врага1
myfont = pg.font.SysFont("monospace", 20) # Системный шрифт в отладчике, выставленный на размер 15
myfont1 = pg.font.SysFont("arial", 50) # Системный шрифт в паузе, выставленный на размер 50
clock = pg.time.Clock() #Для обозначения фпс
fps = 60
time1 = 0
m = False
death = False # Смерть выключена
cord = False # Экран отладки выключен
run = True # Цикл включен
paused = True # Пауза выключена
record = False
r1 = False
r2 = False
rn = False
sound1 = pg.mixer.Sound('C:\\Users\Юрий\Desktop\python\MyGame\m.wav')
soundlose = pg.mixer.Sound('C:\\Users\Юрий\Desktop\python\MyGame\lose.wav')
sound1.play(-1)
while run: # Главный цикл игры
    pg.time.delay(20)
    a =  pg.mouse.get_pos()
    for event in pg.event.get():
        if event.type == pg.QUIT:
            run = False # Разрешает завершение программы через крестик
        keys = pg.key.get_pressed() # Для регистрации клавиш
        win.blit(screen1, (0, 0)) # Включение слоя скрин1  
    if death == False:
        if sx >= x and sx <= x + 100 and sy >= y and sy <= y + 100:
            death = True
            r1 = True
        if sx1 >= x and sx1 <= x + 100 and sy1 >= y and sy1 <= y + 100:
            death = True
            r1 = True
    pause()
    if keys[pg.K_RETURN]: # Выключение паузы
        paused = False
    if keys[pg.K_ESCAPE]: # Включение паузы
        paused = True
    if keys[pg.K_TAB]: # Включение паузы
        run = False
    if paused == False:
        time1 += 0.030
        #if rn == False:
            #spd = random.randint(10, 40)# Бесконечное движение врага вниз
        sy += spd # Бесконечное движение врага вниз
        if sy >= 700:
            sy = random.randint(-10, 0) # Позиция Y врага
            sx = random.randint(0, 900) # Позиция X врага
        #if rn == False:
            #spd1 = random.randint(10, 40)
        sy1 += spd1 # Бесконечное движение врага вниз
        if sy1 >= 700:
            sy1 = random.randint(-20, 0) # Позиция Y врага 1
            sx1 = random.randint(0, 900) # Позиция X врага 1
        if keys[pg.K_d]: # Движение вправо по клавише D  
            x += speed
            if x > 1050:
                x = 1050
        if keys[pg.K_a]: # Движение влево по клавише A
            x -= speed   
            if x < 80:
                x = 70
        if keys[pg.K_g] and cord == False: # Включатель экрана отладки
            cord = True
        if keys[pg.K_h] and cord == True: # Выключатель экрана отладки
            cord = False
    
    string3 = myfont.render('Вы проигали!', 0, (30,20,60))
    string4 = myfont.render('Вы пока не прогирали!', 0, (30,20,60))
    screen.fill((0, 255, 0)) #Заливка 2 слоя
    if run == True:
        p_time = myfont.render(str(time1), 10, (30, 20, 60))
        screen.blit(p_time, (1130, 1)) # Отрисовка надписи времени
        p_time1 = myfont.render(" Секунд", 10, (30, 20, 60))
        screen.blit(p_time1, (1115, 20)) # Отрисовка надписи времени
    otladka()
    
    if death == True:
        #run = False
        record = True
        screen.blit(string3, (0, 70)) # Если умер
        if r1 == True:
            soundlose.play(0)
            r1 == False
        if record == True:
            if fu == "2":
                f = open('Результаты.txt', 'a')
                f.write('{' + "Fred " + str(time1)  + '},')
                f.close
                record = False
                print('{' + "Fred " + str(time1)  + '},')
            if fu == "1":
                f = open('Результаты.txt', 'a')
                f.write('{' + "ViR " + str(time1)  + '},')
                f.close
                record = False
                print('{' + "ViR " + str(time1)  + '},')
            else:
                f = open('Результаты.txt', 'a')
                f.write('{' + fu + " " + str(time1)  + '},')
                f.close
                record = False
                print('{' + fu + " " + str(time1)  + '},')
        death = False
    else:
        screen.blit(string4, (0, 70)) # Если жив
    
    pg.draw.rect(screen, (60,200,50), (sx,sy,width,height)) #враг
    pg.draw.rect(screen, (30,10,70), (sx1,sy1,width,height)) #враг 1
    pg.draw.rect(screen, (60,50,50), (x,y,width,height)) #игрок
    win.blit(screen, (0, 0)) 
    pg.display.update() # Обновление экрана
    clock.tick(fps) # Фпс = 60
pg.quit() 

Я хз что делать формула столкновения выделена жирным шрифтом.
Я питонист начинающий на код не ругайтесь.

Центр помощи » помогите с ооп » Март 25, 2021 15:41:59

помогите описать мотоцикл с помощью ооп , нужно 2 функции кроме info()

Центр помощи » Нужна помощь в открытии программы. » Март 20, 2021 18:18:04

Всем доброго времени суток! Так случилось, что по учебе столкнулся с необходимостью работы с одним алгоритмом, написанным на языке Пайтон. Сам я в программировании полный нуль, попытался разобраться сам, но не получилось. Помогите пожалуйста, как мне открыть программу, если у меня есть код? Сам код брал у какого-то программиста с видео
Файл с кодом приложу ниже. Помогите пожалуйста, как мне это запустить, чтоб было как у него
Файл с кодом https://disk.yandex.ru/d/kDucA-WZdSGZUQ

Python для новичков » Обновить количество страниц на титульном листе документа WORD. » Март 20, 2021 15:14:29

Нужно реализовать автоматическое обновление количество страниц на титульном листе документа WORD.

 #!/usr/bin/python
# -*- coding: UTF-8 -*-
import win32com.client
import inspect, os
def update_toc(docx_file):
    #Запускаем Word
    word = win32com.client.DispatchEx("Word.Application")
    #Открываем документ Word
    doc = word.Documents.Open(docx_file)
    #Обновляем номинацию
    doc.Fields.Update()
    #Закрываем и сохраняем документ Word
    doc.Close(SaveChanges=True)
    word.Quit()
def main():
    script_dir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
    file_name = 'document.docx'
    file_path = os.path.join(script_dir, file_name)
    update_toc(file_path)
if __name__ == "__main__":
    main()

После выполнения программы , нумерация на титульной странице становиться не корректной.

Python для новичков » Ищу учителя pyphon » Март 17, 2021 17:48:34

Хочу стать python developer. Ищу учителя веб- языкам. Кто хочет научить python безвозмездно онлайн? Обращайтесь в ЛС.

Инструментальные средства разработки » ERROR: pycurl-7.43.0.4-cp37-cp37m-win32.whl is not a supported wheel on this platform » Март 14, 2021 13:32:30

Пытаюсь установить скомпилированнный PyCurl на pypy.
Кофнигурация моей системы:
 Python 3.7.9 (7e6e2bb30ac5, Nov 18 2020, 12:05:16)
[PyPy 7.3.3-beta0 with MSC v.1927 32 bit] on win32
Ошибка:
 pypy3 -mpip install pycurl-7.43.0.4-cp37-cp37m-win32.whl
ERROR: pycurl-7.43.0.4-cp37-cp37m-win32.whl is not a supported wheel on this platform.

Python для новичков » Как в реальном времени записывать каждое новое cообщение из консоли в текстовый файл, таблицу или базу данных ? » Март 13, 2021 21:27:05

Пишу бота для дискорда с полным логированием. Только начал но сразу хочу сделать нормально. Для полного логирования небходимо записывать казждое сообщене из консоли в какой то файл удобный для простомра. Заранее спасибо !

Флейм » Как можно найти максимальный элемент массива с помощью c# » Март 12, 2021 14:06:17

Всем доброго времени суток! Иногда не очень просто найти максимальный элемент массива, но с помощью языка c# это не является проблемой, если кому-то нужно, то советую прочесть данную статью об этом: https://codeby.net/threads/c-kak-najti-maksimalnyj-ehlement-massiva.67441/ , в статье используется несколько методов для получения желаемого результата, в общем берем на заметку.

Python для новичков » Как в дата фрейм передать объект для сортировки, название которого состоит из 2 и более слов  » Март 11, 2021 19:54:40

Всем привет

 un_df = sorted(df.Employee.unique())

Работает

Но если

 un_df = sorted(df.Order Number.unique())

Как это записать?

А если просто хочу общий вариант передать, то тогда как?
Типа х в который я буду пробрасывать значения из цикла
un_df = sorted(df.x.unique())

Пробовал, как-то не получилось

Центр помощи » Не понимаю в чем ошибка, делал бота для дискорда, начал создавать embed и все пошло на перекосяк » Март 5, 2021 13:49:12

вот код: import discord
from discord.ext import commands
from config import settings

bot = commands.Bot(command_prefix = settings) # Так как мы указали префикс в settings, обращаемся к словарю с ключом prefix.


@bot.event
async def on_ready():
activity = discord.Game(name=“!help”, type=3)
await bot.change_presence(status=discord.Status.idle, activity=activity)
print(“Bot is ready!”)

@bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях.
async def author(ctx): # Создаём функцию и передаём аргумент ctx.
author = ctx.message.author # Объявляем переменную author и записываем туда информацию об авторе.
await ctx.send(f'Автор бота = Kizz') # Выводим сообщение с упоминанием автора, обращаясь к переменной author.


@bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях.
async def rules(ctx): # Создаём функцию и передаём аргумент ctx.
em = discord.Embed(title='My Embed Title', description='My Embed Content.',colour=0xDEADBF)
em.set_author(name='Kizz', icon_url=client.user.default_avatar_url)
await client.send_message(message.channel, embed=em)


bot.run(settings) # Обращаемся к словарю settings с ключом token, для получения токена

код config.py : settings = {
‘token’: ‘token’,
‘bot’: ‘bot name’,
‘id’: id,
‘prefix’: “!”
}

Python для новичков » Проекция ламберта » Фев. 28, 2021 01:53:00

Доброго времени суток!
Нужно нарисовать точки на проекции ламберта.
Немного подсмотрев, удалось это сделать. Но хотелось бы изменить рисунок, а именно установить лимит по градусам до +90/-90 и нарисовать а95 для точек. Подскажите, пожалуйста!

import matplotlib.pyplot as plt
import numpy as np

x = np.array() #
y = np.array() #

fig = plt.figure(figsize10,10)) # задаем размер рисунка

ax = fig.add_subplot(111, projection='lambert')
ax.scatter(x, y, marker = ‘o’,color = ‘green’, s = 50)# s - размер маркера
ax.set_title('Lambert', color='blue')
ax.grid(True)

fig.savefig('mpl_temp.png') # сохраняем

plt.show()

Web » eel обработка событий » Фев. 27, 2021 21:53:48

кавыряю библиотеку eel

нарисовал формачку. а как теперь обрабатывать клик по кнопке(отправить данные)?

Python проекты » Примеры json api сервисов на aiohttp (middlewares, оболочки запросов/ответов, валидация данных) » Фев. 26, 2021 11:18:28

Cделал мидлевары для json api сервиса на aiohttp.

1. Простая мидлевара, сигнатура обработчика должна быть такой:
 async def some_handler(request: web.Request, data: Any) -> Any:
(вместо Any у data надо, конечно, ставить нужную аннотацию,.. аргументы обработчика - позиционные)

2. Мидлевара для произвольных аргументов у обработчиков, примеры объявлений обработчиков:
 async def some_handler_1(data: dict) -> int:
    # ...
    return some_data
async def some_handler_2(storage: StorageClass, data: List[int]) -> dict:
    # ...
    return some_data
async def some_handler_3(
    data: Union[dict, List[str]], logger: LoggerClass, request: web.Request
) -> str:
    # ...
    return some_data
(аргументы должны иметь аннотации)

3. Мидлевара с оболочками для запросов и ответов, и валидацией данных (может наследоваться и от 1-й и от 2-й)

Ссылка:
https://github.com/EvgeniyBurdin/api_service/tree/main

Есть докер - можно быстро запустить и посмотреть в работе.

Web » Ребят помогите с библиотекой aiogram |ниже указан вопрос| » Фев. 26, 2021 11:14:39

Ребят , как сделать вот такую функцию на aiogram:
При нажатии на кнопку ‘Активировать подписку’ выдается текст:' Bla-bla-bla(7)”, появляются кнопки: ‘’ Вернуться назад’(возвращает на шаг назад)

a. Это форма. Здесь юзер должен ввести уникальный 12-значный код (12 цифр), который он приобрел на моей сайте (ссылка в кнопках ‘оплатить подписку 30.60.90 дней).

i. Введенный текст проверяется на то что это только цифры (если не цифры, то пишем ошибку – допустимы только цифры), проверяется на 12 символов (цифр), (если не 12 цифр, то пишем ошибку – требуется 12 цифр, проверьте и вставьте код доступа заново).

ii. Если код верный (есть в списке общих кодов), то добавляем пользователя в список рассылки. (30,60, 90 дней)

b. При ошибке ввода – повторно запрашивать код.

Python для новичков » Создание теста с сохранением вопроса и ответа в БД » Фев. 25, 2021 02:05:14

День добрый, создаю форму тестирования примитивную, не могу понять, как отправить данные в базу на со списком ответов текущего пользователя. Для этого необходимо создать дополнительную таблицу с полями id_users, id_test, ( id_вопрос | id_ответ; ).Но что то я встал в ступор как создать модель и отправить данные теста со списком вопросов и ответов в БД.
urls
 from django.urls import path
from . import views
from django.conf.urls import url
urlpatterns = [
    path( '', views.TestingView.as_view(), name='test'),
    #path( '<int:pk>', views.TestingDetailView.as_view(), name='test-detail'),
    url(r'^(?P<pk>\d+)$', views.TestingDetailView.as_view(), name='test-detail'),
    url(r'^answer/(?P<pk>\d+)$', views.TestingDetailView.as_view(), name='answer'),

models
 rom django.db import models
# Create your models here.
class Testing(models.Model):
    test_name = models.CharField('Название теста', max_length=254)
    def __str__(self):
        return self.test_name
    class Meta:
        verbose_name = "Тест"
        verbose_name_plural = "Тесты"
class Questions(models.Model):
    question = models.CharField('Вопрос', max_length=254)
    id_testing = models.ForeignKey(Testing, on_delete=models.CASCADE, verbose_name='Тест', blank=True, null=True,
                                   related_name='quest_testing' )
    def __str__(self):
        return self.question
    class Meta:
        verbose_name = "Вопрос"
        verbose_name_plural = "Вопросы"
class Answer(models.Model):
    text_questions = models.TextField('Текст ответа')
    id_questions = models.ForeignKey(Questions, on_delete=models.CASCADE, verbose_name='Вопрос', blank=True, null=True,
                                   related_name='answer_quest')
    correct_answer = models.BooleanField(default=False)
    def __str__(self):
        return self.text_questions
    class Meta:
        verbose_name = "Ответ"
        verbose_name_plural = "Ответы"

views
 from django.template.context_processors import csrf
from django.shortcuts import render, redirect
# Create your views here.
# получение данных из бд
from django.views import generic
from django.views.generic.base import View
from django.views.generic import DetailView
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from .models import Testing, Questions, Answer
#Список тестов
class TestingView(View):
    def get(self, request):
        test = Testing.objects.all()
        return render(request, "testing/index.html", {"tests": test})
#Вопросы и ответы    
class TestingDetailView(DetailView, View):
    model = Testing
    template_name = 'testing/detail_view.html'
    context_object_name = 'testing'

  <h2>{{ testing.test_name }}</h2>
    {% for answer in testing.quest_testing.all %}<br><br>
        <b>{{ answer.question }}</b> / {{ answer.id }} <br>
        {% for answers in answer.answer_quest.all %}
              <form method="POST">
              {% csrf_token %}
                    <input type="radio"
                            id="id_{{ answers.id }}"
                            type="radio"
                            value="{{ answers.correct_answer }}"
                            name="radio_{{ answer.id }}" />
            {{  answers.text_questions }} <b>({{ answers.correct_answer }} / {{ answers.id }})</b><br>
        {% endfor %}
{% endfor %}
              <br><br><button type="submit" class="btn badge-primary"> Ответить </button>
                </form>
{% endblock %}


Центр помощи » Футболки » Фев. 24, 2021 11:46:51

Ограничение по времени на тест 1 секунда
Ограничение по памяти на тест 256 мегабайт
Ввод: стандартный ввод
Вывод: стандартный вывод

Тима любит футболки. В городе есть очень крутой магазин футболок, который продает футболки n цветов пронумерованных от 1 до n, включительно. В течении k дней магазин проводит масштабную акцию, где они будут продавать футболки некоторых цветов за полцены. Магазин опубликовал у себя на сайте таблицу a, где ai,j обозначает действует ли акция в i-й день на футболку цвета j (1 если действует, иначе 0). У Тимы есть порядок предпочтений цветов p, который является перестановкой чисел от 1 до n. Любимый цвет Тимы это цвет p1, второй самый любимый это цвет p2 и т.д. Каждый день в течении k дней он будет приходить в магазин, и среди тех цветов на которые действует акция в тот день, он купит одну футболку с наиболее любимым цветом. Формально, в i-й день он выберет самый минимальный j, что ai,pj=1 и купит одну футболку с цветом pj. Если в тот день нет ни одного цвета, на который действует акция, то он ничего не покупает. Тима хранит p в тайне. Какое максимальное количество различных цветов может оказаться среди футболок, которое он купил за k дней?

Входные данные
В первой строке задано два целых числа n и k (1≤n≤105, 1≤k≤14). В следующих n строках записано по k символов — элементы a. Каждый символ является либо «0», либо «1».

Выходные данные
Выведите одно целое число — максимальное количество различных цветов, которое может оказаться среди футболок.

Система оценки
Данная задача содержит 6 подзадач, в которых выполняются следующие ограничения:

Тесты из условия.
1)n, k≤2.
2)n, k≤8.
3)n, k≤14.
4)n≤10000, k≤14.
Примеры:
Input
4 3
111
110
001
110
Output
2
Input
3 3
000
000
000
Output
0

Python для новичков » Настройка openpyxl » Фев. 20, 2021 15:13:30

Всем доброго дня! Помогите пожалуйста блондинке, далекой от программирования, настроить бот…
Скопировала в библиотеку openpyxl, но при запуске IDLE выдает ошибку:
ImportError: cannot import name ‘Workbook’ from ‘openpyxl’ (unknown location)

GUI » Реализация шахмат » Фев. 14, 2021 19:09:27

Посоветуйте На чем реализовывать подобное?

Нужно не просто нарисовать квадратики доски, но и сами фигуры мышкой перетаскивать(если предпологаемый ход против правил, то фигурв уплывает обратно) рядом реализовать что то вроде коробки с фигурами откуда мышкой фигуры на доску перетаскивать. и т.п.

что лучше пользовать? pygame? или что? Интересует именно графика и её механика. Логика ироде есть.

Python для новичков » Столкнулся с проблемой с openpyel - при создании данных на втором листе, они также замещают данные на первом » Фев. 6, 2021 20:17:13

Столкнулся с проблемой с openpyel - при создании данных на втором листе, они также замещают данные на первом. Создал файл Excel wb_new, в нем на лист ns импортировал данные из Word. В коде ниже создаю второй лист в этой книге ns_new, куда переношу данные с первого листа, заполняя пустые ячейки таблицы.
Второй лист формируется нормально, но проблема в том, что при этом первый лист становится точно таким же, как и второй, хотя я в него никакие изменения не вношу. Помогите, пожалуйста, разобраться.
 def edit_xlsx():
    global ns, wb_new, document
    wb_new.save("word-to-excel_temp.xlsx")
    max_row = 0
    wb_new.create_sheet(index=2,title="FullFill Sheet")
    ns_new = wb_new['FullFill Sheet']
    wb_new.save('word-to-excel.xlsx')
    column_max = ns.max_column
    row_max = ns.max_row
    for i in range(1, column_max+1, 1):
        for n in range(1, row_max +1, 1):
            new_row = max_row + n
            d = ns.cell(row=n, column=i)
            g = ns.cell(row=n + 1, column=i)
            if d.value != None:
                if g.value == None and n <= row_max and i <= column_max:
                       g.value = d.value
            new_d = ns_new.cell(row=new_row, column=i)
            new_d.value = d.value
            wb_new.save('word-to-excel.xlsx')

Python для новичков » Проблема с googletraslate » Фев. 5, 2021 13:29:20

Всем привет!
Есть вот такой скрипт.

 import re
import googletrans
from googletrans import Translator
translator = Translator()
eng_file=open("file.txt", "r")
line_en=eng_file.readline()
while line_en:
 line_en=re.sub(r'<[^<]+>', "",line_en)
 result = translator.translate(line_en.strip(),src='en',dest='ru')
 print(result.text)
 line_en=eng_file.readline()
eng.file.close()

Он достаёт текст из тегов и пытается перевести его через гугл.
Проблема в том, что он сработал один раз, показав вывод на Русском и перестал переводить….
То есть при выполнения скрипта на выводе я получаю исходный текст на английском.

Думал, что может ограничения гугла какое, но при выполнении скрипта на другом компе с другим IP результат тот же.

Образец содержимого файла file.txt

   <string name="login_OK">Login successful!</string>
<string name="login_wrong_pin">Wrong PIN!</string>
<string name="login_already_logged">Already logged in on: </string>
<string name="login_code_error">Server error!</string>
<string name="login_licence">Licence problem!</string>
<string name="logout_Selected">Logout selected</string>
<string name="logout_All">Logout all</string>
<string name="submit_all">Submit for all</string>