{"id":2361,"date":"2020-12-27T16:09:26","date_gmt":"2020-12-27T22:09:26","guid":{"rendered":"https:\/\/naps.com.mx\/blog\/?p=2361"},"modified":"2021-03-22T22:56:33","modified_gmt":"2021-03-23T04:56:33","slug":"algoritmo-de-cuadrados-medios-en-python","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/algoritmo-de-cuadrados-medios-en-python\/","title":{"rendered":"Algoritmo de Cuadrados Medios en Python para la generaci\u00f3n de n\u00fameros pseudoaleatorios."},"content":{"rendered":"<p>Veremos c\u00f3mo implementar el Algoritmo de Cuadrados Medios en Python para la generaci\u00f3n de n\u00fameros pseudoaleatorios.<\/p>\n<p><!--more--><\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/12\/algoritmo-de-cuadrados-medios-en-python.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2373\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/12\/algoritmo-de-cuadrados-medios-en-python.jpg\" alt=\"\" width=\"640\" height=\"426\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/12\/algoritmo-de-cuadrados-medios-en-python.jpg 640w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/12\/algoritmo-de-cuadrados-medios-en-python-300x200.jpg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<h2>Algoritmos para la generaci\u00f3n de n\u00fameros pseudo aleatorios<\/h2>\n<p>Entre los algoritmos para generar n\u00fameros pseudo aleatorios se cuentan: <strong>Algoritmo de cuadrados medios<\/strong>, algoritmos de productos medios, algoritmo de multiplicador constante, algoritmo lineal, algoritmo congruencial multiplicativo, algoritmo congruencial aditivo, algoritmos congruenciales no lineales.<\/p>\n<p>En el presente art\u00edculo se analizar\u00e1 e implementar\u00e1 el <strong>algoritmo de cuadrados medios en Python<\/strong>\u00a0.<\/p>\n<h2>Algoritmo de cuadrados medios en Python<\/h2>\n<h2>El algoritmo<\/h2>\n<ol>\n<li>Se elige como <strong>valor semilla<\/strong> un n\u00famero de m\u00e1s de 3 d\u00edgitos (t=cantidad de d\u00edgitos del valor semilla)<\/li>\n<li>Se eleva ese n\u00famero al cuadrado.<\/li>\n<li>Al valor que result\u00f3, seleccione los<em> t<\/em> d\u00edgitos de en medio (si se requiere, utilice un 0 como primer d\u00edgito).<\/li>\n<li>Repetir desde el paso n\u00famero 2 tomando \u00e9ste\u00a0nuevo n\u00famero.<\/li>\n<\/ol>\n<h3>Implementaci\u00f3n en Python<\/h3>\n<pre class=\"nums:true lang:python decode:true\"># Algoritmo de cuadrados medios, obtenido en https:\/\/naps.com.mx \r\nsemilla = input(\"Escriba semilla: \")\r\ntam1 = len(semilla)\r\nprint(\"Cantidad de d\u00edgitos: \", tam1)\r\nnumero1 = int(semilla)\r\nfor i in range(10):\r\n\tnumero2 = numero1**2\r\n\tsnumero2 = str(numero2)\r\n\ttam2 = len(snumero2)\r\n\tprimerc = int((tam2 - tam1) \/ 2)\r\n\r\n\tsnumero3 = snumero2[primerc:primerc+tam1]\r\n\tprint (\"{}.  {}\".format(i,snumero3))\r\n\tnumero1 = int(snumero3)\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h2>Explicaci\u00f3n del programa<\/h2>\n<h3>Variables<\/h3>\n<p>El programa utiliza las siguientes variables:<\/p>\n<ul>\n<li><strong>semilla<\/strong>: Un valor de tipo string que almacenar\u00e1 el valor semilla, es decir un n\u00famero de \u00a04 \u00a0o m\u00e1s d\u00edgitos para\u00a0 iniciar el algoritmo.<\/li>\n<li><strong>snumero2<\/strong>: el valor semilla elevado al cuadrado, en formato de cadena de caracteres.<\/li>\n<li><strong>snumero3<\/strong>: los n d\u00edgitos de en medio, en formato de cadena de caracteres.<\/li>\n<li><strong>numero1<\/strong>: el valor semilla, pero en formato num\u00e9rico entero.<\/li>\n<li><strong>numero2<\/strong>: el valor semilla elevado al cuadrado en formato num\u00e9rico entero<\/li>\n<li><strong>tam1<\/strong>: La longitud (o n\u00famero\u00a0 de d\u00edgitos ) del valor semilla<\/li>\n<li><strong>tam2<\/strong>: La longitud (o n\u00famero de d\u00edgitos del valor elevado al cuadrado.<\/li>\n<\/ul>\n<h3>Explicaci\u00f3n<\/h3>\n<ul>\n<li><strong>tam1 = len(semilla)<\/strong> Extrae la cantidad de d\u00edgitos del valor semilla<\/li>\n<li><strong>numero1 = int(semilla)<\/strong> Convierte el valor semilla a formato num\u00e9rico entero<\/li>\n<li><strong>for i in range(10): <\/strong> \u00a0 Para producir 10 n\u00fameros pseudo aleatorios.<\/li>\n<li><strong>numero2 = numero1**2<\/strong> eleva el valor semilla al cuadrado<\/li>\n<li><strong>snumero2 = str(numero2)<\/strong> Convierte el valor que est\u00e1 elevado al cuadrado, en cadena de caracteres.<\/li>\n<li><strong>tam2 = len(snumero2)<\/strong> Cuenta la cantidad de d\u00edgitos que tiene el valor elevado al cuadrado<\/li>\n<li><strong>primerc = int((tam2 &#8211; tam1) \/ 2)<\/strong> Calcula cu\u00e1l ser\u00e1 el primer car\u00e1cter a extraer.<\/li>\n<li><strong>snumero3 = snumero2[primerc:primerc+tam1]<\/strong> Extrae n caracteres (seg\u00fan halla sido la cantidad de d\u00edgitos que ten\u00eda el valor semilla)<\/li>\n<li><strong>numero1 = int(snumero3)<\/strong> Convierte el valor extra\u00eddo en n\u00famero para hacer de nuevo el proceso.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>Ejecuci\u00f3n del programa<\/h3>\n<p>Veamos la ejecuci\u00f3n de \u00e9ste programa usando como semilla los valores 7543. Observamos que nos produce 10 n\u00fameros pseudo aleatorios. Si los dese\u00e1ramos en formato decimal, en el rango de 0 a 1, solo se necesitar\u00eda incluir el punto decimal al inicio de la cifra.<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/12\/algoritmo-de-cuadrados-medios-en-python.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2364\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/12\/algoritmo-de-cuadrados-medios-en-python.png\" alt=\"algoritmo de cuadrados medios en python\" width=\"296\" height=\"240\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/12\/algoritmo-de-cuadrados-medios-en-python.png 746w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/12\/algoritmo-de-cuadrados-medios-en-python-300x244.png 300w\" sizes=\"auto, (max-width: 296px) 100vw, 296px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>En \u00e9ste art\u00edculo vimos una forma de generar n\u00fameros pseudo aleatorios en Python. Los n\u00fameros pseudo aleatorios son una parte importante en la elaboraci\u00f3n de modelos de simulaci\u00f3n.<\/p>\n<p>Si deseas ver \u00e9ste algoritmo implementado en Java, puedes consultarlo aqu\u00ed:\u00a0<a href=\"https:\/\/naps.com.mx\/blog\/algoritmo-de-cuadrados-medios-para-la-generacion-de-numeros-pseudoaleatorios-implementacion-en-java\/\">Algoritmo de Cuadrados Medios para la generaci\u00f3n de n\u00fameros Pseudoaleatorios: Implementaci\u00f3n en Java<\/a><\/p>\n<h3>Aprende Python a trav\u00e9s de ejemplos<\/h3>\n<p><iframe loading=\"lazy\" width=\"741\" height=\"417\" src=\"https:\/\/www.youtube.com\/embed\/ozXDfFxz_dI\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<h3>Bibliograf\u00eda<\/h3>\n<ol>\n<li>Coss(1996) <a href=\"https:\/\/books.google.com.mx\/books?id=iY6dI3E0FNUC&amp;printsec=frontcover&amp;hl=es&amp;source=gbs_ge_summary_r&amp;cad=0#v=onepage&amp;q&amp;f=false\" target=\"_blank\" rel=\"noopener\">Simulaci\u00f3n, un enfoque pr\u00e1ctico<\/a>. Ed. Limusa.<\/li>\n<li>Turqu\u00eda Moraleja (2013). <a href=\"https:\/\/books.google.com.mx\/books?id=BZBGAgAAQBAJ&amp;printsec=frontcover&amp;dq=modelado+y+simulacion&amp;hl=es&amp;sa=X&amp;ved=0ahUKEwj01-WLkaPWAhUL2WMKHYx9DtYQ6AEIMzAC#v=onepage&amp;q=modelado%20y%20simulacion&amp;f=false\" target=\"_blank\" rel=\"noopener\">Modelado y simulaci\u00f3n de eventos discretos<\/a>. Editorial UNED.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Veremos c\u00f3mo implementar el Algoritmo de Cuadrados Medios en Python para la generaci\u00f3n de n\u00fameros pseudoaleatorios.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[216],"tags":[324,213,230,53],"class_list":["post-2361","post","type-post","status-publish","format-standard","hentry","category-simulacion-ciencias","tag-algoritmos-para-generar-numeros-pseudo-aleatorios","tag-numeros-pseudo-aleatorios","tag-python","tag-simulacion"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2361","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=2361"}],"version-history":[{"count":10,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2361\/revisions"}],"predecessor-version":[{"id":2394,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2361\/revisions\/2394"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=2361"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=2361"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=2361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}