Encuentra los mejores trabajos freelance de Python!

Encuentra trabajo freelance en los mejores proyectos de Python. Los mejores Programadores y Diseñadores Web para aplicaciones desktop, mobile apps, sitios web, e-commerce, IT, desarrollo web y de software están en Workana.

Workana es la primera y más grande red de trabajo freelance y remoto de Latinoamérica. Mira los últimos proyectos publicados de Python y envía tu propuesta ahora. Si estás buscando freelancers de Python para trabajar en tu proyecto visita esta página. También puedes publicar tu propio proyecto gratis.

Hace 1 hora

Mobilender

Desarrollo de App para empresas particulares según su modelo que nos contrate en base a sus necesidades, trabajamos con instituciones financieras realizando proyectos para eficientar sus operaciones, bajar costos y reducir tiempos, por eso desarrollamos plataformas y apps para ellos, generalmente en el ámbito del otorgamiento de créditos por medio de una app o pagina web.

Categoría: IT & Programación
Subcategoría: Programación para móviles
¿Cuál es el alcance del proyecto?: Crear una aplicación nueva
Es un proyecto o una posición?: Posición de largo plazo
Actualmente tengo: Tengo las especificaciones
Experiencia en este tipo de proyectos: Si (He administrado este tipo de proyectos anteriormente)
Disponibilidad requerida: Tiempo completo
Integraciones de API: Social media (Facebook, Twitter, etc), Payment Processor (Paypal, Stripe, etc), Cloud Storage (Dropbox, Google Drive, etc), Otros (Otras APIs)
Plataformas requeridas: iPhone, Android
Habilidades requeridas:

Abierto

Necesitamos una funcion que reconozca personas por la webcam y las cuente, y ese valor lo guarde en una base de datos.

Categoría: IT & Programación
Subcategoría: Aplicaciones de escritorio
¿Cuál es el alcance del proyecto?: Crear una aplicación nueva
Es un proyecto o una posición?: Un proyecto
Actualmente tengo: Tengo el diseño
Experiencia en este tipo de proyectos: Si (He administrado este tipo de proyectos anteriormente)
Disponibilidad requerida: Según se necesite
Plataformas requeridas: Windows, Mac OS, Linux / Unix
Habilidades requeridas:

Abierto

Ao começar, entrego as especificações detalhadas. Anteriormente já administrei este tipo de projetos. Considerar que este projeto deve incluir uma integração com redes sociais e API. O freelancer deverá exercer a função de designer e exercer a função de desenvolvedor. Quero contratar alguém para um projeto. Pagarei por a totalidade do projeto finalizado. Procuro alguém para que trabalhe variando de tempo parcial a integral conforme seja necessário.

Categoria: IT & Programação
Subcategoria: Programação
Qual é o alcance do projeto?: Alteração média
Isso é um projeto ou uma posição de trabalho?: Um projeto
Tenho, atualmente: Eu tenho especificações
Experiência nesse tipo de projeto: Sim (Eu já gerenciei esse tipo de projeto)
Disponibilidade requerida: Conforme necessário
Funções necessárias: Designer, Desenvolvedor
Integrações de API: Mídias sociais (Facebook, Twitter, etc), Outros (Outras APIs)
Habilidades requeridas:

Abierto

Busco un programador que sea capaz de desarrollar un software que conecte a un dispositivo de diagnosis (BMW Scanner) para poder monitorear todo el sistema eléctrico de cualquier coche de marca BMW, sin más rodeos.. algo como el famoso BMW Scanner de P.A. Soft, pero en Español..

Categoría: IT & Programación
Subcategoría: Aplicaciones de escritorio
¿Cuál es el alcance del proyecto?: Crear una aplicación nueva
Es un proyecto o una posición?: Un proyecto
Actualmente tengo: Tengo una idea
Experiencia en este tipo de proyectos: No (No he administrado este tipo de proyectos anteriormente)
Disponibilidad requerida: Según se necesite
Plataformas requeridas: Windows
Habilidades requeridas:

Abierto

Desenvolver um sistema de gestão online para clinicas. Cadastro de Clientes, Controle de Agendamento, Contas a Pagar, Contas a Receber, integração com sistema de envio de e-mail (sendgrid, mailchimp). Ficha de Avaliação etc.

Hoje utilizo um sistema (alugado) que não é online irei usar ele como base para o desenvolvimento do novo. Existe a intenção de futuramente comercializar o sistema sendo que o desenvolvedor poderá fazer parte da sociedade.

