 pozo)
              apuesta = solicitar_apuesta(pozo, apuesta_minima)
          print ("Gracias por participar, su pozo final es: ", pozo)
     
 
 

El programa es bastante pequeño, apenas 9 lineas de código, todo queda delegado en las funciones auxiliares: **solicitar_apuesta()**, **jugar_mano()** y **mostrar_resultado()**.

Le agregamos dos mensajes, uno de bienvenida y otro de despedida, el estilo de estos mensajes es formal. 

La función **solicitar_apuesta()** es muy importante, y está sujeta a estas restricciones: primero no debe aceptar apuestas que estén fuera del rango permitido, es decir, la apuesta debe ser mayor o igual a la apuesta mínima y menor o igual al pozo disponible, con una excepción, se acepta el valor 0. La otra condición que verifica esta función es si el pozo es suficiente para apostar. Si no hay suficiente dinero entonces también retorna un valor que permita salir del ciclo. Estas condiciones son importantes para que funcione adecuadamente la condición que tenemos en nuestro while.

Considerando todo lo anterior la función **solicitar_apuesta()** queda de este modo:


     
     
     def solicitar_apuesta(pozo, apuesta_minima):
     	valor = -1
     	if pozo < apuesta_minima:
     		print ("Su pozo no le alcanza para seguir jugando, inténtelo de nuevo en otra oportunidad")		
     	else:
     		prompt = "\nIngrese su apuesta (min: "+str(apuesta_minima)+", max: "+str(pozo)+", 0 para finalizar juego): "
     		while valor!= 0 and not (apuesta_minima <= valor <= pozo):
     			valor = int(input(prompt))
     	print ("")
     	return valor
     
 
 

La función solicitar_apuesta verifica si el pozo es menor que la apuesta mínima, si este es el caso entonces retorna el valor -1, con esto se rompe la condición **(apuesta_minima <= apuesta <= pozo)** y el ciclo principal termina. Por otro lado, si el pozo es suficiente para apostar (es decir, pozo >= apuesta_minima), solicitamos al usuario que ingrese un monto. La condición escogida asegura que el valor sólo puede ser 0 ó estar dentro del rango entre apuesta_minima y pozo.

La función mostrar_resultado es muy simple:


     
     
     def mostrar_resultado(resultado, pozo):
     	if resultado > 0:
     	   print("Jugador gana $", resultado)
     	elif resultado < 0:
     	   print("Jugador pierde $", -resultado)
     	else:
     	   print("Empate")
     	print ("Su pozo es: $", pozo, "\n")
     
 
 

Noten que esta función asume que el resultado es negativo cuando el jugador pierde, positivo cuando gana y 0 cuando hay empate. Además es necesario que el pozo esté actualizado antes de invocar a esta función.

Hay dos funciones más que usaremos más adelante, en la segunda parte de la lógica de juego, y que son parte de la interfaz de usuario.

Primero vamos a necesitar una función que muestre las cartas de una mano y su valor, esta función es muy simple:


     
     
     
     def mostrar_mano(mensaje, mano):
     	print(mensaje, 
     	      " ".join ( str(carta[0])+"-"+carta[1] for carta in mano),
     		  " ( Valor: ", valor_mano(mano), ")\n")
     
 
 

La función **mostrar_mano()** imprime en pantalla un mensaje y luego una representación de las cartas. Si la mano es : [('K', 'P'),(8,'D')] su representación visual será: "K-P  8-D  (Valor: 18)".

La función **valor_mano()** es la misma que ya definimos en el [capítulo anterior](http://www.programando.org/blog/2011/04/la-reglas-del-juego/).

La otra función que usaremos en el próximo capítulo es una que nos permita solicitar al usuario que ingrese una entre varias opciones. A esta función la llamaremos **solicitar_jugada()**:


     
     
     def solicitar_jugada(prompt, opciones):
              """ opciones es un conjunto de strings que representan las 
              opciones del menú, deben venir todas en mayúsculas."""
     	opcion = input(prompt).strip().upper()
     	while opcion not in opciones:
     		print("opción incorrecta")
     		opcion = input(prompt).strip().upper()
     	print ("")
     	return opcion
     
 
 

La función input() nos retorna un String. Un string tiene los métodos **strip()** y **upper()**, **strip()** elimina todos los espacios en blanco que tenga un string, upper convierte el string a mayúsculas (es decir, si el string era 'a' queda como 'A').

En el próximo capítulo de nuestro [curso de programación](http://www.programando.org/blog/aprende-a-programar/) terminaremos el programa que implementa el juego de blackjack, en ese momento revisaremos las funciones que implementan la lógica del juego y usaremos las dos funciones que acabamos de implementar.

Ahora los ejercicios:

 
 
	
   1. Escribe la función pedir **solicitar_jugada()** en el IDLE y prueba ingresando distintos prompt y opciones (por ejemplo: solicitar_jugada("Responda la pregunta con un si o un no", ["SI", "NO"]).
 
	
   2. ¿Qué problema tiene la función **solicitar_apuesta()** cuando ingresas algo distinto a un número? ¿Se te ocurre como evitar el problema?
 
	
   3. ¿Se te ocurre otra forma de escribir la función **mostrar_mano()**?
 
	
   4. Escribe una función **jugar_mano()** que sólo imprima en pantalla el mensaje "LOGICA DE JUEGO PENDIENTE" y úsala para probar la función blackjack.
 








The Pact on Migration and Asylum: Turning the European Territory into a Non-territory?


 Can a part of the territory of the European Union be turned into a “non-territory” where the fundamental rights of the migrants and asylum seekers to appeal and to remain in their destination country while their applications are examined, and the right for an individual assessment in line with international standards, are as it were contracted, owing to the very attributes of this “non-territory”?
 This article argues that the Pact on Migration and Asylum, in particular with the pre-entry screening and the new border procedures, subtly develops and consolidates policies and rules aimed at “deterritorializing” the territory of the EU while reinforcing its practices of externalization. Moreover, this unprecedented deterritorialization-externalization combination, in order to produce tangible policy results, presupposes the cooperation of third countries on expulsion and readmission, as well as more solidarity among the Member States. Having critically examined these two dimensions, the authors conclude that the new measures contained in the Pact might be conducive to the enhanced precarization of the legal positions of migrants and asylum seekers and to potential tensions with strategic third countries.A new training program will prepare people on the near west and near northwest sides for careers in construction and give them an advantage as they apply to jobs in the field.
The new effort, called Build Your NW, could allow more people in those neighborhoods to work on area construction projects. The program launches next week and will have free tuition because it is receiving tax increment financing funding from the Indianapolis Department of Metropolitan Development.
The Indiana Construction Roundtable Foundation, Hawthorne Community Center and developer Browning Investments are partnering on