He pensado que podria ser interesante hacer un juego sobre python, como los tipicos que se hacen en foros adivinando peliculas que ya todos conocereis. El juego consistiria en plantear un ejercicio y el resto tendriamos que desarrollar el algoritmo y postearlo. Quien antes mande su algoritmo, propondria un nuevo ejercicio.
Deberiamos respetar una curva de aprendizaje donde cada vez los ejercicios fuesen mas complicados o tratasen aspectos diferentes, pero sin saltos excesivamente marcados en su dificultad. Y los ejercicios podrian ser tanto de creacion de algoritmos, depurar un algoritmo ya creado pero que tenga algun fallo o mejorar uno haciendolo mas simple y legible. Cualquier cosa que nos haga pensar y darle vueltas al coco jeje
Creo que puede ser bueno para los que empiezan, con esto de la programacion, motivandonos y compartiendo nuestro aprendizaje. :P
Asi que aqui dejo el primer ejercicio:
-Crear un lanzador de tiradas de dados, donde el usuario introduzca el numero de caras y el numero de dados.
-Mostrar los resultados ordenados de mayor a menor.
PD: Espero que os guste la idea y el post siga adelante.
PD2: Creo que este es el subforo al que corresponde este post, si el moderador lo cree conveniente que lo mueva al subforo de scripts.
Un saludo y a pythonear! ;D
Solo python o tambien se pueden otros lenguajes?
En principio yo habia pensado hacerlo para python, mas que nada es en lo que me muevo y pienso q sera menos caotico que un ejercicio de cada si lo que se busca es aprender. Siempre se pueden abrir diferentes post para diferentes lenguajes. Y si la idea no marcha pues se cierran..... dios no lo quiera jaja
No todo el mundo se mueve en python ya sabes que hay miles de lenguajes ;)
Masita ayudame un poco, voy a intentar hacer este ejercicio
( sabes que estoy empezando que del "Hola mundo" y el de " sacar las potencia de 2" no he echo nada mas). Pero bueno haber que consigo ....
mira mi idea es la siguiente voy a utilizar el codigo que me distes para sacar las potencias de 2
Código
Citar
n = 2
while True:
print "por favor introduzca un numero"
x = raw_input()
try:
x = int(x)
print "1"
while n < x:
print n
n = n * 2
break
except ValueError:
print "Eso no es un numero"
Entonces lo que quiero hacer es modificar este trozo del código:
x = int(x)
print "1"
while n < x:
print n
n = n * 2
y encontrar una formula que haga lo siguiente:
( multiplicar el numero introducido por 36) y que a la ultima cifra del resultado le reste 4
así siempre me dara un resultado + o - de un numero = o - que 6 por su puesto ignoraría que el numero fuera positivo o negativo..
sé que es una chapuza pero esque con lo poquito que sé no doy para mas por el momento. tambien sería un dado un poco trucado porque si siempre introduce el mismo número siermpre daría el mismo resultado. pero por el momento si logro insertar esa formula en el código ese YO me doy por muy satisfecho. -----> sigo aprendiendo.
Ahora no tengo tiempo pero te envio un pm con mi direccion de correo me agregas y mañana te voy guiando para que lo hagas tu mismo. Si quieres mirar hasta entonces busca informacion sobre la libreria random o si dominas ingles escribe en tu sesion de python help(random).
Un saludo y feliz año nuevo!!
He logrado hacer esto:
Citar
import random
for i in range(1):
x = random.randint(1, 6)
print "dado1"
print x
for i in range(1):
x = random.randint(1, 6)
print "dado2"
print x
me devuelve este resultado :
Citar
autodidacta@autodidacta-laptop:~$ python dados.py
dado1
2
dado2
1
Solo me falta ordenar los resultados Código:Citar
n = input("introduzca numero de dados: ")
a = input("introduzca numero de caras: ")
import random
for i in range(n):
x = random.randint(1, a)
print "dado"
print x
Resultado:Citar
autodidacta@autodidacta-laptop:~$ python ejercicio1.py
introduzca numero de dados: 3
introduzca numero de caras: 9
dado
2
dado
4
dado
8
;-)
Veo que vas avanzando poco a poco, ahora trata de que siempre te de los resultados de los dados imprimiendo primero el mayor y el ultimo el menor de los resultados y ya lo tendras. ;)
import random
a = input("Número de caras")
b = input("Número de dados")
for i in range (b):
c = random.randint(1,(a))
print "Dado:",+c
raw_input()
Llegué a lo mismo pero no encuentro la forma de ordenar :S.
Os dejo que os comais un poco la cabeza antes de daros alguna pista... :laugh:
Cita de: CaronteGold en 1 Enero 2010, 18:59 PM
import random
a = input("Número de caras")
b = input("Número de dados")
for i in range (b):
c = random.randint(1,(a))
print "Dado:",+c
raw_input()
Llegué a lo mismo pero no encuentro la forma de ordenar :S.
Mete todo en una lista y ordenala por el algoritmo de la burbuja, voy a ver si puedo resolverlo.
Cita de: Leo Gutierrez. en 1 Enero 2010, 19:59 PM
Cita de: CaronteGold en 1 Enero 2010, 18:59 PM
import random
a = input("Número de caras")
b = input("Número de dados")
for i in range (b):
c = random.randint(1,(a))
print "Dado:",+c
raw_input()
Llegué a lo mismo pero no encuentro la forma de ordenar :S.
Mete todo en una lista y ordenala por el algoritmo de la burbuja, voy a ver si puedo resolverlo.
Tengo que irme ahora mismo, pero en cuanto llegué intentaré eso, lo de la burbuja lo encontré buscando en varias webs, también vi más algoritmos pero no supe cual usar.
Saludos y gracias.
Los diferentes métodos de ordenación tienen diferentes enfoques y/o ventajas, pero tampoco es que sean TAN diferentes unos de otros. El de la burbuja es el "tradicional" (por decirle de algún modo) y más usado.
Leo, seguro que en un rato lo tienes resuelto y verás que poco varia de otros lenguajes ;) (obviamente el concepto no cambia, sigue siendo el mismo)
Saludos
#!/usr/bin/env python
import random
a = input("Numero de caras : ")
b = input("Numero de dados : ")
lista = []
for i in range(b):
c = random.randint(1, (a))
print "Dado : ", c
lista.append(c)
for elemento in lista:
print elemento
# Burbuja
for i in range(0, len(lista)):
for j in range(0, len(lista)):
if lista[i] > lista[j]:
auxiliar = lista[i]
lista[i] = lista[j]
lista[j] = auxiliar
for elemento in lista:
print elemento
leo@lein:~/Escritorio$ python py.py
Numero de caras : 10
Numero de dados : 10
Dado : 3
Dado : 9
Dado : 3
Dado : 6
Dado : 8
Dado : 4
Dado : 8
Dado : 7
Dado : 1
Dado : 1
[3, 9, 3, 6, 8, 4, 8, 7, 1, 1]
[9, 8, 8, 7, 6, 4, 3, 3, 1, 1]
leo@lein:~/Escritorio$
lista.sort()
print lista
Ya está, no sabía como obtener la longitud de la lista. :)
Faltaria imprimir independientemente cada valor de la lista. Ya que asi te imprime la lista completa con los corchetes y demas. Pero basicamente es asi.
Con lo cual miniputo y punto para Leo! ;-)
Otra forma de hacerlo era con el metodo "sort". Dejo un codigo de ejemplo:
import random
indice = 0
resultados=[]
contador=0
dados = int(raw_input('Elija numero de dados:'))
caras = int(raw_input('Elija numero de caras:'))
#genera las tiradas
while indice < dados:
x=random.randint(1,caras)
resultados.append(x)
indice = indice+1
#ordena la lista
resultados.sort()
#imprime los resultados
for x in range(len(resultados)-1,-1,-1):
print resultados[x]
La verdad que algunos métodos que trae python facilitan mucho las cosas, como el sort ;D
Por cierto, las listas se pueden recorrer sin recurrir a otras variables :P
import random
try:
a = int(input("Ingresa el número de caras del dado: "),10)
b = int(input("Ingresa el número de tiradas: "),10)
except:
print("Alguno de los valores ingresados no es numérico")
Tiradas = []
for i in range(b):
Tiradas.append(random.randint(1,a))
Tiradas.sort()
for i in Tiradas:
print(i)
Saludos
Pero en ese caso imprimiria de menor a mayor. De todos modos se que puedes ordenar las listas segun lo que quieras, añadiendo algun parametro a sort(). Tendre que indagar en ello
Estamos en ejercicios, así que lo suyo sería discutir las funciones en scripting, pero el método sort acepta parámetros :P
Tiradas.sort(key=None,reverse=True)
Y sino la otra manera ...
Tiradas.sort()
Tiradas.reverse()
:P
Bueno, me toca proponer el ejercicio
-Apartir de una clase llamada Rectangulo, obtener el area y perimetro(métodos).
Aprovecho para preguntar, ¿hay alguna forma de hacer un bucle mientras no me den un valor númerico?
Apartir del código de Novlucker:
try:
base = int(input("Base : "))
altura = int(input("Altura : "))
except:
print "Uno de los valores no es numerico"
Dejo este y ya no participo hasta bien no suba un poquito el nivel, así quienes responden son los que estan comenzando con python :P
class Rectangulo:
def __init__(self,Largo,Alto):
self.largo = Largo
self.alto = Alto
def Area(self):
return self.largo*self.alto
def Perimetro(self):
return self.largo*2+self.alto*2
try:
a = int(input("Ingrese base del rectangulo: "),10)
b = int(input("Ingrese altura del rectangulo: "),10)
miRectangulo = Rectangulo(a,b)
print("\nEl area del rectángulo es: " + str(miRectangulo.Area()))
print("El perímetro del rectángulo es: " + str(miRectangulo.Perimetro()))
except:
print("\nAlguno de los valores ingresados no es numérico")
Saludos
Te me adelantaste :laugh:
Espero tu ejercicio Novlucker ;D
Leo
def Ingreso():
try:
base = int(input("Base :"),10)
altura = int(input("Altura :"),10)
except:
print("Alguno de los valores ingresados no es numérico")
Ingreso()
Ingreso()
Sobre el ejercicio:
Siguiendo con el ejemplo anterior, crear una clase RectanguloComplejo que herede de Rectangulo, y que contemple un nuevo método para cálculo del largo de la diagonal de dicho rectángulo ;D
Saludos
P.D: creo que todos menos yo usan Python 2.6, así que recordar modificar los input
#!/usr/bin/env python
from math import sqrt
class Rectangulo:
"""Obtiene el area y perimetro de un rectangulo"""
def __init__(self, base, altura):
self.base = base
self.altura = altura
def Area(self):
return self.base * self.altura
def Perimetro(self):
return 2 * (self.base * self.perimetro)
def Diagonal(self):
return sqrt((self.base * self.base) + (self.altura * self.altura))
class RectanguloComplejo(Rectangulo):
pass
try:
base = int(input("Base : "))
altura = int(input("Altura : "))
except:
print "Uno de los valores no es numerico"
rectangulito = RectanguloComplejo(base, altura)
print "Diagonal : ", rectangulito.Diagonal()
Tuve que buscar en el libro, a ver si era así, Novlucker.
Edito:
Creo que es así:
class RectanguloComplejo(Rectangulo):
pass
def Diagonal(self):
return sqrt((self.base * self.base) + (self.altura * self.altura))
Se me olvido la raiz....
Leo, en realidad me refiero a que el RectanguloComplejo tenga un método diagonal, es decir, tu has modificado Rectangulo para que contemple un nuevo método, pero la gracia de la orientación a objetos y la herencia, es que quien hereda tenga las propiedades y métodos de la base, y que a su vez tenga los suyos propios.
Es decir, RectanguloComplejo es quien debe de tener el nuevo método :P
Masita, Pitágoras!, eso no es la diagonal :silbar:
Edito
Leo, eso mismo que has hecho en la modificación era lo que se pedía :P, eso si, quita el PASS, eso se usa para decir "aquí no hay nada"
A ver, fijate ahora en mi último edit del mensaje anterior, a ver si era así.
#!/usr/bin/env python
from math import sqrt
class Rectangulo:
"""Obtiene el area y perimetro de un rectangulo"""
def __init__(self, base, altura):
self.base = base
self.altura = altura
def Area(self):
return self.base * self.altura
def Perimetro(self):
return 2 * (self.base * self.perimetro)
class RectanguloComplejo(Rectangulo):
def Diagonal(self):
return sqrt((self.base * self.base) + (self.altura * self.altura))
try:
base = int(input("Base : "))
altura = int(input("Altura : "))
except:
print "Uno de los valores no es numerico"
rectangulito = RectanguloComplejo(base, altura)
print "Diagonal : ", rectangulito.Diagonal()
Eso mismo, solo quita el pass, pero se da por bueno.
Siguiente ejercicio! ;D
Bien. ;D
El ejercicio para ustedes es :
Llenar una lista de tamaño n de números primos.
ofuu, habeis subido unos cuantos de escalones :rolleyes: , bueno yo aún estoy comenzando el primer ejercicio de los dados para mí ha sido ya un gran reto... seguiré haciendo ejercicios mas acordes con mi nivel y cuando esté preparado seguire participando.. gracias..
Me ha costado pero al final ha salido.
def primos (n):
indice=0
primo=[]
for i in range(2,n):
for x in range(2,i):
indice=0
if i % x == 0:
indice +=1
break
if indice==0:
primo.append(i)
break
print primo
primos(60)
Las prisas ya sabes pitagoras.... xD
Y el 2? :silbar:
Igual eso no soluciona el problema de
Leo ... eso muestra todos los primos menores que N, pero lo que se busca son N primos dentro de una lista ;D
Yo ya lo tengo desde hace un rato, pero como había dicho no lo voy a poner, alguien tiene algún ejercicio para que haga? :xD
Citar>>>
Ingresa el largo de la lista: 20
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]
>>>
Me di cuenta despues por eso lo estoy cambiando :P
Vale creo que ahora no hay ningun fallo o almenos eso espero.
def primos (n):
i = 2
indice = 0
primo = []
while i < i+1:
i +=1
if not n == len(primo):
if indice == 0:
primo.append(i-1)
for x in range(2,i):
indice=0
if i % x == 0:
indice +=1
break
else:
break
print primo
primos(60)
Esta incorrecto :-\ ...
Primos(20)
Citar>>>
[2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39]
>>>
Veo que ya lo has notado :P
Cita de: Novlucker en 2 Enero 2010, 00:50 AM
Esta incorrecto :-\ ...
Primos(20)
Citar>>>
[2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39]
>>>
Veo que ya lo has notado :P
Corregido en el codigo de arriba.... y mejor me voy a dormir ya que hoy parece ser que las neuronas me patinan....
Ahora si ;-)
El que tenía yo :P
def primo(numero):
for i in range(2,numero):
if(numero % i == 0):
return False
return True
def ListaPrimos(N):
Primos = []
i = 2
while (len(Primos)< N):
if(primo(i) == True):
Primos.append(i)
i +=1
return Primos
print(ListaPrimos(60))
Siguiente ejercicio!
Saludos
Cuanto queda por aprender.... jaja (aunq me lo he pasado como un enano :xD)
Bueno el siguiente lo ponemos muuuy facilito para los que estan empezando....
-Pedir una cadena de texto y comprobar si es un palindromo. Para los que no lo sepan un palindromo es una palabra o frase que se lee igual en una direccion que en otra. (ej: Sara Baras)
Asi que los que estais empezando para este no teneis escusa.
Uah, habéis avanzado mucho, yo ahora mismo no puedo hacer nada, resulta que no estoy en mi casa, y no puedo estar por mucho tiempo aquí, pero en cuanto esté intentaré hacer cada uno de los ejercicios para ver si puedo.
Saludos.
A ver si alguien se anima, el de los palindromos es sencillito, así que como ha dicho Masita, los que empiezan tampoco tienen excusas :P
#!/usr/bin/python
def espalindromo(palabra):
palabrasinespacios = ""
for i in range(len(palabra)):
if palabra[i]!=" ":
palabrasinespacios+=palabra[i]
for i in range(len(palabrasinespacios)/2):
if palabrasinespacios[i]!=palabrasinespacios[len(palabrasinespacios)-i-1]:
return False
return True
while 1:
palabra = raw_input("Escribe la frase/palabra : ")
if espalindromo(palabra):
print "Esa frase/palabra es palindroma "
else :
print "Esa frase/palabra no es palindroma"
Ahí está.
[braulio@washingmachine ejer]$ python palin
Escribe la frase/palabra : dabale arroz a la zorra el abad
Esa frase/palabra es palindroma
Escribe la frase/palabra :
Ahora le toca a braulio23 poner su ejercicio ;D
Aquí lo que hubiese sido mi script:
def EsPalindromo(Texto):
Texto = Texto.lower().replace(" ","")
if(Texto == Texto[::-1]):
return True
return False
palabra = input("Escribe la palabra: ")
if EsPalindromo(palabra):
print("\nPalabra/frase palindroma")
else:
print("\nPalabra/frase NO palindroma")
Como ya he dicho antes, estoy dejando estos scripts para que vean como se podrían mejorar, si a alguien le molesta que lo haga simplemente me lo dice por aquí (https://foro.elhacker.net/pm.html;sa=send;u=50057)
Saludos
Cita de: Novlucker en 2 Enero 2010, 18:10 PM
Ahora le toca a braulio23 poner su ejercicio ;D
Aquí lo que hubiese sido mi script:
def EsPalindromo(Texto):
Texto = Texto.lower().replace(" ","")
if(Texto == Texto[::-1]):
return True
return False
palabra = input("Escribe la palabra: ")
if EsPalindromo(palabra):
print("\nPalabra/frase palindroma")
else:
print("\nPalabra/frase NO palindroma")
Como ya he dicho antes, estoy dejando estos scripts para que vean como se podrían mejorar, si a alguien le molesta que lo haga simplemente me lo dice por aquí (https://foro.elhacker.net/pm.html;sa=send;u=50057)
Saludos
Impresionante :xD ni me acordaba que existía el tercer número en los slices :xD
Pues mi ejercicio va a ser ... un programa que dado un número , lo descomponga en sus factores primos .
Ejemplo : 360 = 2*5*2*3*3, 4 = 2*2 , 23 = 23
Yo ya tengo el mio
[braulio@washingmachine ejer]$ python fact
Escribe un numero : 65080
[2, 2, 2, 5, 1627]
No, a nadie le molesta.
¿En el ejercicio sobre los palindromos, habría que quitar/reemplazar espacios, luego usar el método reverse() contra la cadena?
En el ejemplo que he dejado:
Cambiar texto a minúsculas, porque sino "Reconocer" no sería palindroma.
Reemplazar espacios.
Invertir la cadena, pero el método reverse() no funciona en cadenas, en lugar de eso he tratado al cadena como si fuera un array de caracteres (que lo es) para invertirla, eso se hace en memoria y la palabra sigue estando igual
Saludos
Cita de: Novlucker en 1 Enero 2010, 20:48 PM
La verdad que algunos métodos que trae python facilitan mucho las cosas, como el sort ;D
Por cierto, las listas se pueden recorrer sin recurrir a otras variables :P
import random
try:
a = int(input("Ingresa el número de caras del dado: "),10)
b = int(input("Ingresa el número de tiradas: "),10)
except:
print("Alguno de los valores ingresados no es numérico")
Tiradas = []
for i in range(b):
Tiradas.append(random.randint(1,a))
Tiradas.sort()
for i in Tiradas:
print(i)
Saludos
Buenas, tengo una duda Novlucker, porque al final de las variables con input pones un " 10 " ¿?.
Y esto último no lo entendí muy bien, lo de append, y lo que hace realmente el " sort". :
for i in range(b):
Tiradas.append(random.randint(1,a))
Tiradas.sort()
for i in Tiradas:
print(i)
Saludos.
Bueno ahi va mi codigo si alguien le da el visto bueno posteo el siguiente ejercicio.
def primo(numero):
primos=[]
for i in range(2,numero):
if(numero % i == 0):
return False
return True
def Factorizar(n):
factores=[]
while n != 1:
i=2
while i <= n:
if (n % i == 0) and primo(i)== True or i==2:
factores.append(i)
n = n/i
i+=1
else:
i+=1
print factores
Factorizar(360)
PD: He reutilizado un poco tu codigo Novlucker
Caronte (nombrelista).append(lo que queramos añadir) lo que hace es añadir el elemento dentro del parantesis al final de la lista.
Respecto a lo de sort() es un metodo que ordena los elementos de una lista.
Cita de: CaronteGold en 2 Enero 2010, 18:52 PM
Cita de: Novlucker en 1 Enero 2010, 20:48 PM
La verdad que algunos métodos que trae python facilitan mucho las cosas, como el sort ;D
Por cierto, las listas se pueden recorrer sin recurrir a otras variables :P
import random
try:
a = int(input("Ingresa el número de caras del dado: "),10)
b = int(input("Ingresa el número de tiradas: "),10)
except:
print("Alguno de los valores ingresados no es numérico")
Tiradas = []
for i in range(b):
Tiradas.append(random.randint(1,a))
Tiradas.sort()
for i in Tiradas:
print(i)
Saludos
Buenas, tengo una duda Novlucker, porque al final de las variables con input pones un " 10 " ¿?.
Y esto último no lo entendí muy bien, lo de append, y lo que hace realmente el " sort". :
for i in range(b):
Tiradas.append(random.randint(1,a))
Tiradas.sort()
for i in Tiradas:
print(i)
Saludos.
Lo de 10 creo que es para que la entrada sea base 10.
El .sort() lo que hace es ordenar la lista.
El .append() mete un elemento mas en la lista.
@ Masita, parece válido.
Pongo el mío :
#!/usr/bin/python
import math
def esprimo(numero):
for i in range(2,int(math.sqrt(numero))+1):
if numero%i == 0:
return False
return True
def listadefactores(numero):
factoresprimos = []
if numero==1:
return []
for i in range(2,numero+1):
if esprimo(i) and numero%i==0:
factoresprimos.append(i)
factoresprimos+=listadefactores(numero/i)
break
return factoresprimos
while 1:
print listadefactores(int(raw_input("Escribe un numero : ")))
Sé que es para ordenar, pero ordenar en que sentido, mayor-menor, números de palabras, ... etc.
Ordena de menor a mayor.
Depende del argumento que le pases, eso no lo controlo mucho luego busco y te envio un PM si no te contestan por aqui. Recuerda que la mejor manera de saber que hace algo es probarlo ;)
Bien siguiente ejercicio como veo que la gente con las listas y las cadenas lo lleva un poco flojo:
-Tomar dos cadenas de texto y ver cual es la letra que mas se repite.
-Imprimir la letra y el numero de veces que se repite
Una duda más, cuando por ejemplo hacéis:
Tiradas = []
Eso quiere decir que crear una lista vacía para luego introducir algo, acorde a lo que ingrese el usuario ¿?
Saludos.
PD: Disculpen si molesto al preguntar tanto, si eso me dan el toque.
Exacto CaronteGold, es para iniciarlizar el array :P
Dejo mi script
def primo(numero):
for i in range(2,numero):
if(numero % i == 0):
return False
return True
def ProxPrimo(i):
i +=1
while (1):
if(primo(i) == True):
return i
i +=1
def Factorizar(nValor):
f = 2
Factores = []
while (nValor != 1):
if (nValor % f == 0):
Factores.append(f)
nValor /= f
else:
f = ProxPrimo(f)
return Factores
print(Factorizar(360))
Saludos
Ya tengo el mío al de Masita.
#!/usr/bin/python
diccionario = {}
cadena1 = raw_input("Escribe la cadena1 : ")
cadena2 = raw_input("Escribe la cadena2 : ")
for letra in cadena1:
if not diccionario.has_key(letra):
diccionario[letra] = 1
else :
diccionario[letra] += 1
for letra in cadena2:
if not diccionario.has_key(letra):
diccionario[letra] = 1
else :
diccionario[letra] += 1
mayor = 0
for letra in diccionario.keys() :
if diccionario[letra]>mayor:
mayor=diccionario[letra]
masrepetida = letra
print "La letra mas repetida es ",masrepetida,"con",mayor," repeticiones"
ufff, como me está enganchando esto del python por dios ...
bueno me ha llevado mas de 6 horas con el phyton para todos en la barra de tareas llegar a este codigo alfin creo que lo he conseguido:
Código:
Citar
cadena = raw_input("escribe una palabra:")
longitud = len(cadena)
invertida = ""
z = 0
while z < longitud :
invertida = invertida+cadena[longitud-1-z]
z = z+1
if invertida == cadena :
print "Su palabra es un palindromo"
else:
print "su palabra no es un palindromo"
Respuesta:
Citar
autodidacta@autodidacta-laptop:~$ python palindromo.py
escribe una palabra:patata
su palabra no es un palindromo
autodidacta@autodidacta-laptop:~$ python palindromo.py
escribe una palabra:santa_barbaras
su palabra no es un palindromo
autodidacta@autodidacta-laptop:~$ python palindromo.py
escribe una palabra:apa
Su palabra es un palindromo
autodidacta@autodidacta-laptop:~$ python palindromo.py
escribe una palabra:apa apa
Su palabra es un palindromo
lo que no consigo es que me lea cadenas con mas palabras ...
MODIFICO:
al fín .. ( separado y con tilde ) : S
PD: espero no estar incordiando si las respuestas de mis ejercicios van mas atrasadas, estoy empezando en esto.
No hay problema Autodidacta, cada uno a su ritmo ;)
El de braulio23 esta bien, pero agranda eso por favor!
import operator
def ContarChars(Frase):
chars = {}
Frase = Frase.lower()
for c in Frase:
if c in chars.keys():
chars[c] += 1
else:
chars[c] = 1
return sorted(chars.items(),key=operator.itemgetter(1),reverse=True)
Frase1 = input("Ingresa la primera frase: ")
Frase2 = input("Ingresa la segunda frase: ")
Letras = ContarChars(Frase1 + Frase2)
for L in Letras:
print(L)
Y con eso tenemos nuestro propio script para analizar frecuencias en textos cifrados ;D
Saludos
El próximo ejercicio, un programa que vaya escribiendo la sucesión de fibonacci y además diga si cada número es primo o no.
La sucesión de fibonacci es una sucesión de números enteros donde cada número es la suma de los dos anteriores (de la sucesión)
Primeros números : 0,1,1,2,3,5,8,13,21
Cita de: braulio23 en 3 Enero 2010, 15:13 PM
El próximo ejercicio, un programa que escriba N números de la sucesión de fibonacci y además diga si cada número es primo o no.
Que sino va a ser infinito ;D
Donde están los que pedían ejercicios sencillos? En este caso solo habría que crear la función que escriba la sucesión, para los primos se puede reutilizar código anterior :P
Saludos
Venga chicos que este tambien es secillito, intentarlo y si no se resuelve de aqui a mañana pongo el mio.
Saludos y feliz python!
Alguien me puede dar una pista para lograr que me diga cuales son primos y cuales no? :
he llegado asta aquí.
n = input("introduzca numero para la susecion: ")
import random
for i in range(n):
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a+b
f = fibonacci()
for x in range(n):
print f.next(),
Respuesta:Citar
autodidacta@autodidacta-laptop:~$ python fibonacci.py
introduzca numero para la susecion: 10
0 1 1 2 3 5 8 13 21 34
autodidacta@autodidacta-laptop:~$
De que libro/tutorial estás aprendiendo python???
La función para números primos está en la página anterior me parece.
Python para dodos e Introducción a la programación con Python.estoy intentando integrar este codigo de la pagina anterior el que puso Novluker pero no encuentro la manera.
Citar
def primo(numero):
for i in range(2,numero):
if(numero % i == 0):
return False
return True
def ListaPrimos(N):
Primos = []
i = 2
while (len(Primos)< N):
if(primo(i) == True):
Primos.append(i)
i +=1
return Primos
print(ListaPrimos(60))
sigo, sigo buscando...
He usado la función primo() de Novlucker para resolverlo:
#!/usr/bin/env python
def primo(numero):
if numero <= 1:
return False
for i in range(2,numero):
if(numero % i == 0):
return False
return True
def Fibonacci(numero):
i = 1
j = 0
for k in range(1, numero):
j = i + j
i = j - i
return j
try:
n = int(raw_input("N : "))
except:
print "Valor no numerico"
for i in range(1, n + 1):
if primo(Fibonacci(i)) == True:
print Fibonacci(i), "primo"
else:
print Fibonacci(i)
leo@lein:~/Escritorio$ python py.py
N : 15
0
1
1
2 primo
3 primo
5 primo
8
13 primo
21
34
55
89 primo
144
233 primo
377
leo@lein:~/Escritorio$
leo ;-) , bueno he estado cerca. Me dejas poner un ejercicio? ya que pocos ejercicios lograré resolver sin vuestra ayuda., ( anda dame cuartelillo) ;D
crear un programa (llamado paiton) que haga lo siguiente:
ejemplo:
paiton dice: hola me llamo paiton, cual es tu nombre? # y el usuario introduzca una respuesta
ejemplo:
usuario dice: blablabla me llamo (NOMBRE). # y paiton de otra respuesta reconociendo su nombre y lo muestre en su respuesta
ejemplo
paiton dice: hola (NOMBRE) blablabla blablabla (ADIOS).# si usuario no da una respuesta que contenga (repetirADIOS) se cierra el programa, en caso contrario, paiton vuelve a escribir otra linea y cierra programa
-- usuario dice: blablablabla
----------
-- paiton dice: blablabla (ADIOS) # y se cierra el programa.
Claro, hazlo, yo me voy a una fiesta. ::) ;D
gracias leo
Pero, Autodidacta, para que reconozca el nombre, tendríamos que poner un diccionario de nombres y que buscase a ver si existe o no .. xD.
EDITO:
Aquí pongo el ejercicio anterior, aunque ya lo posteó Leo.
Los tres primeros números los printeo manualmente los demás se originan solos.
Está puesto para que cuando "y" sea igual o mayor que 100 se corte el bucle.
x = 0
y = 1
t = 2
def primo(numero):
for i in range(2,numero):
if(numero % i == 0):
return False
return True
print x
print y
print y
while True:
x = x+y
y = x+y
t = x+y
if primo(y):
print y, "--->Primo"
else:
print y
if primo(t):
print t, "--->Primo"
else:
print t
if y >= 100:
break
Salida:
0
1
1
2 --->Primo
3 --->Primo
5 --->Primo
8
13 --->Primo
21
34
55
89 --->Primo
144
233 --->Primo
377
cierto CaronteGold, ya he pensado en eso para que no haya que poner un diccionario tan grande.
haremos que usuario1 escriba en minuscula y solo la respuesta sea en mayuscula.
ejemplo: hola pues yo me llamo AUTODIDACTA
así paitón solo tendría que buscar las mayusculas de la cadena no?
PD: podría ser así? + o -
( llevo un rato buscando un afunsion que busque mayusculas en una cadena )
Voy a mirar a ver que puedo hacer.. xD.
Y yo tenía la mía :P
def Primo(numero):
if(numero == 1):
return False
for i in range(2,numero):
if(numero % i == 0):
return False
return True
def FibonacciPrimo(n):
a = 0
b = 1
Sucesion = [[a,False],[b,False]]
for i in range(n):
a, b = b, a + b
#Me pregunto por que no habia utilizado asignacion multiple :P
if(Primo(b) == True):
Sucesion.append([b,True])
else:
Sucesion.append([b,False])
return Sucesion
for e in FibonacciPrimo(50):
print(e)
Este devuelve una lista por medio de FibonacciPrimo, y me gustan sus soluciones ;)
No tengo ni idea de como hacer lo de las mayúsculas.... :-X
yo estoy mirando esto, hay una tabla de expresiones regulares, a lomejor tu le sacas mas partido
http://www.estrellateyarde.es/discover/expresiones-regulares
Bueno dejo el codigo que tenia del ejercicio anterior. ;)
def primo(numero):
if numero == 1:
return False
for i in range(2,numero):
if(numero % i == 0):
return False
return True
def serie(n):
a, b = 0,1
print a
for i in range(n-1):
if primo(b) == True:
print b, "es primo."
else:
print b
a, b = b, a + b
serie(12)
Mañana me pongo con el siguiente que hoy no me encuentro muy bien. Autodidacta ya no hace falta que te conteste al MP jeje
He aqui mi respuesta al ejercicio, es como las aventuras conversacionales de antaño :xD
No hace falta poner todo en mayusculas solo la inicial. El texto puede empezar igualmente por mayuscula. ej: Me llamo Masita .
No abro los parentesis por que me da un error en la codificacion...
def Enombre(Saludo):
cadena = Saludo
for i in range(65,91):
pos1= cadena.find(chr(i),2)
if pos1 != -1:
break
a = cadena[pos1]
cadena1 = cadena.split()
for i in range(1,len(cadena1)):
if cadena1[i].find(a) != -1:
Nombre = cadena1[i]
return Nombre
y = 0
x = raw_input("Hola, me llamo Autodidacta.Tu como te llamas? ")
print "Mucho gusto",Enombre(x),"\n Si quieres dejar de hablar conmigo solo tienes que escribir adios"
while y != "adios":
y = raw_input("Que te gustaria hacer? ")
if y == "Resolver este ejercicio" or y == "resolver este ejercicio":
print "Bien resolviste el ejercicio!!!"
if y == "Comer" or y == "comer":
print "Pedire unas pizzas"
if y == "Beber" or y == "beber":
c = raw_input("Quieres agua o prefieres zumo? ")
if c == "Agua" or c == "agua":
print "Aqui tienes"
elif c == "Zumo" or c == "zumo":
raw_input("Lo quieres frio?" )
print "Aqui tienes tu", c
else:
print "No tengo de eso, lo siento"
print "Hasta la vista", Enombre(x)
Me imagino que era algo asi lo que pedias, si me das el visto bueno pongo un nuevo ejercicio.
Perdon por el doble post pero separado creo que estara todo mas claro.
Masita, para evitar hacer comparaciones dobles se debería de hacer algo así:
while y != "adios":
y = raw_input("Que te gustaria hacer? ")
if y.lower() == "resolver este ejercicio":
print "Bien resolviste el ejercicio!!!"
if y.lower() == "comer":
print "Pedire unas pizzas"
if y.lower() == "beber":
c = raw_input("Quieres agua o prefieres zumo? ")
if c.lower() == "agua":
print "Aqui tienes"
elif c.lower() == "zumo":
raw_input("Lo quieres frio?" )
print "Aqui tienes tu", c
else:
print "No tengo de eso, lo siento"
print "Hasta la vista", Enombre(x)
Saludos
Si lo pense luego y en meterle un re.match() para no tener que poner solo la palabra. Pero eran las 8 de la mañana y aun no habia pegado ojo :xD
Y donde esta tu ejercicio? porque ese de autodidacta debería de quedar así, más que eso no se puede sin querer meterse a reconocer frases y desarrollar cierta IA :P
Saludos
Bien mi siguiente ejercicio tambien es sencillo pero tienes que conocer las herramientas... (vamos como todo) cuando vaya ganando o si la gente quiere se le iran añadiendo cosas.
-Listar el contenido del directorio actual (script) y exportarlo a un archivo de texto
;D
Masita, Novluker ;-) no hay codigo que se os resista ehh...
esta es la respuesta que da a tu codigo Masita, la parte del while puse la de Novluker:
Citar
autodidacta@autodidacta-laptop:~$ python Paiton.py
Hola, me llamo Autodidacta. Tu como te llamas? yo me llamo Masita
Mucho gusto Masita
Si quieres dejar de halbar conmigo solo tienes que escribir adios
que te gustaria hacer? resolver este ejercicio
Bien resolviste el ejercicio!!!
que te gustaria hacer? probaré escrbir Comer
que te gustaria hacer? comer
Pedire unas pizzas
que te gustaria hacer? beber
Quieres agua o prefieres zumo? agua
Aqui tienes
que te gustaria hacer? zumo
que te gustaria hacer? beber
Quieres agua o prefieres zumo? zumo
Lo quieres frio?si
Aqui tienes tu zumo
que te gustaria hacer? adios
Hasta la vista Masita
autodidacta@autodidacta-laptop:~$
import os
a = os.getcwd ()
b = os.listdir(a)
f = open("archivo3.txt", "w")
f.writelines(b)
f.close()
raw_input()
Lo que pasa es que la salida es mala, y no sé como hacer para que quede bien ordenado:
Salida:
Cubos y tiradas.pyJuego Python PyGame.pyMostrar directorio y exportarlo.pyPaiton.pyPalabras palindromas.pyPy.batRectángulo.pySucesión Fibonacci.py
Si consigo la salida mejor, lo edito.
EDITO:
Ya está xD:
import os
a = os.getcwd ()
b = os.listdir(a)
f = open("archivo3.txt", "w")
for i in b:
cx = "\n",i
f.writelines(cx)
f.close()
raw_input()
Salida ( es decir el .txt ):
Cubos y tiradas.py
Juego Python PyGame.py
Mostrar directorio y exportarlo.py
Paiton.py
Palabras palindromas.py
Py.bat
Rectángulo.py
Sucesión Fibonacci.py
ok te dejo el mio para que veas otra manera de que quede ordenado.
import os
def ls():
a = os.getcwd()
b = os.listdir(a)
return "\n".join(b)
def texto():
t = open("ls.txt","w")
t.writelines(ls())
texto()
Esperando tu ejercicio
Ejercicio... , pues crear un objeto ( triángulo ) y calcular sus razones trigonométricas ( Seno,Coseno y Tangente) dados sus tres lados y sus tres ángulos.
Saludos.
crear==dibujar?
No, pero ahora que lo dices, podría ser una alternativa distinta, como veas, si quieres hacerlo así, perfecto.
Una cosa, los ángulos dados, para que no haya mucha complicación que se indique entre que lados se forman, ejemplo:
Ángulo entre Lado1 y Lado2 = 90 ( siempre )
Ángulo entre Lado1 y Hipotenusa = x
Ángulo entre Lado2 y Hipotenusa = y
Saludos.
EDITO:
He visto en la web de Python, un módulo para lo de fibonacci.
http://docs.python.org/tutorial/modules.html
Alguien va a hacer el ejercicio? ;D
Yo lo estaba haciendo, pero para que fuera más entretenido estaba creando una aplicación (C#) por línea de comandos que pudiese generar un PNG con el triángulo y sus datos, y que fuera lanzada desde el py :xD
CitarHe visto en la web de Python, un módulo para lo de fibonacci.
http://docs.python.org/tutorial/modules.html
Puede ser, pero es que estar buscando un módulo para algo que no plantea problemas, mejor hacer el nuestro :-\ , igual he visto modulos "menos necesarios" :P
Saludos
Yo mañana lo haré, ahora me iré a dormir..., creo que lo de los ángulos, no es exactamente necesario, pero igual sí puede complementar con algo, no lo sé.
Saludos.
Por cierto, creo que hay una librería VPython para figuras en 3D, yo había copiado un código de un cubo verde, no sé si está bien, ya que no lo he probado, ( no conseguí poner bien la librería y me dio pereza :P )
Code, cubo verde:
import visual
p = visual.vector (5,4,-1)
s = (4,4,4)
c = color=visual.color.red
cubo = visual.box(pos=p,size=s,color=c)
Aqui esta ::) Me hubiese gustado poder comprobar tambien si el triangulo segun las medidas de los lados y los angulos era posible o se cortaban pero eso para otro dia, que si no tendreis que buscar un triangulo real para ver si funciona. :laugh:
class triangul():
def __init__(self,hipotenusa,catetoc,catetoo,anguloa,angulob,):
self.hipotenusa = hipotenusa
self.catetoc = catetoc
self.catetoo = catetoo
self.anguloa = anguloa
self.angulob = angulob
def comprobar(self):
if self.anguloa+self.angulob != 90:
return False
elif self.hipotenusa < self.catetoc or self.hipotenusa < self.catetoo:
return False
return True
def sen(self):
return self.catetoo/self.hipotenusa
def cos(self):
return self.catetoc/self.hipotenusa
def tan(self):
return self.catetoo/self.catetoc
def datos():
try:
hipo = float(raw_input("Ingresa la hipotenusa: "))
catec = float(raw_input("Ingresa el cateto continuo: "))
cateo = float(raw_input("Ingresa el cateto opuesto: "))
anga = float(raw_input("Ingresa el angulo entre hipotenusa y cateto opuesto: "))
angb = float(raw_input("Ingresa el angulo entre hipotenusa y cateto continuo: "))
except:
print "Eso no es un numero"
datos()
return triangul(hipo,catec,cateo,anga,angb)
triangulo = datos()
if not triangulo.comprobar():
print "Ese triangulo no existe"
else:
print "El seno es:",triangulo.sen()
print "El coseno es:",triangulo.cos()
print "La tangente es:",triangulo.tan()
Que alguien le de el visto bueno y planteo la siguiente pregunta. Hasta entonces tratare de ver como podria hacer lo de dibujarlo xD
MODIFICO: Me voy a dormir asi que dejo el ejercicio por si acaso, si lo dais por bueno pues a resolver si no ya sabeis lo que planteare si acierto otro xD
- Modificar el ejercicio de exportar el listado del directorio a un archivo de texto, para convertirlo en un servidor que cuando reciba cierta orden mande "el contenido del txt" al cliente.
-Solo se pide el Servidor el cliente no hace falta postearlo. De todos modos si alguien lo quiere postear tambien ningun problema.
-En un principio puse mandar el .txt pero con que el cliente reciba el contenido de este el ejercicio ya se dara por resuelto.
import socket,os
s = socket.socket()
s.bind(('localhost',6510))
s.listen(1)
cliente,puerto = s.accept()
while 1:
if cliente.recv(4096)=="ls\n":
cliente.send("\n".join(os.listdir(os.getcwd())))
if cliente.recv(4096)=="exit\n":
cliente.close()
s.close()
exit()
Funciona si usas netcat como cliente.
Mi ejercicio va a ser ... un programa, al que tu le des una página y te descargue el contenido, una vez ahí tu le puedes preguntar por una etiqueta y el programa te dirá todas las veces que sale y que atributos tienen.
Es un poco mas difícil.
import urllib2
def web():
url ="http://www."+raw_input("introduce la web (ej:google.com): ")
f = urllib2.urlopen(url)
return f.read()
x = web()
y = raw_input("etiqueta ha encontrar (ej:<div>): ")
pos1 = 0
pos2 = 0
indice = 0
while True:
pos1 = x.find(y[0:len(y)-1],pos2)
pos2 = x.find(">",pos1)
if pos1 == -1:
break
else:
print "Encontrada con atributo: ",x[pos1:pos2+1]
indice+=1
print "se han encontrado %d etiquetas %s" % (indice,y)
Pongo tambien la salida:
Masita@Hartigan Documentos]$ python web.py
introduce la web (ej:google.com): elhacker.net
etiqueta ha encontrar (ej:<div>): <div>
Encontrada con atributo: <div id="page_margins">
Encontrada con atributo: <div id="topnav">
Encontrada con atributo: <div id="header">
Encontrada con atributo: <div id="data">
Encontrada con atributo: <div id="main">
Encontrada con atributo: <div id="col1">
Encontrada con atributo: <div id="col1_content" class="clearfix">
Encontrada con atributo: <div id="elhacker">
Encontrada con atributo: <div id="submenu1" >
Encontrada con atributo: <div id="servicios">
Encontrada con atributo: <div id="submenu2">
Encontrada con atributo: <div id="downloads">
Encontrada con atributo: <div id="submenu3">
Encontrada con atributo: <div id="participa">
Encontrada con atributo: <div id="submenu4">
Encontrada con atributo: <div id="col3">
Encontrada con atributo: <div id="col3_content" class="clearfix">
Encontrada con atributo: <div align="center">
Encontrada con atributo: <div align="center" class="style1">
Encontrada con atributo: <div align="left">
Encontrada con atributo: <div id="ie_clearing">
se han encontrado 21 etiquetas <div>
[Masita@Hartigan Documentos]$
Supongo que eso son los atributos....
El siguiente ejercicio consiste en pedir un rango de ip's y comprobar si utilizan el servidorweb y version que nosotros le pasemos.
Dejo mi solución para el caso de las etiquetas web utilizando expresiones regulares :P
import urllib.request, re
def webrequest(url):
web = urllib.request.urlopen(url)
return str(web.read())
URL = input("Ingrese la url 'completa' de la web: ")
TAG = input("Ingrese etiqueta a buscar: ")
r = re.compile(TAG[:-1]+'.*?'+TAG[-1], re.IGNORECASE)
Tags = r.findall(webrequest(URL))
for t in Tags:
print("Etiqueta encontrada: "+ t)
print("Se han encontrado " + str(len(Tags)) + " etiquetas")
En Python 3.x se dejó de lado urllib2, por eso el urllib.request
Sobre el último ejercicio ... sería consultar un rango de IP's y ver si tienen un servidor web corriendo y su versión?
Saludos
Si Novlucker seria exactamente eso. Yo ya lo termine pero me llevo mas de un quebradero de cabeza la parte que genera el rango de ip's.
Nueva consulta ... el rango de IP que formato lleva?
Cualquiera de estos?
Citar127.0.0.1/127.0.0.255
127.0.0.1/127.120.250.255
127.0.0.1/64
127.0.0.1/255.255
127.0.0.1/127.0.1.255
Saludos
En mi caso ingreso primero una de las ip en este formato 127.0.0.1 y despues pido la siguiente con el mismo formato. Por ejemplo 128.0.0.1 ( lo unico es que con este rango tardaria eones en terminar el scaneo ) Tu utiliza el formato que desees.
El ejercicio anterior :P
import http.client
def NextIP(rango):
rango = rango.split('.')
for i in range(len(rango)-1,-1,-1):
if(int(rango[i]) < 255):
rango[i] = str(int(rango[i]) + 1)
break
else:
rango[i] = '0'
return '.'.join(rango)
def ServerinIPRange(strRange):
RIPs = strRange.split('/')
sIPstr = RIPs[0]
eIP = RIPs[1].split('.')
eIP = sIPstr.split('.')[:-len(eIP)] + eIP
eIPstr = '.'.join(eIP)
ShoWebServer(sIPstr)
while(sIPstr != eIPstr):
sIPstr = NextIP(sIPstr)
ShoWebServer(sIPstr)
def ShoWebServer(URLIP):
try:
conn = http.client.HTTPConnection(URLIP,timeout=5)
conn.request("GET", "/index.html")
r = conn.getresponse()
print(URLIP,r.getheader('Server'))
except:
print(URLIP,'Server not found')
finally:
conn.close()
try:
iprange = input("Ingrese un rago de IP (ej: 200.3.25.1/26.255): ")
ServerinIPRange(iprange)
except:
print("El rango de IP ingresado no es válido")
Para quienes usan Python 2.6 hay que modificar el script, ya que la librería a importar es la httplib
Una muestra de la salida:
Citar>>>
Ingrese un rago de IP (ej: 200.3.25.1/200.3.25.255): 207.46.192.250/193.1
207.46.192.250 Server not found
207.46.192.251 Server not found
207.46.192.252 Server not found
207.46.192.253 Microsoft-IIS/7.5
207.46.192.254 Microsoft-IIS/7.5
207.46.192.255 Server not found
207.46.193.0 Server not found
207.46.193.1 Server not found
>>>
Tener en cuenta que el script tiene configurado un timeout de 5 segundos (tiempo que demora en "decidir" si un host es inaccesible o no), y que no se verifica que el rango
hasta sea mayor que el
inicio, por lo que si nos equivocamos queda en un bucle infinito :silbar:
Ultima nota: los headers que muestra el servidor se pueden modificar, así que no es raro ver algunos extraños, como el gws para google
Saludos
[Edito]Le bajé el timeout de 10 a 5 segundos
;-) Cada vez que veo uno de tus codigos me doy cuenta de todo lo que falta por aprender.... Aqui dejo lo que habia conseguido hacer yo. Es bastante menos legible y muchisimo mas largo xDD
import socket
def rango(): #Recoge el rango de ip
while True:
a = (raw_input("introduzca primera ip: "))
b = (raw_input("introduzca segunda ip: "))
c=b
a, b = a.replace("."," "), b.replace("."," ")
try:
int(a.replace(" ",""))
int(b.replace(" ",""))
a, b = a.split(), b.split()
return a,b,c
except:
print "El rango ip introducido no es valido"
def listaip(): #Genera una lista con todas las ip en el rango
aux=[]
ip = []
a, b, c = rango()
a1, a2, a3, a4 = int(a[0]), int(a[1]), int(a[2]), int(a[3])
b1, b2, b3, b4 = int(b[0]), int(b[1]), int(b[2]), int(b[3])
while True:
while a1 != 255:
while a2 != 255:
while a3 != 255:
while a4 != 255:
aux=[]
aux.append(str(a1))
aux.append(str(a2))
aux.append(str(a3))
aux.append(str(a4))
aux = (".".join(aux))
ip.append(aux)
a4 +=1
if aux == c:
return ip
aux=[]
aux.append(str(a1))
aux.append(str(a2))
aux.append(str(a3))
aux.append(str(a4))
aux = (".".join(aux))
ip.append(aux)
a4 = 0
a3 +=1
if aux == c:
return ip
aux=[]
aux.append(str(a1))
aux.append(str(a2))
aux.append(str(a3))
aux.append(str(a4))
aux = (".".join(aux))
ip.append(aux)
a4 = 0
a3 = 0
a2 +=1
if aux == c:
return ip
aux=[]
aux.append(str(a1))
aux.append(str(a2))
aux.append(str(a3))
aux.append(str(a4))
aux = (".".join(aux))
ip.append(aux)
a4 = 0
a3 = 0
a2 = 0
a1 +=1
if aux == c:
return ip
def soc(host):
try:
s=socket.socket()
s.settimeout(0.1)
s.connect((host,80))
s.send("HEAD / HTTP/1.1\n\n")
f=s.recv(3000)
s.close()
return f
except:
return False
def comparar(cabecera,servidor):
x = cabecera.find(servidor)
if x != -1:
return True
else:
return False
def gen(ips):
coincidencias = []
indice = 0
for i in ips:
try:
y = soc(i)
if comparar(y,x):
print "Servidor encontrado en: ", i
coincidencias.append(i)
indice +=1
else:
print i
except:
print "Ningun servidor web en: ", i
continue
return coincidencias
#Main
print "######################################"
print " Buscador de cadenas en headers http"
print "######################################\n"
x = raw_input("Introduzca el servidor a buscar:" )
ips = listaip()
print "Empezando escaneo"
coin = gen(ips)
print "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
print "Un total de %d servidores detectados: " % (len(coin))
for i in coin:
print "Servidor encontrado en: ", i
Y su salida
[Masita@Hartigan Documentos]$ python ip.py
######################################
Buscador de cadenas en headers http
######################################
Introduzca el servidor a buscar:Apache/2.2.13
introduzca primera ip: 212.92.50.9
introduzca segunda ip: 212.92.50.18
Empezando escaneo
Servidor encontrado en: 212.92.50.9
212.92.50.10
212.92.50.11
Ningun servidor web en: 212.92.50.12
.....
.....
Un total de 1 servidores detectados:
Servidor encontrado en: 212.92.50.9
Siguiente ejercicio!
Aaaah, había que ingresar además el tipo de servidor :P
Igual esta muy bien, yo también inicie con los muchos while e if, pero luego encontre la manera de optimizarlo.
En principio también me había planteado retornar una lista con las IP dentro del rango, tal y como hace tu función rango(), pero luego lo deje de lado porque si se ingresa un rango demasiado extenso entonces se carga mucho en memoria, aunque hacer eso es lo mejor y más "correcto", porque de ese modo se separa realmente las dos funciones y se pueden reutilizar mejor a la hora de pasarlas a otro code, pero bueno, eso se cambia con solo agregar una lista y cambiar el return ;D
Debo de decir que también había comenzado el script con sockets, pero luego recorde las otras librerías, que de por si tienen funciones para retornar los headers.
En resumen, bien hecho! ;)
Voy a ver que planteo para el siguiente ejercicio ....
Lo del socket lo intente primero busque si se podia hacer con urllib, pero como no me aceptaba ip's decidi hacerle la peticion de forma manual. Buscare info sobre esas librerias por que sabia que existian pero no se me ocurrio usarlas.
Gracias por la valoracion ;D
Ahora si ;D
Es relativamente sencillo, para que quienes no han podido con estos, intenten con este otro ..
"Crear un script por medio del cual:
- El usuario ingrese el nombre de una imagen
- Se busque imagenes en google según lo ingresado por el usuario
- Se descargue todos los thumbnails que aparecen en la primera página de coincidencias a un directorio por defecto (a criterio del programador)"
Ej de búsqueda:
google.es ---> http://images.google.es/images?hl=es&source=hp&q=elhacker.net&um=1&ie=UTF-8&sa=N&tab=wi&gbv=1&ei=_4VGS_vpJ8yVtgefnqHwAQ (url ejemplo con imagenes). Se deben de almacenar esas imagenes pequeñas.
[Edito]Por como muestra los resultados google, con que sean 10 imagenes descargadas alcanza :P
Saludos
-
No sé si funcionará porque no tengo el intérprete para probarlo, y hasta hoy por la noche creo que no podré entrar de nuevo.
Me basé en algo que ví en una web, así que no estoy 100% seguro.
import httplib
a = "www.google.es"
part1 = "/images?gbv=2&hl=en&sa=1&q="
part2 = "&btnG=Search&aq=f&oq=&start=0"
b = raw_input("Fotos a buscar: ")
c = part1+b+part2
conexion = httplib.HTTPConnection(a)
conexion.request ("GET", c)
d = conexion.getresponse()
directorio = file( "C:\Python", "wb" )
directorio.write(d.read())
directorio.close()
EDITO:
No funciona, al final fui a clase y me echaron porque está nevando, ( que suerte :P ) , así que puedo conectarme, voy a intentar el code.. ;D ;D ;D.
Saludos.
Me cachis! >:(
No hay manera de que me tire lo que busco! pensé que quizás google había cambiado la manera en la que muestra resultados (y no eran accesibles), pero acabo de probar con otro lenguaje (vbs) y no tengo problemas en listar las imagenes!, pero en este caso, ponga lo que le ponga (cambiando user-agent y demás) me sigue pateando con un error 403!
Arghhhhh >:(
Yo estoy fuera todo el finde asi que me imagino que cuando vuelva ya estara resuelto. Aunque cuando vuelva lo intento que me parece bastante interesante.
Cita de: Novlucker en 8 Enero 2010, 13:56 PM
Me cachis! >:(
No hay manera de que me tire lo que busco! pensé que quizás google había cambiado la manera en la que muestra resultados (y no eran accesibles), pero acabo de probar con otro lenguaje (vbs) y no tengo problemas en listar las imagenes!, pero en este caso, ponga lo que le ponga (cambiando user-agent y demás) me sigue pateando con un error 403!
Arghhhhh >:(
Yo seguiré intentando a ver...., creo que será con el módulo urllib ¿?, lol como mola este emoticono ---> >:( >:(
Yo me pondré a intentarlo esta noche >:( >:( >:( es verdad, si que mola.
jaja, ya lo tengo terminado, el problema era que estaba generando mal la consulta con urllib, lo raro es que si bien estaba pasando parámetros equivocados a la función urlopen no me pateaba eso, sino un error 403 (igual eran dos problemas separados) :P
Otra cosa ... desde ya les digo que deben de cambiar el user-agent al hacer el GET a google, porque el user-agent por defecto de urllib/urllib2 es "Python-urllib/2.6/3.1", y a google no le gusta :silbar:
:http://www.user-agents.org/
[Edito]
Debo de agregar además, que si bien no es "difícil", como que tampoco es muy sencillo para los que comienzan :-X (era mi idea inicial)
Saludos
Al hacer urlopen, se supone que copio el source, pero no, copio algo incorrecto :S :S >:( >:(
No, al hacer urlopen no te devuelve el source, te devuelve un objeto. Lo que te devuelve el source es el método .read() de ese objeto.
Yo ahora mismo estoy en windows por qué la lié con linux y no voy a poder hacer nada, aunque de todas formas lo acabaré haciendo.
Excusas! Python es multiplataforma!
Por mi parte ya he dejado el script "limpio" para que sea lo más entendible posible, ya que se supone que en parte es la idea.
Una muestra :P
Citar>>>
Ingrese texto de imagen a buscar: wallpapers
<Descargando 21 imagenes>
d:\Imagenes\wTYjGJHklorkQM.jpg
d:\Imagenes\blgyYUWc_GXkwM.jpg
d:\Imagenes\bP7o0OcpkhzwGM.jpg
d:\Imagenes\JhX_rdRwoYutQM.jpg
d:\Imagenes\_2xbHUMSifRvlM.jpg
d:\Imagenes\GH5IVj4CbxQAPM.jpg
d:\Imagenes\vFHnJs2xnEQLgM.jpg
d:\Imagenes\L1WXw5lr9KzUUM.jpg
d:\Imagenes\oMxwx2Z1q7MczM.jpg
d:\Imagenes\V5Tljp9ZSPtkuM.jpg
d:\Imagenes\zAkTCWgWmekv_M.jpg
d:\Imagenes\sTiDwmbusPnl7M.jpg
d:\Imagenes\0TYaokqa7NNs3M.jpg
d:\Imagenes\E6ydly-vf7rfLM.jpg
d:\Imagenes\dsIX0BzhiIz0fM.jpg
d:\Imagenes\9bMAGXCe0sNW9M.jpg
d:\Imagenes\kf4KrWAu-9gBpM.jpg
d:\Imagenes\LElXIbJfFGDcVM.jpg
d:\Imagenes\EaFnBmtX1b7JTM.jpg
d:\Imagenes\gxZPznPGLgKQHM.jpg
d:\Imagenes\oa2kPZFNCiaf-M.jpg
<Completado>
>>>
(http://s3.subirimagenes.com:81/imagen/previo/thump_3857541wall.png) (http://www.subirimagenes.com/imagen-wall-3857541.html)
Saludos
Yo lo empiezo ahora, en media hora espero tenerlo hecho.
Aqui está el código para python 3.1
import urllib.request,re
import urllib.request,re
def extension(url):
url = url[::-1]
extension = url[:4]
return extension[::-1]
palabra = input("Introduzca la palabra de la busqueda : ").replace(' ','%20')
numerodefotos = int(input("Cuantas fotos quieres ? : "))
partedelhost = "http://www.google.es"
parte1 = "/images?gbv=2&hl=en&sa=1&q="
parte2 = "&btnG=Search&aq=f&oq=&start=0"
url = partedelhost+parte1+palabra+parte2
diccionario = { "User-Agent" : "Mozilla Firefox"}
req = urllib.request.Request(url,headers=diccionario)
codigo = urllib.request.urlopen(req).read()
expresionre = re.compile('http://[^/]*?gstatic.com/images.*? ', re.IGNORECASE)
listadefotos = expresionre.findall(str(codigo))
for i in range(numerodefotos):
urllib.request.urlretrieve(listadefotos[i],str(i)+"."+extension(listadefotos[i]))
print("Todo hecho")
El ejercicio va a ser un programa para jugar online al 3 en raya, tenéis que hacer el cliente y el server.
Suerte.
Bien hecho!
Dejo mi code, tiene comprobación de errores en algún sitio, además de que lo he hecho bastante estructurado, por lo que el código es el doble de largo :P
import urllib.request, urllib.parse, re
def Download(URL, name):
try:
webretrieve = urllib.request.urlretrieve(URL, name)
return webretrieve[0]
except:
return 'Error en la descarga'
def ArrayFilter(aList):
newList = []
for a in aList:
if a not in newList:
newList.append(a)
return newList
def Searchths(text):
r = re.compile('[a-zA-Z0-9_-]{13}M:')
IDsths = r.findall(text)
return IDsths
def Webrequest(URL, params):
Headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
p = urllib.parse.urlencode(params)
URL += p
customrequest = urllib.request.Request(URL,headers=Headers)
webcontent = urllib.request.urlopen(customrequest)
return str(webcontent.read())
def SeDoGoImage(imagetext):
searchurl = 'http://images.google.es/images?'
imagesurl = 'http://t1.gstatic.com/images?q=tbn:'
Wrtext = Webrequest(searchurl,{'q':imagetext})
aImages = ArrayFilter(Searchths(Wrtext))
print('\n<Descargando',len(aImages),'imagenes>\n')
for i in aImages:
d = Download(imagesurl + i[:-1],'d:\\Imagenes\\' + i[:-1] + '.jpg')
print(d)
print('\n<Completado>')
IMG = input('Ingrese texto de imagen a buscar: ')
SeDoGoImage(IMG)
El ejercicio que planteas sería para jugar contra la máquina verdad?
Saludos
Bueno, yo lo pensé para jugador contra jugador, pero hagan lo que quieran.
Es que no he hecho nada de ese tipo :silbar:
Entonces sería Usuario (Cliente) <---> Servidor <---> Usuario (Cliente), con el servidor recibiendo y enviando comunicación a ambos lados?
Saludos
Exáctamente.
Pues nada escanear servidores web con puerto 80 mediante 1 rango de IP estaticas.
import httplib, socket
class Escaneo:
def __init__(self, parametro):
self.valor = parametro
def Scan(self):
try:
for b in range(len(self.valor)):
connecion = httplib.HTTPConnection(self.valor[b], 80, timeout=2)
connecion.request("GET", "/index.html")
r = connecion.getresponse()
print(self.valor[b],r.getheader('Server'))
except Exception:
print("No existe el servidor :: ", self.valor[b])
finally:
connecion.close()
class Validacion:
def Valida(self, parametro1):
param1 = parametro1.split('/')
for a in range(len(param1)):
try:
socket.inet_aton(param1[a])
Objecto1 = Escaneo(param1)
Objecto1.Scan()
except socket.error:
print("Rango de IP insertado es Incorrecto :: ", param1[a])
ip=raw_input("Inserta rango de IP ex:( 200.55.4.1/190.4 ) :: ")
Objeto = Validacion()
Objeto.Valida(ip)
Citarbash-3.1$ python perla.py
Inserta rango de IP ex:( 200.55.4.1/190.4 ) :: 127.0.0.1/190.56.7.8/19c.56.7.1
('127.0.0.1', 'Apache/2.2.13 (Unix) DAV/2')
('No existe el servidor :: ', '190.56.7.8')
('127.0.0.1', 'Apache/2.2.13 (Unix) DAV/2')
('No existe el servidor :: ', '190.56.7.8')
('Rango de IP insertado es Incorrecto :: ', '19c.56.7.1')
No tengo cabeza para los numeros... si idealizan algo que no incluya numeros estare mas feliz
Cita de: ^TiFa^ en 11 Enero 2010, 00:09 AMNo tengo cabeza para los numeros... si idealizan algo que no incluya numeros estare mas feliz
Que sugieres
^TiFa^? XD
braulio23, no me había puesto a pensar muy bien en el ejercicio que planteabas, y ahora que lo he hecho me doy cuenta de que no es de lo que se pueda decir, "sencillo", así que la mayoría de los que inicia la tiene algo complicada :-\
Por mi parte, al igual que en casi todos los lenguajes uno no conoce bien las cosas hasta bien no se presenta la oportunidad de hacerlas, así que como no me había planteado hacer eso en python, ahora estoy investigando un poco sobre los diferentes métodos (la parte del juego ya esta) para tratar la conexión desde el servidor, dado que son dos clientes que se conectan a un "intermediario" ,cual será la mejor opción? mantener una sola conexión intercambiando los clientes? multithreading? asyncore? Ya veré ....
En cuanto pueda revisarlo bien, me pongo en ello :P
Decidido, voy a implementar el método "feo" y rápido, while en cliente(s) y servidor. El servidor recibe conexión y responde con la tabla, espera ingreso del cliente, acepta ingreso, modifica la tabla y corta conexión con cliente, responde al otro cliente y vuelve a comenzar.
No me gusta para nada, pero creo que en este caso no da para complicarse más, esta claro que es solo para pasar el rato y nadie lo va a usar :-X
Saludos
Yo hace unos días había hecho algo parecido, por ejemplo cuando un cliente dijese corto, pues pasaba al otro, se cambiaban de turno, pero pensé que se podían conectar ambos a la vez.
Saludos.
Threading/Hilos :P
Saludos
Yo no veo que haya que usar hilos ni nada de eso :
Un cliente se conecta al server y espera el otro.
Cuando el server detecta que se ha conectado el otro dice que van a empezar.
El server espera la entrada del usuario que le toque y el otro cliente espera que el server le mande informacion.
Y así cambiando de usuario.
Mira la última parte de mi post anterior .. el de "[...]decidido...", es lo que he dicho, hay que conectar y desconectar de un cliente y otro intercambiando clientes (para no "complicarse" con más code), o hablas de tener conectados en simultaneo dos clientes en el mismo puerto del servidor :huh:
Claro, fácilmente se pueden conectar al mismo puerto y manejarlos por separado.
Lo que devuelve el método .accept() del server es una tupla con el manejador socket del cliente al que puedes mandar datos y también recibirlos (si te los envía) y el puerto por el que se ha conectado (que esto tampoco es muy útil.
Jaaaaaaaaaa! Nada nada! pequeño desliz :-X
Nunca has hecho una pregunta que pueda decirse tonta (estupida)?
El valor que se le pasa al listen() pa' que es entonces? XD
En ocasiones hay que plantearse lo rápido que se es frente al teclado, al punto de que las neuronas no razonan tan rápido como se mueven los dedos. XDD
Lo dicho, olvidalo ;D
:xD Me pasa mas de lo que debería :xD
Ya estoy de vuelta. Veo que la cosa ha avanzado bastante, esta misma noche me pongo con ello!!!
La verdad que el crear juegos no me gusta nada, pero bueno, para que haya otro ejercicio más rápido XD
Servidor:
import socket
import random
import time
from time import localtime, strftime
class TresRaya():
def __init__(self):
self.player1 = ''
self.player2 = ''
def Agregar(self,value, player):
try:
if(int(value) in range(1,10)):
if(value not in (self.player1+self.player2)):
if(player==1):
self.player1 += value
else:
self.player2 += value
return 'True'
else:
return 'El casillero ya se encuentra ocupado'
else:
return 'El casillero seleccionado no es válido'
except:
return 'El casillero seleccionado no es válido'
def Dibujar(self):
total = self.player1+self.player2
t = '\n ___ ___ ___ \n'
tablero = ['' for x in range(12)]
for i in range(10):
if (str(i) in self.player1):
tablero[i-1] = '|_X_|'
elif (str(i) in self.player2):
tablero[i-1] = '|_0_|'
else:
tablero[i-1] = '|___|'
rd = t+''.join(tablero[6:9])+'\n'+''.join(tablero[3:6])+'\n'+''.join(tablero[0:3])+'\n'
return rd
def VerificaGanador(self, player):
soluciones = ['123','456','789','147','258','369','159','357']
gana = ''
if(player==1):
gana = self.player1
else:
gana = self.player2
for s in soluciones:
if((s[0] in gana) and (s[1] in gana) and (s[2] in gana)):
return 1
if(len(self.player1+self.player2) == 9):
return 0
return -1
Tr = TresRaya()
s = socket.socket()
s.bind(('localhost',19911))
s.listen(2)
socket_c1,addr1 = s.accept()
print(time.strftime("%d/%m/%y %H:%M:%S:",time.localtime()),'Conexion desde',addr1)
socket_c2,addr2 = s.accept()
print(time.strftime("%d/%m/%y %H:%M:%S:",time.localtime()),'Conexion desde',addr2)
f = random.randrange(1,3)
p = 1
if (f == 2):
p = 2
while(True):
if(p == 1):
socket_c1.send(Tr.Dibujar().encode()+'\n-- PLAYER ONE [X]--\n'.encode())
time.sleep(1)
socket_c1.send('Juega'.encode())
play = socket_c1.recv(100).decode()
else:
socket_c2.send(Tr.Dibujar().encode()+'\n-- PLAYER TWO [0]--\n'.encode())
time.sleep(1)
socket_c2.send('Juega'.encode())
play = socket_c2.recv(100).decode()
if(play=='exit'):
if(p == 1):
socket_c2.send('Juego Terminado por el otro jugador'.encode())
else:
socket_c1.send('Juego Terminado por el otro jugador'.encode())
time.sleep(2)
socket_c2.close()
socket_c1.close()
break
Agrego = Tr.Agregar(play,p)
if(Agrego == 'True'):
win = ''
whowin = Tr.VerificaGanador(p)
if(whowin == 1):
win = '\n\n\n-- Gana PLAYER' + str(p) + ' --'
elif(whowin == 0):
win = '\n\n\n-- EMPATE --'
if(whowin == 1 or whowin == 0):
socket_c1.send(win.encode())
time.sleep(2)
socket_c1.send('Juego Terminado'.encode())
socket_c2.send(win.encode())
time.sleep(2)
socket_c2.send('Juego Terminado'.encode())
time.sleep(2)
socket_c2.close()
socket_c1.close()
break
if(p == 1):
p = 2
else:
p = 1
else:
if(p == 1):
socket_c1.send(Agrego.encode())
time.sleep(1)
else:
socket_c2.send(Agrego.encode())
time.sleep(1)
print(time.strftime("%d/%m/%y %H:%M:%S:",time.localtime()), 'Juego Terminado')
s.close()
Cliente:
import socket
s = socket.socket()
s.connect(('localhost',19911))
while(True):
data = s.recv(100).decode()
if(data == 'Juego Terminado' or data == 'Juego Terminado por el otro jugador'):
break
elif(data == 'Juega'):
casillero = input('\nIngresa numero de casillero [1-9]: ')
s.send(casillero.encode())
if(casillero == 'exit'):
s.close()
break
elif(data != '' and data != 'Juega'):
print(data)
Seguro que no es para nada la mejor manera, pero quería terminarlo ya! XD
Y así se ve en el servidor y uno de los clientes (con errores de ingreso) :P
D:\Py>python.exe Cliente3raya.py
___ ___ ___
|___||___||___|
|___||___||___|
|___||___||___|
-- PLAYER ONE [X]--
Ingresa numero de casillero [1-9]: 1
___ ___ ___
|___||___||___|
|___||___||___|
|_X_||___||_0_|
-- PLAYER ONE [X]--
Ingresa numero de casillero [1-9]: 5
___ ___ ___
|___||___||___|
|___||_X_||_0_|
|_X_||___||_0_|
-- PLAYER ONE [X]--
Ingresa numero de casillero [1-9]: o
El casillero seleccionado no es váli
___ ___ ___
|___||___||___|
|___||_X_||_0_|
|_X_||___||_0_|
-- PLAYER ONE [X]--
Ingresa numero de casillero [1-9]: 6
El casillero ya se encuentra ocupado
___ ___ ___
|___||___||___|
|___||_X_||_0_|
|_X_||___||_0_|
-- PLAYER ONE [X]--
Ingresa numero de casillero [1-9]: 9
-- Gana PLAYER1 --
D:\Py>
D:\Py>python.exe Servidor3raya.py
12/01/10 13:12:41: Conexion desde ('127.0.0.1', 1455)
12/01/10 13:13:39: Conexion desde ('127.0.0.1', 1456)
12/01/10 13:14:38: Juego Terminado
D:\Py>
Como puede verse, el tablero se actualiza solo cuando "te vuelve el foco", así que cuando envías la jugada debes de esperar a que te toque otra vez para que se actualice.
En realidad no se por que hice esto así, solo debeía de agregar otro llamado a TresRayas.dibujar() :xD
Supongo que con esto esta ok, así que voy pensando en un nuevo ejercicio :P
Saludos
Vale, lo espero.
El siguiente es sencillo :P
"Crear un programa que abra un archivo binario y 'extraíga' todo aquello que pueda significar texto"
El mejor ejemplo de esto es strings de Sysinternals (http://technet.microsoft.com/en-us/sysinternals/bb897439.aspx) (la salida no debe de ser tal cual ese programa, sino que tiene que ser dentro de todo, 'legible')
Saludos
Supongo que lo que pides es eliminar los caracteres extraños.
def filtro(x):
f = open(x)
cadena = f.read()
for i in range(len(cadena)):
x = False
for j in range(65,91):
if cadena[i] == chr(j):
x = True
for j in range(97,123):
if cadena[i] == chr(j):
x = True
for j in range(48,58):
if cadena[i] == chr(j):
x = True
if x == False:
cadena = cadena.replace(cadena[i]," ")
return cadena
binario = raw_input("Ingrese el nombre del archivo: ")
try:
cadena = filtro(binario)
cadena = cadena.split()
cadena = " ".join(cadena)
print cadena.upper()
except:
print "Archivo no encontrado"
Supongo que es eso lo que pedias dejo mi ejercicio por si es aceptado (me voy ya a la cama...)
El siguiente ejercicio consiste en un programa que al ejecutarlo con este formato: Nombre_del_programa -Accion -Archivo. Ejemplo: python miprograma.py -B foto.jpg
-El programa tiene que permitir: Crear, Borrar, Abrir el archivo que le demos como segundo parametro.
Este tambien es sencillito.
Si pero no, la idea es esa más o menos ...pero eso falla :silbar:
OPEN por defecto abre un archivo en modo texto, y estamos hablando de un binario, intenta por ejemplo abrir el notepad.exe con eso :silbar:
Saludos
Es que yo lo habia intentado con un gif y un archivo en c compilado, No tengo ningun archivo .exe a mano, uso linux y el wine no me funciona. :rolleyes:
Mañana me bajo cualquier .exe y lo intento!
Igual deberías de haber tenido problemas con el GIF, te dejo trabajar bien? :huh:
Si, no me dio ningun problema. Me solto los mismos resultados que si lo hubiese abierto con un editor de texto (Es decir un monton de simbolos extraños y letras sin sentido.).
No se :-\
Pero hagamos lo siguiente, si en 12 hrs no hay una respuesta mejor lo damos por válido, ¿esta? así no seguimos esperando otro ejercicio :xD
Que ya hasta tengo otro para plantear XD
Saludos
Lo dejamos así entonces y lo damos por bueno, nadie más a podido/querido?
Saludos
import sys
import os
a = sys.argv
b = a[1]
c = a[2]
ruta = "C:\\"+c
if b == "-C":
f = open(ruta, "w")
if b == "-A":
os.system(ruta)
if b == "-B":
os.remove(ruta)
Para poder guardar,crear,borrar archivo tengo que indicar la ruta, entonces lo puse en C:\, es decir para windows, -A es para abrir, -B para borrar y -C para crear.
Para que funcionen los argumentos se deben poner tal cual en mayúsculas.
EDITO:
El ejercicio será, un programa que haga un logueo en una web, por ejemplo pongamos que sea hotmail.com y en e-mail escriba por ejemplo: adegegeg , y en pass: eerghrh , y haga un logueo.
Cita de: CaronteGold en 15 Enero 2010, 22:27 PM
import sys
import os
a = sys.argv
b = a[1]
c = a[2]
ruta = "C:\\"+c
if b == "-C":
f = open(ruta, "w")
if b == "-A":
os.system(ruta)
if b == "-B":
os.remove(ruta)
Para poder guardar,crear,borrar archivo tengo que indicar la ruta, entonces lo puse en C:\, es decir para windows, -A es para abrir, -B para borrar y -C para crear.
Para que funcionen los argumentos se deben poner tal cual en mayúsculas.
El codigo de arriba no tiene que ver nada con el ejercicio anterior propuesto por Novlucker.
NovLucker esperamos el proximo ejercicio...Edito: Fue una falta de conocimiento de las reglas de mi parte
R.N.A al final se dio por buena mi solucion, asi que el ejercicio actual era el que estaba propuesto en la respuesta. La respuesta pues de CaronteGold era a mi ejercicio, por lo que es valida y su ejercicio es el siguiente a resolver.
Espero haber aclarado el mal entendido. :)
Cita de: Masita en 15 Enero 2010, 23:51 PM
R.N.A al final se dio por buena mi solucion, asi que el ejercicio actual era el que estaba propuesto en la respuesta. La respuesta pues de CaronteGold era a mi ejercicio, por lo que es valida y su ejercicio es el siguiente a resolver.
Espero haber aclarado el mal entendido. :)
:xD no estaba al tanto de eso... esta todo aclarado
CaronteGold, creo que cuando planteaste el problema no pensaste en la dificultad que podía suponer XD
Puedo logarme casi en cualquier página, pero no en hotmail o gmail por ejemplo :-\ .. de hecho es más sencillo conectarse al pop/smtp de estos, que intentar conectarse vía web :P
vbs XD
set objIE = createobject("internetexplorer.application")
objIE.navigate "http://www.hotmail.com"
objIE.visible = True
do while objIE.busy
wscript.sleep 200
loop
objIE.document.getelementbyid("login").value = "adegegeg@hotmail.com"
objIE.document.getelementbyid("passwd").value = "eerghrh"
objIE.document.forms(0).submit
Saludos
A mi me pasa igual, hotmail envia unas cuantas cosas ademas del login y password. Cada uno de los valores adicionales se genera de una forma.
Hay uno bastante curioso, se trata de una cadena llamada: "IfYouAreReadingThisYouHaveTooMuchFreeTime" a la que le tendriamos que restar tantos caracteres como tiene nuestro password....
En fin que me volvi loco intentando sacar todos los valores.
Lo siento :-X :-X. Novlucker, me gustaría ver el cógio de Python, para otra web cualquiera, dije Hotmail, por hacerlo en una común y todos igual, pero bueno, se acepta cualquier web, ( como el foro.elhacker.net xD ).
Saludos.
( he empezado a clase y tengo menos tiempo para postear xD )
El foro tambien manda junto al user y el pass un hash que despues de la que lie para lo de hotmail no me apetece investigar. Te dejo un ejemplo para warzone:
import urllib, urllib2, cookielib
usuario= raw_input("introduce user: ")
passw= raw_input("introduce pass: ")
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
data = urllib.urlencode({"usuario":usuario,"password":passw})
opener.open('http://warzone.elhacker.net/', data)
respuesta = opener.open('http://warzone.elhacker.net/index.php')
print respuesta.read()
Novlucker como tu ya posteaste la solucion aunque fue en VBS te cedo el proponer el siguiente ejercicio :laugh:
Te quedaste sin ideas XD
"Crear un Web crawler (http://es.wikipedia.org/wiki/Ara%C3%B1a_web) que reciba una URL y un número de 'niveles', y que liste todos los links de esa web, para el número de 'niveles' dado, así como el nivel al que pertenece el link"
Deben de entregarse links NO repetidos y pertenecientes al mismo dominio, ya que al listar links podemos terminar en otra web
Con niveles me refiero a que si voy a www.elhacker.net, como links de nivel 1 tengo por ejemplo; Faq's y Noticias (los links, no el nombre).
Ahora si ingreso a Faq's, tengo los siguientes links, Faq ADSL, Faq News, etc etc, estos son de 'nivel 2', porque llegue a ellos desde los de nivel 1, y así para demás niveles :P
Tener en cuenta además que de no revisar el code podemos terminar en un bucle infinito, por eso lo de links repetidos, porque si tengo un indice e ingreso a uno de sus links, pero en ese link tengo otra para volver al índice, ingresaría a link, luego a índice, y otra vez al link, y otra al índice, etc etc.
Otra cosa, se supone que desde un nivel solo puedes llegar a otro más alto, del 1 al 2, del 2 al 3, nunca del 2 al 1 por ejemplo, ya que se supone que comenzamos suponiendo links de nivel 1, así que cuando estemos en un nivel 2 y listemos sus links, de haber uno de nivel 1, ya lo habremos revisado, y por ende estará repetido :P
Espero no haber confundido mucho XD
Sino cualquier cosa el artículo de la wikipedia debería de aclararlo un poco, y siguiendo con ese mismo, yo ya tengo una 'araña' de tipo ..
Analizar los enlaces de un sitio para buscar links rotos.
Solo que la que tengo recibe una determinada web, busca links de 'descarga' (megaupload, rapidshare, filefactory, etc etc), los lista, y finalmente los revisa en sus resepectivos servidores a ver si siguen disponibles o fueron dados de baja por la razón que fuere ;D
Saludos
Más preguntas XD
Ya se aburrieron de Python?
Nadie ha intentado?
Nadie ha podido?
Nadie ha entendido el enunciado?
Damos el tema por muerto?
Creanme que es fácil, Python hasta trae clases que facilitan la tarea a la hora de parsear contenido web :-\
Saludos
Hice una primera version, pero me daba resultados que no queria asi que habra que refinarla pero ultimamente voy de culo con el tiempo. Mañana si puedo posteo algo. ;D
@Masita: Muy beuno que esten con este tipo de post, por cierto me gustaria robarte la idea y crear otro hilo pero con programacion Java, me permites? :xD
Salu2
Claro que te lo permito, no soy la SGAE asi que no te cobrare derechos de autor :xD
Saludos!
jeje ta bien solo lo preguntaba para no generar malos pensamientos ;)
Cita de: Novlucker en 25 Enero 2010, 18:19 PM
Más preguntas XD
Ya se aburrieron de Python?
Nadie ha intentado?
Nadie ha podido?
Nadie ha entendido el enunciado?
Damos el tema por muerto?
Creanme que es fácil, Python hasta trae clases que facilitan la tarea a la hora de parsear contenido web :-\
Saludos
Pues es algo complejo xD, yo lo he intentado el fin de semana, y ahora esta semana entre que tengo un examen de química que si suspendo voy a Septiembre y que ando algo liado metiendo Ubuntu...
Espero que no se borre el post :P :P, ha tenido mucho éxito.
Saludos.
Bueno me he estado revisando el post, y yo hace algun tiempo ya resolvi esto por mi parte, te lo deja todo en un fichero en forma de arbol:
# -*- coding: utf-8 -*-
from httplib import BadStatusLine, IncompleteRead
import re, urllib2
listagen = []
lista = []
lista2 = []
links_Erroneos = []
def web(Ruta, ff, x, y):
listagen.append(Ruta)
try: HTLM = urllib2.urlopen(Ruta)
except urllib2.URLError: links_Erroneos.append(Ruta)
except urllib2.HTTPError: links_Erroneos.append(Ruta)
except BadStatusLine: links_Erroneos.append(Ruta)
except IncompleteRead: links_Erroneos.append(Ruta)
else:
htlm = ""
for ele in HTLM: htlm += ele
f = re.findall("<a href=\"(http://www[a-zA-Z0-9_ \.:]+[\.com|\.es|\.cat|\.edu|\.tv|\.de])\"",htlm)
cad2 = " :"
cad5 = "\n"
if x == 0: ff.write(Ruta+": \n")
else: ff.write(cad2*x+cad5+cad2*x+"··"+Ruta+": \n")
x += 1
if (x <= y):
for ele in f:
if not ele in listagen:
lista.append(Ruta)
lista2.append(Ruta)
web(ele, ff, x,y)
else:
lista2.append(Ruta)
y = raw_input("Ingrese una cantidad de niveles, cuidado!! no se pase:")
try: y=int(y)
except ValueError: print "Esto no es un numero!!"
else:
ff = open("http2.txt", "w")
web("http://www.sport.es", ff, 0, y)
ff.close()
Saludos!!
ola a todos
para evitar abrir otro post, os ago mi pregunta aki
ay alguna manera de conseguir que te de los numeros primos en un rango determinado (a,b), que lo meteria el usuario
eske estoy mirando todo tipo de soluciones, pero no encuentro ninguna que se adapte a mis conocimientos de programar en python, soy nuevo asike evtad un lenguaje muy complicado que no lo entendere XD
PD: lo que aora mismo se de esto es: el if, elif,...., funciones (def ....) while, y rangos
PD2: no se como borrar mensajes, puse el segundo mensaje por error, pido disculpas :huh:
ya e conseguido sacar algo, aora el problema que tengo eske me sale esto:
es primo
2 es primo
3 es primo
5 es primo
y quiero que me salga como si fuera un rango normal, es decir:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
solo que me salgan solos los primos
otra cosa, cuando ago una prueba, por ejemplo 3 y 8, me dice que 4 es primo, y se pongo 1,8 solo me tiene en cuenta el 1
ola a todos
tengo una pregunta
se puede acer un programa para que el usuario ponga dos numeros (a, b) y que te de todos los numeros primos contendos en ese rango??
eske no e estado mirando muchas soluciones a este tipo de problema pero no consigo hacerlo
PD: evitad usad un lenguaje avanzado, ya que soy nuevo, lo que se es: if, elif,...., while, funciones y rangos
hola todos , me gusto mucho su foro por lo sencillo que es asi que me uni!!!
estoy aprendiendo a programar y todavia me da tres vueltas!!
tengo una duda en particualr
como ordeno un vector ( arreglo) de mayor a menor ???
gracias