Preferência por desenvolvedores da região de São Paulo Capital e adjacências

Categoria: IT & Programação
Subcategoria: Outros
Tamanho do projeto: Médio
Isso é um projeto ou uma posição de trabalho?: Eu não sei ainda
Tenho, atualmente: Eu tenho uma ideia geral
Experiência nesse tipo de projeto: Não (Eu nunca gerenciei esse tipo de projeto)
Disponibilidade requerida: Conforme necessário
Integrações de API: Mídias sociais (Facebook, Twitter, etc), Outros (Outras APIs)
Habilidades requeridas:

Abierto

En Marzo People necesitamos un profesional con conocimientos:
iOS
ANDROID
PYTHON
HTML5 + JAVA + PHP

Para un importante cliente, entidad financiera de nueva generación especializada en la emisión de dinero electrónico y servicios de pago, autorizada por el Ministerio de Economía y Competitividad como Entidad de Dinero Electrónico y bajo la supervisión del Banco de España.



Categoría: IT & Programación
Subcategoría: Programación Web
¿Cuál es el alcance del proyecto?: Bug o cambio pequeño
Es un proyecto o una posición?: Un proyecto
Actualmente tengo: No aplica
Experiencia en este tipo de proyectos: No (No he administrado este tipo de proyectos anteriormente)
Disponibilidad requerida: Según se necesite
Roles necesarios: Desarrollador
Integraciones de API: Otros (Otras APIs)
Habilidades requeridas:

Abierto

Hace 3 días

Progamacion python

La empresa “Corporación Tecnologica de Sistemas, ltd”, requiere una aplicación para el control del pago de nómina de su personal por cada mes.
Los datos (campos por registro lógico) por cada empleado son:
• Rut
• Nombre y apellido
• Dirección
• Teléfono
• Departamento donde trabaja
• Sueldo Bruto
• Estado de horas extras: d=diurnas / n=nocturnas
• Nro de horas diurnas y/o nocturnas
• Estado: f=fonasa / i=isapre / a=AFP

1.- Use un menú, que accione de acuerdo con la opción ingresada por el usuario. (20 puntos)
• El menú principal debe permiter el acceso a :
o Ingreso de datos del trabajador
o Calculos de horas extras de cada trabajador
o Calculo de las imposiciones del trabajador
o Consulta por rut, (Listar sueldo liquido final de cada trabajador)
o Salir

• Despues de cada opción se debe retornar al menú principal.

2.- Ingreso de datos del trabajador en archivo
El ingreso de datos se realiza mientras lo desee el usuario (n trabajadores)
• Ingreso de datos por cada trabajador (validar que el sueldo bruto este entre 260000 y 1000000)
Nota: Si el archivo ya existe, los nuevos registros se deben agregar sin eliminar los anteriores)

3.- Calculo de las horas extras por cada trabajador:
Las horas extras se calcularan dependiendo si son diurnas o nocturnas y se sumaran al Sueldo Bruto de acuerdo a las siguientes condiciones:
1 hora extra = (Sueldo Bruto / 26 días x mes) / 8 horas diarias
Si las horas extras son diurnas, el calculo será:
1 hora extra diurna = (1 hora extra x Nro de horas diurnas trabajadas) + (1 hora extra x Nro de horas diurnas trabajadas) * 35%
Si las horas extras son nocturnas, el calculo será:
1 hora extra nocturna = (1 hora extra x Nro de horas nocturnas trabajadas) + (1 hora extra x Nro de horas nocturnas trabajadas) * 75%

4.- Calculo de las imposiciones por cada trabajador :
Las imposiciones se calcularan, y se restaran del Sueldo Bruto
Imposiciones = fonosa o isapre + AFP
(un trabajador debe tener o fonasa o isapre) el interes aplicado a cualquiera de las 2 será de 7% sobre el Sueldo Bruto y de la AFP será de un 10% sobre ese Sueldo Bruto

5.- Consultas :
• Consulta por Rut
Las consultas se hacen con los registros almacenados en el archivo de datos.
Nota:
y por último el calculo del Sueldo Liquido Total Mensual se calculará de la siguiente forma:
Sueldo Liquido = Sueldo Bruto + horas extras - imposiciones


Categoría: IT & Programación
Subcategoría: Otros
Tamaño del proyecto: Pequeño
Es un proyecto o una posición?: Un proyecto
Actualmente tengo: Tengo las especificaciones
Experiencia en este tipo de proyectos: No (No he administrado este tipo de proyectos anteriormente)
Disponibilidad requerida: Según se necesite
Habilidades requeridas:

