7a4d639706a3faca6d12c23a8821b3e9
2021.10
stackoverflow.com
7a4d639706a3faca6d12c23a8821b3e9

Добрый день, вроде нетривиальная задача, но что-то не могу въехать. В общем, у меня в цикле из БД вытаскиваются значения, нужно запихнуть их в ассоциативный массив, при чем посчитать повторы, я хочу это делать примерно так:


if ($str=='1') $mas['один'] +=1;


if ($str=='2') $mas['два'] +=1;


Ну и в этом духе. Но дело в том, что вместо того, чтобы увеличилось значение счетчика ассоциативного массива, добавляется еще дополнительная пара ключ=>значение, а нужно просто переписать, увеличив значение на единичку... Как это сделать?



[Увеличение значения в ассоциативном массиве](/questions/655198/%d0%a3%d0%b2%d0%b5%d0%bb%d0%b8%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b2-%d0%b0%d1%81%d1%81%d0%be%d1%86%d0%b8%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d0%be%d0%bc-%d0%bc%d0%b0%d1%81%d1%81%d0%b8%d0%b2%d0%b5)
===============================================================================================================================================================================================================================================================================================================


stackoverflow.com
2021.10

Если твой массив рождается уже в цикле и не назначен до него то было-бы не плохо его определять 


... цыкл ...



```
if(!isset($mas)){
      $mas = array();
};

if($str=='1'){
   if(!isset($mas['один'])){
      $mas['один'] = 1;
   }else{
      $mas['один'] +=1;
   };
};

if($str=='2'){
   if(!isset($mas['два'])){
      $mas['два'] = 1;
   }else{
      $mas['два'] +=1;
   };
};

```

... // цыкл ...



e62f5373e1d9f3ad7a54b2635a2b61c7
2021.17
stackoverflow.com
e62f5373e1d9f3ad7a54b2635a2b61c7

Quero que quando eu click nos radios faça a chamada da função, atualmente esta assim.



```
$("input[name='txtCategoria']").on('blur', function(){
    var txtCategoria = $(this).val();
    $.get('buscar_tipos.php?txtCategoria=' + txtCategoria,function(data){
        $('#tipos').html(data);
    });
});

```

Porem so quando eu clico no radio e clico em outra parte da pagina que aparece a consulta, queria que quando clica-se ja executa-se, tentei assim.



```
$("input[name='txtCategoria']").on("click", function(){
    var txtCategoria = $(this).val();
    $.get('buscar_tipos.php?txtCategoria=' + txtCategoria,function(data){
        $('#tipos').html(data);
    });
});

```

Mas não funcionou, alguém poderia me ajudar?



[Alterar “on” para “click” em função JavaScript](/questions/192661/alterar-on-para-click-em-fun%c3%a7%c3%a3o-javascript)
========================================================================================================================


stackoverflow.com
2021.17

`blur` quer dizer *"quando o elemento perder o foco"*. É isso que acontece quando clicas fora desse elemento, e a função corre. Porque ele "perdeu o foco".


