Tengo problemas con la instrucción for and if pero ocasionalmente recibo un error de memoria

w = 0
x = []

while w < 100:
    if w % 2 != 0:
        x.append('boss')
    else:
        x.append(w)
        w = w+1

No estoy segura de qué está causando el problema.

0
Tijani Jamiu 6 oct. 2019 a las 04:38

6 respuestas

La mejor respuesta

Déjame arreglar tu código (declaración while)

w = 0
x = []

while w < 100:
      if w % 2 != 0:
          x.append('boss')
      else:
          x.append(w)
      w = w+1

El error es que w siempre es 1, porque

  1. w solo se agrega por 1 si w es divisible por dos. Como uno no es divisible por dos, este código se detendrá

  2. Use la declaración for si lo desea. La declaración for es más fácil que la declaración while. Entonces, el código será así

x = []
for w in range(100):
      if w % 2 != 0:
          x.append('boss')
      else:
          x.append(w)
  1. Y puede usar la comprensión de listas para hacerlo más fácil pero un poco complejo.
x = [w if w % 2 != 0 else 'boss' for w in range(100)]
0
6 oct. 2019 a las 01:51

Debe usar la función str () para convertirlo en cadena e incrementar el w, ya sea impar o par. Así que colóquelo en el primer guión de while y no en if.

w = 0
x = []

while (w < 100):
    if w % 2 != 0:
        x.append(str(w))
    else:
        x.append(w)
w += 1    
0
aligumustosun 6 oct. 2019 a las 01:52

Intente lo siguiente:

w = 100
x = []
for i in range(w+1):
    if i % 2 != 0:
        x.append('boss')
        continue
    x.append(i)
    i = i+1
0
Prish 6 oct. 2019 a las 01:47
x = ['boss' if w % 2 != 0 else w for w in range(100)]
0
Nill 6 oct. 2019 a las 01:49

El problema es que la línea w = w + 1 debe estar fuera de su "else" para que por cada iteración del ciclo while la variable se incremente.

w = 0
x = []

  while w < 100:
        if w % 2 != 0:
            x.append('boss')
        else:
            x.append(w)
        w = w+1

Por cierto, podría usar la comprensión de la lista para hacerlo fácilmente (este código genera exactamente la misma lista):

x = [val if not val % 2 else 'boss' for val in range(100)]

3
brunoluvizotto 6 oct. 2019 a las 01:43

Como las publicaciones anteriores a mí ya han explicado, el problema era con dónde incrementabas 'w'. Alternativamente, podría usar 'w' en un bucle for sin tener que incrementarlo explícitamente.

Aquí hay una versión más corta que usa la comprensión de la lista:

x = [("boss" if w%2!=0 else w) for w in range(100)]
0
san 6 oct. 2019 a las 01:55
58253609