Abierto

Pessoal, eu preciso criar um sistema que possa pegar videos de uma conta premium do Vimeo (ou até mesmo do Youtube) e tornar o download impossível ou muito complexo de ser feito.

Isso já é feito por sites como NetFlix, iTunes, Amazon Prime Videos, Globo Play. Nesses sites você consegue assistir os filmes, mas, fazer o download é quase impossível. Mesmo programas que são feitos para baixar qualquer coisa, como o Internet Download Manager, costuma não conseguir.

O MPEG-DASH é o padrão que provavelmente será adotado para a transmissão de vídeos na Internet nos próximos anos. Além de ter recursos similares ao HLS – de baixar fragmentos dos vídeos, economizando banda do usuário final e do servidor.

Tem um pessoal que fez isso e disse o seguinte:
"Vídeos estão na Amazon S3.
Nossa plataforma é em python, mas para converter usamos Go & Python.
Para a integração com a DRM é python, mas basicamente comunicação de APIs, então é independente de linguagem"

Assim como o HLS, o MPEG-DASH é capaz de trabalhar de forma adaptativa, ou seja, ele é capaz de adaptar a qualidade do vídeo baseado na velocidade de sua conexão.

Diferentemente do HLS, uma das grandes vantagens do MPEG-DASH, é que ele é totalmente compatível com HTML 5, inclusive em browsers desktop.

Agora a pergunta que não quer calar: Trabalhar com MPEG-DASH evita que os usuários façam download e distribuam seu conteúdo? Se você trabalhar APENAS com MPEG-DASH a resposta é bem simples: NÃO.

Como então utilizar o protocolo mais moderno da atualidade (MPEG-DASH) e ainda ter a possibilidade de proteger o conteúdo?

A resposta para essa pergunta possui 3 letras: DRM, ou Digital Rights Management.
DRM: Digital Rights Management

A DRM foi uma solução encontrada para minimizar e proteger o download e distribuição ilegal de mídias, como áudio e vídeo.

Basicamente, vídeos que trabalham com DRM são criptografados e precisam de uma licença para poderem ser executados. A grande diferença nesse caso, é que, diferentemente do HLS com criptografia, a licença é enviada diretamente para um CDM (Content Decription Media). O CDM normalmente vem instalado por padrão nos browsers para que eles sejam capazes de descriptografar os arquivos protegidos pela DRM.

Hoje temos 3 principais CDMs no mercado:

Widevine, da Google que normalmente vem instalada por padrão no Google Chrome, Firefox, Opera, etc.
Play Ready, da Microsoft e é a solução utilizada pelo Microsoft Edge por exemplo.
Fair Play, da Apple, utilizada especificamente pelo Safari.

A parte mais interessante do processo é como a DRM gera essa licença, permitindo que um determinado usuário possa assistir a um conteúdo. De maneira simplificada temos:
Cada vídeo no formato MPEG-DASH possui um “arquivo de manifesto” possuindo a key que foi utilizada para criptografar seus fragmentos. Normalmente esse arquivo possui a extensão “mpd”.
Quando uma solicitação de reprodução do vídeo é realizada, o browser envia para o servidor os dados do vídeo mais as informações específicas do usuário que solicita a licença. O servidor de DRM faz uma requisição de volta para o servidor de aplicação “perguntando” se o usuário tem a permissão para ver especificamente aquele vídeo. O servidor de aplicação responde SIM ou NÃO. Caso sim, o servidor de DRM libera (issue) a licença que é passada para o CDM do browser e o vídeo é finalmente reproduzido.
Isso significa que se você baixar todos os fragmentos dos arquivos do MPEG-DASH, você não será capaz de descriptografar e nem mesmo conseguir o “certificado” como acontece no HLS. A única forma de conseguir a licença é através da autenticação da DRM.
A grande desvantagem da DRM, é que ela é uma solução cara, principalmente pelo fato de precisamos de pelo menos 3 empresas para fornecer esse serviço: Google, Microsoft e Apple.