O mais semântico seria usar o [`change`](https://developer.mozilla.org/en-US/docs/Web/Events/change), que é quando o `input` mudar de valor. Assim, mesmo para quem navegue e mude o input com o teclado, a lógica vai funcionar.



```
$("input[name='txtCategoria']").on("change", function() {
  $.get('buscar_tipos.php?txtCategoria=' + this.value, function(data) {
    $('#tipos').html(data);
  });
});

```


0bf9cb7bd9539effb144983e1a33e6af
2020.29
stackoverflow.com
0bf9cb7bd9539effb144983e1a33e6af

tengo un pequeño problema y no alcanzo a entender xsl.
El caso es que tengo un xml con una tienda, que contiene productos y por otro lado, clientes, los cuales tienen nombre, apellidos, 4 tipos de numero de telefono, y la lista de la compra.


Lo que es ordenar los clientes, con sus nombres y todo eso lo tengo listo.


Lo que me falta es el poder calcular el subtotal de cada producto que compran (cantidad * precioProducto)


La cantidad está en la lista de la compra y el precioProducto está en la lista de productos.


Mejor dejo el codigo que tengo puesto:



> 
> ACLARACIÓN: El contenido completo del XML esta generado por un script
>  java, tanto nombres como numeros tanto las facturas son ficticias.
> 
> 
> 


XML:



```
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="factures.xsl"?>
<tenda>
    <productes>
        <producte preuUnitat='2.0'>Vi blanc botella 1L</producte>
        <producte preuUnitat='5.0'>Vi blanc botella 2L</producte>
        <producte preuUnitat='7.0'>Vi blanc garrafa 3L</producte>
        <producte preuUnitat='10.0'>Vi blanc garrafa 5L</producte>
        <producte preuUnitat='12.0'>Vi negre botella 1L</producte>
        <producte preuUnitat='15.0'>Vi negre botella 2L</producte>
        <producte preuUnitat='20.0'>Vi negre garrafa 3L</producte>
        <producte preuUnitat='25.0'>Vi negre garrafa 5L</producte>
        <producte preuUnitat='30.0'>Vi rosat botella 1L</producte>
        <producte preuUnitat='50.0'>Vi rosat botella 2L</producte>
        <producte preuUnitat='60.0'>Vi rosat garrafa 3L</producte>
        <producte preuUnitat='70.0'>Vi rosat garrafa 5L</producte>
    </productes>
    <factures>
        <factura numero="1">
            <client>
                <nom>Maria Josefa</nom>
                <cognoms>Crespo Soto</cognoms>
                <telefons>
                    <mobil tipus="feina">701 194 296</mobil>
            </telefons>
            </client>
            <compra>
                <producte id='n2'>9</producte>
                <producte id='n3'>3</producte>
                <producte id='r1'>4</producte>
                <producte id='r2'>1</producte>
                <producte id='r3'>2</producte>
            </compra>
        </factura>
        <factura numero="2">
            <client>
                <nom>Manuela</nom>
                <cognoms>Lara Rico</cognoms>
                <telefons>
                    <mobil tipus="privat">665 852 593</mobil>
                    <fixe tipus="privat">943 213 214</fixe>
                    <fixe tipus="feina">979 427 658</fixe>
            </telefons>
            </client>
            <compra>
                <producte id='b1'>10</producte>
                <producte id='b2'>6</producte>
                <producte id='b3'>2</producte>
                <producte id='b5'>9</producte>
                <producte id='r3'>7</producte>
            </compra>
        </factura>
        <factura numero="3">
            <client>
                <nom>Emilio</nom>
                <cognoms>Santos</cognoms>
                <telefons>
                    <mobil tipus="privat">725 215 087</mobil>
                    <fixe tipus="privat">810 696 902</fixe>
            </telefons>
            </client>
            <compra>
                <producte id='b2'>1</producte>
                <producte id='b3'>3</producte>
                <producte id='n2'>9</producte>
                <producte id='n3'>4</producte>
                <producte id='r1'>1</producte>
                <producte id='r2'>1</producte>
            </compra>
        </factura>
    </factures>
</tenda>

```

Y el XSL:



```
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="compra">
        <div class="listaCompra">
            <xsl:for-each select="producte">
                <div class="idProd"><xsl:value-of select="@id"/></div>
                <div class="nomProd"><xsl:value-of select="/tenda/productes/producte/."/></div>
                <div class="cantProd"><xsl:value-of select="."/></div>
                <div class="precProd"><xsl:value-of select=". * $temp"/></div>
            </xsl:for-each>
        </div>
        <xsl:variable name="temp">
            <xsl:for-each select="/tenda/productes/producte">
                <xsl:value-of select="@preuUnitat"/>
            </xsl:for-each>
        </xsl:variable>
    </xsl:template>
</xsl:stylesheet>

```

Dejo tambien una captura de lo que tengo:


[![Imagen de como quedaría la cosa](https://i.stack.imgur.com/dQzkd.png)](https://i.stack.imgur.com/dQzkd.png)


EDIT:
Ya lo solucioné todo. con un xsl:key pude hacerlo.



[Ayuda con cálculo XSL](/questions/171222/ayuda-con-c%c3%a1lculo-xsl)
=====================================================================


stackoverflow.com
2020.29

Puedes usar el siguiente XPath:



```
<span>
    <xsl:value-of select="sum(tenda/productes/producte/@preuUnitat)"/>
</span>

```

Bueno ese Xpath suma y este multiplica la suma por la cantidad:



```
<span>
    <xsl:value-of select="sum(tenda/productes/producte/@preuUnitat)*count(tenda/productes/producte/@preuUnitat)"/>
</span>

```

Puedes jugar con eso y revisar [funciones numericas en XPath](https://www.w3.org/TR/xpath-functions-31/#numeric-functions)



c16270a9095c111702029073c377103c
2020.40
stackoverflow.com
c16270a9095c111702029073c377103c

Mi problema es que me han pedido que haga una clase de Python sobre Animales, en la que tiene como atributos el Nombre, la Fecha de Nacimiento, el Tipo, el Estado y el ID. La idea es que el programa tiene un menú y la primera opción es "Crear Animal", donde se pide al usuario introducir la información de los animales. La cosa es que si se escoge esta opcion 10 veces, la 10 deberá quedar guardado la información de los distintos animales. He probado definiendo funciones o métodos dentro de la clase, haciéndolo fuera, etc. Y lo único que consigo es que se guare el último animal introducido, no que se guarden todos. He probado con diccionarios, con tuplas y con listas, haciendo por ejemplo una lista de listas donde cada lista tenga el contenido de un animal. Pero como decía haga lo que haga y ponga donde lo ponga solo consigo almacenar el último introducido. Os adjuntaré el código de lo que tengo hecho, las frases de cortesía al usuario están en catalán pero imagino que se entenderá más o menos (soy principiante y sé que puede haber cosas mal). Gracias de antemano.



```
class Animal:
    def __init__ (self, nom, datanaix, tipus, estat, id):
        self.nom=nom
        self.datanaix=datanaix
        self.tipus=tipus
        self.estat=estat
        self.id=id
    def getnom(self):
        return self.nom
    def getdatanaix(self):
        return self.datanaix
    def gettipus(self):
        return self.tipus
    def getestat(self):
        return self.estat
    def getid(self):
        return self.id

```

Y aquí el menú:



```
sortir=False
while not sortir:
    print("Escull una opció")
    print("1. Crear Animal")
    print("2. Crear Propietari")
    print("3. Mostrar Animals")
    print("4. Mostrar Animals per tipus")
    print("5. Mostrar Propietaris")
    print("6. Fer Log-in")
    print("7. Sortir")

    opcio=int(input("Introdueix la opció: "))
    if opcio==1:
        nom=input("Introdueix el nom: ")
        nom=nom.lower()
        datanaix=input("Introdueix la data de naixement: ")
        tipus=input("Introdueix el tipus Gos (G), Conill (C) o Serp (S): ")
        tipus=tipus.upper()
        estat=input("Introdueix l'estat, es a dir, si té propietari: ")
        id=tipus+"-"+nom
        obj1=Animal(nom, datanaix, tipus, estat, id)
        obj1.mostraranimal()
        #obj1.omplediccionari() #no se si esta funcion se tendrá que usar o no
        list=[]
        list.append(Animal(nom, datanaix, tipus, estat, id))

```


[¿Cómo hago objetos “ilimitados” de una clase?](/questions/357851/c%c3%b3mo-hago-objetos-ilimitados-de-una-clase)
=================================================================================================================


stackoverflow.com
2020.40

Debes usar algún contenedor, una lista te vale, tu error es que **declaras una nueva lista en cada iteración del ciclo** y se la asignas a la variable `list`. Por tanto, como reasignas un nuevo objeto `list` (vacío) en cada iteración a la variable, la lista que generaste en la iteración anterior se queda sin referencias y el GC la destruye junto al objeto `Animal` que contenía. Al final solo queda viva y asociada a la variable la lista que se creo en la última iteración del ciclo.



```
sortir = False
animals = []      #  <<<<< Declara aquí
while not sortir:
    print("Escull una opció")
    print("1. Crear Animal")
    print("2. Crear Propietari")
    print("3. Mostrar Animals")
    print("4. Mostrar Animals per tipus")
    print("5. Mostrar Propietaris")
    print("6. Fer Log-in")
    print("7. Sortir")

    opcio = int(input("Introdueix la opció: "))
    if opcio == 1:
        nom = input("Introdueix el nom: ")
        nom = nom.lower()
        datanaix = input("Introdueix la data de naixement: ")
        tipus = input("Introdueix el tipus Gos (G), Conill (C) o Serp (S): ")
        tipus = tipus.upper()
        estat = input("Introdueix l'estat, es a dir, si té propietari: ")
        id = tipus + "-" + nom
        obj1 = Animal(nom, datanaix, tipus, estat, id)
        obj1.mostraranimal()
        #obj1.omplediccionari() #no se si esta funcion se tendrá que usar o no
        animals.append(Animal(nom, datanaix, tipus, estat, id))

```

Dos observaciones:


* `list` es una función preconstruida en Python que además permite crear objetos de tipo `list`. No lo uses nunca como nombre de variable, tampoco otras [funciones builtin](https://docs.python.org/3/library/functions.html).


Como mínimo es poco legible y confuso para otros desarrolladores que lean el código. Es fácil deducir con justificada razón, que ante cosas como `bar = foo(list)` a la función se le pasa una referenciara al builtin/tipo `list` y no un objeto `list`. Además, si llegaras a necesitar usar `list` en otra parte del código, tienes un problema, ahora `list` es un objeto `list`, se acabó el poder hacer cosas como : `nueva_lista = list("Hola")`


Si llega a ser necesario usar uno de esos nombres, raro, pero si se da el caso y por legibilidad es oportuno, la convención marca que se debe agregar un guion bajo al final: `list_`.
* El uso de getters en Python no tiene generalmente mucho sentido dado que no existen los atributos privados, es más pitónico acceder directamente al atributo y no crear un método que simplemente lo retorna. Quiźas lo más parecido que hay en Python a getters y setters son las [propiedades](https://es.stackoverflow.com/a/328268/15089).



491b011edb1601e6b4aa3248e63af61e
2020.16
stackoverflow.com
491b011edb1601e6b4aa3248e63af61e

soy un poco nuevo en pyhton y queria peguntar si alguno de ustedes sabe como dividir un string por tamaño en una lista, es decir que cada tantos caracteres se vayan guardando en una lista, por ejemplo:
x = '123456789' y para este ejemplo quisiera hacer esto
lista = ['12','34','56',78',9] cada dos caracteres se van guardando y el ultimo pues como solo es uno que se guarde solo tengo en codigo esto:



```
x = 'abcdefghijklmnñopqrstuvwxyz '
for i in range(0,len(x),5):
    if i+5 < len(x):
        for j in range(i,i+5):
            lista.append(x[:i+5])
            print(lista)
['abcde']
['abcde', 'abcde']
['abcde', 'abcde', 'abcde']
['abcde', 'abcde', 'abcde', 'abcde']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'opqrs']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'opqrs', 
'opqrs']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'opqrs', 
'opqrs', 'opqrs']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'opqrs', 
'opqrs', 'opqrs', 'opqrs']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'opqrs', 
'opqrs', 'opqrs', 'opqrs', 'opqrs']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'opqrs', 
'opqrs', 'opqrs', 'opqrs', 'opqrs', 'tuvwx']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'opqrs', 
'opqrs', 'opqrs', 'opqrs', 'opqrs', 'tuvwx', 'tuvwx']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'opqrs', 
'opqrs', 'opqrs', 'opqrs', 'opqrs', 'tuvwx', 'tuvwx', 'tuvwx']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'opqrs', 
'opqrs', 'opqrs', 'opqrs', 'opqrs', 'tuvwx', 'tuvwx', 'tuvwx', 'tuvwx']
['abcde', 'abcde', 'abcde', 'abcde', 'abcde', 'fghij', 'fghij', 'fghij', 
'fghij', 'fghij', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'klmnñ', 'opqrs', 
'opqrs', 'opqrs', 'opqrs', 'opqrs', 'tuvwx', 'tuvwx', 'tuvwx', 'tuvwx', 
'tuvwx']

```

esa es la respuesta como les dije soy nuevo y si me pueden ayudar les agradeceria



[DIVIDIR TEXTO POR TAMAÑO](/questions/339867/dividir-texto-por-tama%c3%91o)
===========================================================================


stackoverflow.com
2020.16


```
x = 'abcdefghijklmnñopqrstuvwxyz '
lista=[]
c=0
cad = ""
for i in x: #itera todos los caracteres
    cad=cad + i #concatena
    c = c + 1
    if(c == 5):
        lista.append(cad)
        c = 0
        cad = ""
lista.append(cad)
print(lista)




output:
['abcde', 'fghij', 'klmnñ', 'opqrs', 'tuvwx', 'yz ']

```