Por Wesley Willians em 24/02/2017
Aprenda programação e desenvolvimento web
Se você é ou já foi aluno da School of Net entre o meio de 2016 até o início de Janeiro de 2017, deve ter percebido nossa maior deficiência: O Player com suas tecnologias de vídeo, bem como, a pobre experiência que ele oferecia. Problemas como: O vídeo ficar “engasgando” em alguns momentos, ou mesmo retroceder 2 segundos e continuar tocando. O player utilizado não fornecia o recurso um recurso essencial nos dias de hoje: aceleração do vídeo. Além disso, o flash player era obrigatório.
No momento da publicação desse post, a School of Net já possui mais de 220 cursos focados em programação e desenvolvimento web com quase 3500 vídeos publicados.banner-aprenda-programacao
A grande questão que muitos perguntavam é: Por que a School of Net não utiliza alguma das várias opções de players HTML 5 que existem no mercado que incluem esses recursos? Esse questionamento era feito a todo momento.
No mundo aonde o conteúdo em vídeo é “rei”, onde todo seu modelo de negócio depende essencialmente desse recurso, temos um grande “trade off”:
Como fornecer a melhor experiência ao usuário, mas ainda proteger seu conteúdo para evitar que eles caiam em sites como MEGA ou mesmo em torrents?
Lembre-se, a School of Net trabalha com modelo de assinatura, ou seja, se todo nosso conteúdo vazar, não há porque os usuários continuarem renovando.
Relacionado: Conheça nosso plano de assinatura com acesso a todos os cursos do site
Acredite, mudamos para uma diferente empresa a qual fornecia as transmissões de vídeos razoavelmente seguras. O player era bem melhor, apesar de ser em flash. Foram apenas 15 dias para que diversos vídeos estivessem sendo espalhados para download. Alguns camaradas que adoram distribuir conteúdos de terceiro começaram a fazer a festa.
Resolvemos então deixar de buscar empresas que trabalham com transmissão de vídeos e decidimos resolver o problema “dentro de casa”. Depois de muito trabalho de pesquisa, implementações, contratação de diversas soluções, finalmente implementamos nossa nova estrutura de vídeos, bem como a utilização de um player HTML 5 de qualidade.
Escrevo então esse post para compartilhar o conhecimento adquirido e apresentar qual a solução que acabamos implementando.
Mas afinal, o que está por trás das tecnologias de transmissão de vídeos. Como isso funciona?

Independente de player, temos 4 tipos principais de meios / protocolos de transmissão:
Download progressivo
RTMP
HLS
MPEG-DASH
Download progressivo (progressão automática):

video-download-progessivo
Essa é a forma mais simples e comum de transmissão de vídeos. Simplesmente você aponta qualquer player HTML 5, ou mesmo a tag do HTML diretamente para um arquivo mp4 e o vídeo começará ser baixado no navegador e reproduzido no player.
Temos duas desvantagens nesse caso:
O arquivo é facilmente copiado
Mesmo que você queira assistir apenas alguns segundos do vídeo, ele é baixado por completo em seu computador. Isso faz com que o seu tráfego de dados seja muito grande.
RTMP: Real Time Messaging Protocol

video-rtmp
Criado pela Macromedia / Adobe, esse protocolo por muitos anos foi a mais utilizado e recomendado, uma vez que ele é extremamente leve, rápido, trabalha como streaming, ou seja, a transmissão para seu computador é realizada em tempo real, ao invés do conteúdo do vídeo ser baixado pelo browser como no caso da Donwload progressivo.
Mas nem tudo são flores. Para trabalhar com RTMP, você é obrigado a utilizar o Flash Player e o recurso de aceleração torna-se quase inviável, uma vez que o streaming é feito em tempo real.
A grande vantagem do RTMP é que você pode utilizar servidores de vídeo, como Wowza Video Server e eventualmente customizá-lo para criar uma camada de segurança que realmente consegue evitar o download do vídeo de uma forma realmente fantástica, tornando extremamente complexa a tentativa de download do vídeo, uma vez que toda a informação precisa ser capturada via proxy antes mesmo dela chegar no browser do usuário.
Essa foi a solução que utilizamos durante muito tempo na Code.education (nossa outra marca para venda de cursos Premium) e também na School of Net. Essa solução protegia nosso conteúdo, mas estava deixando nossos usuários MUITO insatisfeitos, principalmente os que não possuíam uma boa conexão, uma vez que o streaming é feito em tempo real, causando possíveis travamentos (como descrevi no início desse artigo).
HLS: HTTP Live Streaming

video-hls
Criado pela Apple, o HLS veio como uma solução realmente muito bem elaborada para a transmissão de vídeos. Além de não necessitar de servidores específicos, o vídeo quando utiliza esse protocolo possui um processo de “Packaging” onde são criados dezenas de arquivos pequenos (com a extensão: *.ts, normalmente).
A grande vantagem do HLS, é de que o vídeo é servido aos poucos, através do download dos arquivos .ts. Porém, é possível configurar o tempo máximo de buffer, logo, o vídeo não é baixado inteiramente em seu computador se você quiser assistir apenas uma pequena parte (diferente do que acontece no caso do download progressivo). Repare por exemplo no youtube, mesmo que você der play no vídeo e depois um pause, o mesmo não é bufferizado por completo. (isso não significa que o youtube utiliza necessariamente HLS).
Para você conseguir baixar e ter um mp4 de um vídeo que trabalha com HLS, você precisa pegar todos os arquivos .ts, “grudá-los” e convertê-los para um único arquivo MP4. Existem diversos softwares no mercado que já fazem isso.
HLS com criptografia AES:

video-hls-criptografia
Essa foi nossa solução adotada por alguns meses na School of Net. Quando você trabalha com HLS com criptografia, significa que os arquivos .ts são criptografados, logo, se você baixá-los e fazer a concatenação dos mesmos, o vídeo não será reproduzido pelo fato dos .ts’ estarem criptografados.
O grande ponto é que para o browser descriptografar esses arquivos .ts, ele precisa de um certificado que é gerado durante a conversão do vídeo no formato HLS, ou seja:
Arquivos .ts + Certificado baixado pelo browser = arquivos .ts que podem ser reproduzidos, “grudados” e transformados em MP4.
Alguns softwares são capazes de baixar o arquivo do certificado e utilizá-lo para descriptografar e depois “grudar” os arquivos .ts e gerar o MP4. Foi exatamente isso que aconteceu conosco quando utilizamos HLS. O pessoal que queria distribuir nosso conteúdo de forma gratuita na Internet achou softwares que faziam isso. Mais uma vez nosso conteúdo estava desprotegido e sendo rapidamente distribuído.
O HLS também possui uma grande restrição. No formato HTML 5, ele funciona apenas em versão mobile. Para desktop, novamente você tem que utilizá-lo com o nosso velho amigo: Flash Player.

MPEG-DASH: Dynamic Adaptive Streaming over HTTP

video-mpeg-dash
O MPEG-DASH é o padrão que provavelmente será adotado para a transmissão de vídeos na Internet nos próximos anos. Além de ter recursos similares ao HLS – de baixar fragmentos dos vídeos, economizando banda do usuário final e do servidor.
Assim como o HLS, o MPEG-DASH é capaz de trabalhar de forma adaptativa, ou seja, ele é capaz de adaptar a qualidade do vídeo baseado na velocidade de sua conexão.
Diferentemente do HLS, uma das grandes vantagens do MPEG-DASH, é que ele é totalmente compatível com HTML 5, inclusive em browsers desktop.
Agora a pergunta que não quer calar: Trabalhar com MPEG-DASH evita que os usuários façam download e distribuam seu conteúdo? Se você trabalhar APENAS com MPEG-DASH a resposta é bem simples: NÃO.
Como então utilizar o protocolo mais moderno da atualidade (MPEG-DASH) e ainda ter a possibilidade de proteger o conteúdo?
A resposta para essa pergunta possui 3 letras: DRM, ou Digital Rights Management.
DRM: Digital Rights Management

video-mpeg-dash-drm
Netflix, iTunes, Amazon Prime Videos, Globo Play, etc são serviços de referência na utilização de DRM para proteção de seus conteúdos. Afinal, os grandes estúdios de Hollywood não querem que seus filmes possam ser baixados e distribuídos tão facilmente através desses novos serviços pagos de vídeo “on demand”.
A DRM foi uma solução encontrada para minimizar e proteger o download e distribuição ilegal de mídias, como áudio e vídeo.
Basicamente, vídeos que trabalham com DRM são criptografados e precisam de uma licença para poderem ser executados. A grande diferença nesse caso, é que, diferentemente do HLS com criptografia, a licença é enviada diretamente para um CDM (Content Decription Media). O CDM normalmente vem instalado por padrão nos browsers para que eles sejam capazes de descriptografar os arquivos protegidos pela DRM.

Hoje temos 3 principais CDMs no mercado:logo-drm

Widevine, da Google que normalmente vem instalada por padrão no Google Chrome, Firefox, Opera, etc.
Play Ready, da Microsoft e é a solução utilizada pelo Microsoft Edge por exemplo.
Fair Play, da Apple, utilizada especificamente pelo Safari.
A parte mais interessante do processo é como a DRM gera essa licença, permitindo que um determinado usuário possa assistir a um conteúdo. De maneira simplificada temos:
Cada vídeo no formato MPEG-DASH possui um “arquivo de manifesto” possuindo a key que foi utilizada para criptografar seus fragmentos. Normalmente esse arquivo possui a extensão “mpd”.
Quando uma solicitação de reprodução do vídeo é realizada, o browser envia para o servidor os dados do vídeo mais as informações específicas do usuário que solicita a licença. O servidor de DRM faz uma requisição de volta para o servidor de aplicação “perguntando” se o usuário tem a permissão para ver especificamente aquele vídeo. O servidor de aplicação responde SIM ou NÃO. Caso sim, o servidor de DRM libera (issue) a licença que é passada para o CDM do browser e o vídeo é finalmente reproduzido.
Isso significa que se você baixar todos os fragmentos dos arquivos do MPEG-DASH, você não será capaz de descriptografar e nem mesmo conseguir o “certificado” como acontece no HLS. A única forma de conseguir a licença é através da autenticação da DRM.
A grande desvantagem da DRM, é que ela é uma solução cara, principalmente pelo fato de precisamos de pelo menos 3 empresas para fornecer esse serviço: Google, Microsoft e Apple.
Sobre a tecnologia de vídeos da School of Net

Depois de colocarmos tudo na balança, optamos por adotar o MPEG-DASH + DRM. Com isso, podemos fornecer nossos vídeos de maneira Multiplataforma utilizando um player HTML 5 leve, elegante e finalmente com o recurso de aceleração.

Qual player para isso?

Há um player chamado Clappr (https://github.com/clappr/clappr) que possui suporte a DRM e diversos outros plugins. O Clappr recebe frequentemente diversas contribuições no Github, inclusive pelo pessoal da Globo.com.

Categoria: IT & Programação
Subcategoria: Programação
Qual é o alcance do projeto?: Criar um novo site personalizado
Isso é um projeto ou uma posição de trabalho?: Um projeto
Tenho, atualmente: Eu tenho uma ideia geral
Experiência nesse tipo de projeto: Não (Eu nunca gerenciei esse tipo de projeto)
Disponibilidade requerida: Conforme necessário
Funções necessárias: Desenvolvedor
Integrações de API: Outros (Outras APIs)
Habilidades requeridas:

Abierto

A ideia inicial é bem simples: uma pizzaria low-cost delivery, onde o cliente pode escolher e montar a pizza de acordo com os ingredientes listados no website e o preço final é dado de acordo com os ingredientes escolhidos.

Requisitos essenciais:
- Login com o facebook;
- Opções de pagamento online/presencial;
- Website responsivo e o mais leve possível;

Quanto a linguagem usada, não faço muita questão, isso é algo que pode ser conversado, no entanto, vou dar prioridade para linguagens mais leves que respondam mais rapidamente aos comandos.

Outras funcionalidades serão introduzidas no futuro, esse é apenas um protótipo que ainda não tem data para funcionar, portanto teremos uma relativa "flexibilidade" quanto aos prazos.

Qualquer dúvida, estou à disposição :)

Categoria: IT & Programação
Subcategoria: Programação
Qual é o alcance do projeto?: Criar um novo site personalizado
Isso é um projeto ou uma posição de trabalho?: Um projeto
Tenho, atualmente: Eu tenho uma ideia geral
Experiência nesse tipo de projeto: Não (Eu nunca gerenciei esse tipo de projeto)
Disponibilidade requerida: Conforme necessário
Funções necessárias: Desenvolvedor
Integrações de API: Mídias sociais (Facebook, Twitter, etc), Payment Processor (Paypal, Stripe, etc)
Habilidades requeridas:

Abierto

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Desafio 2:\n",
"## Modifique el codigo entregado, de modo de calcular la probabilidad de ganar una mano de texas holdem poker, si usted tiene en mano un par de cartas contra sólo un rival. Puede corroborar sus calculos en la pagina www.pokercalculatoronline.com\n",
"\n",
"Se entrega la clase baraja que contiene los siguientes metodos:\n",
" Escoger: Saca una carta fija de la baraja.\n",
" Sacar: Saca una carta aleatoria de la baraja.\n",
" Reset: Elimina las cartas sacadas, cada vez que termina un juego se debe resetear la baraja."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import random"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class Baraja:\n",
" # La idea es que genera numeros aleatorios entre 0 y 51 que no se repiten\n",
" \n",
" def __init__(self):\n",
" self.sacadas = []\n",
" \n",
" def reset(self):\n",
" self.sacadas = []\n",
"\n",
" def escoger(self, num):\n",
" if num not in self.sacadas:\n",
" self.sacadas.append(num)\n",
" \n",
" def sacar(self):\n",
" while True:\n",
" aleat = random.randint(0,51)\n",
" if aleat not in self.sacadas:\n",
" self.sacadas.append(aleat)\n",
" return aleat"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La clase ManoPoker puede elegir o sacar aleatoriamente las cartas de una baraja.\n",
" Tiene un operador < y otro ==, ojala esten buenos, si tiene algun problema reparelo y tiene puntos extra.\n",
" Fijese en los ejemplos de abajo, para ver como se valoran las manos.\n",
" La idea es modificar esta clase de modo que pueda contener 7 cartas y cree las 21 combinaciones posibles y descarte las cartas peores, de modo de quedarse con la mejor mano posible.\n",
" Revise la clase 10 del Profesor Ferres, puede usar itertools para las combinaciones y el operador < para saber cual es la mejor mano."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class ManoPoker:\n",
" # Coleccion de 5 cartas que se sacan de una baraja\n",
" \n",
" def __init__(self, b, c1=-1, c2=-1, c3=-1, c4=-1, c5=-1):\n",
" self.veces = [0,0,0,0,0,0,0,0,0,0,0,0,0]\n",
" if c1 == -1:\n",
" c1 = b.sacar()\n",
" if c2 == -1:\n",
" c2 = b.sacar()\n",
" if c3 == -1:\n",
" c3 = b.sacar()\n",
" if c4 == -1:\n",
" c4 = b.sacar()\n",
" if c5 == -1:\n",
" c5 = b.sacar()\n",
" self.cartas = [c1,c2,c3,c4,c5]\n",
" for i in self.cartas:\n",
" self.veces[i//4] += 1 \n",
"\n",
" def __eq__(self, otro):\n",
" if otro.num_escalacolor() > 0 and self.num_escalacolor() == otro.num_escalacolor():\n",
" return True\n",
" if otro.num_poker() > 0 and self.num_poker() == otro.num_poker():\n",
" return True\n",
" if otro.num_full() > 0 and self.num_full() == otro.num_full():\n",
" return True\n",
" if otro.num_color() > 0 and self.num_color() == otro.num_color():\n",
" return True\n",
" if otro.num_escala() > 0 and self.num_escala() == otro.num_escala():\n",
" return True\n",
" if otro.num_trio() > 0 and self.num_trio() == otro.num_trio():\n",
" return True\n",
" if otro.num_dospares() > 0 and self.num_dospares() == otro.num_dospares():\n",
" return True\n",
" if otro.num_par() > 0 and self.num_par() == otro.num_par():\n",
" return True\n",
" if self.carta_alta() == otro.carta_alta():\n",
" return True\n",
" return False\n",
" \n",
" def __lt__(self, otro):\n",
" if otro.num_escalacolor()>0 and self.num_escalacolor()<otro.num_escalacolor():\n",
" return True\n",
" if self.num_escalacolor()>0:\n",
" return False\n",
" if otro.num_poker() > 0 and self.num_poker() < otro.num_poker():\n",
" return True\n",
" if self.num_poker()>0:\n",
" return False\n",
" if otro.num_full() > 0 and self.num_full() < otro.num_full():\n",
" return True\n",
" if self.num_full()>0:\n",
" return False\n",
" if otro.num_color() > 0 and self.num_color() < otro.num_color():\n",
" return True\n",
" if self.num_color()>0:\n",
" return False\n",
" if otro.num_escala() > 0 and self.num_escala() < otro.num_escala():\n",
" return True\n",
" if self.num_escala()>0:\n",
" return False\n",
" if otro.num_trio() > 0 and self.num_trio() < otro.num_trio():\n",
" return True\n",
" if self.num_trio()>0:\n",
" return False\n",
" if otro.num_dospares() > 0 and self.num_dospares() < otro.num_dospares():\n",
" return True\n",
" if self.num_dospares()>0:\n",
" return False\n",
" if otro.num_par() > 0 and self.num_par() < otro.num_par():\n",
" return True\n",
" if self.num_par()>0:\n",
" return False\n",
" if self.carta_alta() < otro.carta_alta():\n",
" return True\n",
" return False\n",
" \n",
" \n",
" def __str__(self):\n",
" texto = \"[ \"\n",
" for i in self.cartas:\n",
" num = (i//4)+1\n",
" pin = i%4\n",
" if num == 1:\n",
" texto += \"A\"\n",
" elif num == 11:\n",
" texto += \"J\"\n",
" elif num == 12:\n",
" texto += \"Q\"\n",
" elif num == 13:\n",
" texto += \"K\"\n",
" else:\n",
" texto += str(num)\n",
" if pin == 0:\n",
" texto += \"-Corazon \"\n",
" elif pin == 1:\n",
" texto += \"-Diamante \"\n",
" elif pin == 2:\n",
" texto += \"-Pica \"\n",
" else:\n",
" texto += \"-Trebol \"\n",
" texto += \"]\"\n",
" return texto\n",
" \n",
" def num_color(self):\n",
" if self.cartas[0]%4 == self.cartas[1]%4 and \\\n",
" self.cartas[0]%4 == self.cartas[2]%4 and \\\n",
" self.cartas[0]%4 == self.cartas[3]%4 and \\\n",
" self.cartas[0]%4 == self.cartas[4]%4:\n",
" return self.carta_alta()\n",
" else:\n",
" return 0\n",
" \n",
" def num_escala(self):\n",
" for i in range(13, 3, -1):\n",
" if veces[i%13] == 1 and \\\n",
" veces[i-1] == 1 and \\\n",
" veces[i-2] == 1 and \\\n",
" veces[i-3] == 1 and \\\n",
" veces[i-4] == 1:\n",
" return (i+1)\n",
" return 0\n",
" \n",
" def num_poker(self):\n",
" for i in range(13, 0, -1):\n",
" if self.veces[i%13] == 4:\n",
" return (i+1)*100+self.carta(1)\n",
" return 0\n",
" \n",
" def num_escalacolor(self):\n",
" if self.num_color() > 0 and self.num_escala() > 0:\n",
" return num_color()\n",
" return 0\n",
" \n",
" def num_trio(self):\n",
" if self.trio() > 0:\n",
" return self.trio()*10000 + self.carta(1)*100 + self.carta(2)\n",
" return 0\n",
" \n",
" def cant_pares(self):\n",
" cant = 0\n",
" for j in self.veces:\n",
" if j == 2:\n",
" cant += 1\n",
" return cant\n",
" \n",
" def num_full(self):\n",
" if self.num_trio() > 0 and self.num_par(1) > 0:\n",
" return self.trio()*100+self.par(1)\n",
" return 0\n",
" \n",
" def num_dospares(self):\n",
" if self.cant_pares() == 2:\n",
" return self.par(1)*10000+self.par(2)*100+self.carta(1)\n",
" return 0\n",
" \n",
" def num_par(self):\n",
" if self.cant_pares() == 1:\n",
" return self.par(1)*1000000+self.carta(1)*10000+self.carta(2)*100+self.carta(3)\n",
" return 0\n",
" \n",
" def carta_alta(self):\n",
" return self.carta(1)*100000000+self.carta(2)*1000000+self.carta(3)*10000+self.carta(4)*100+self.carta(5)\n",
" \n",
" def trio(self):\n",
" for i in range(13,0,-1):\n",
" if self.veces[i%13] == 3:\n",
" return i+1\n",
" return 0\n",
"\n",
" def carta(self, num):\n",
" n = 0\n",
" for i in range(13,0,-1):\n",
" if self.veces[i%13] == 1:\n",
" n += 1\n",
" if n == num:\n",
" return i+1\n",
" return 0\n",
" \n",
" def par(self, num):\n",
" n = 0\n",
" for i in range(13,0,-1):\n",
" if self.veces[i%13] == 2:\n",
" n += 1\n",
" if n == num:\n",
" return i+1\n",
" return 0"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b = Baraja()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"m1 = ManoPoker(b,0,1,2,3,4)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ A-Corazon A-Diamante A-Pica A-Trebol 2-Corazon ]\n"
]
}
],
"source": [
"print(m1)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1402"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m1.num_poker()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"m2 = ManoPoker(b, 5,6,7)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 2-Diamante 2-Pica 2-Trebol 3-Pica Q-Trebol ]\n"
]
}
],
"source": [
"print(m2)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"21203"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m2.num_trio()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m1 < m2"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"m3 = ManoPoker(b)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 7-Corazon 2-Trebol 7-Pica 10-Trebol K-Trebol ]\n"
]
}
],
"source": [
"print(m3)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"7131002"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m3.num_par()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}


Categoría: IT & Programación
Subcategoría: Otros
Tamaño del proyecto: Pequeño
Es un proyecto o una posición?: Un proyecto
Actualmente tengo: Tengo las especificaciones
Experiencia en este tipo de proyectos: No (No he administrado este tipo de proyectos anteriormente)
Disponibilidad requerida: Según se necesite
Habilidades requeridas:

Abierto