Foros Python

Versión completa: Limpiar el terminal, funciona en linux pero no en windows.
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola gente, ¿cómo están?
Cómo es mi primer post les cuento un poco de mí, tengo 65 años y como comprenderán ya no concurro a la universidad
soy un autodidacta con mucho tiempo para dedicarle a python, estaba estudiando c pero terminé un tanto frustrado
ya que me pareció muy difícil de aprender y como python es muy amigable aquí estoy.-
Les dejo el programita para que me digan si hay alguna solución, en linux funciona pero en windows 7 no limpia el terminal.


Código:
import os

def limpiar():
  input("\n Pulse una tecla para continuar...")
  if os.name == "posix":
     os.system ("clear")
  elif os.name == ("ce", "nt", "dos"):
     os.system ("cls")

while True:
  a=int(input("\n Ingrese un número mayor a cero...:"))
  if a == 0:
     break
  else:
     limpiar()

Saludos.
Daniel
Hola Daniel, ¿cómo estás?

Los comandos de tu función son correctos. El problema radica en la segunda comparación; os.name nunca será una tupla y por esta razón os.system("cls") no llega a ejecutarse. En su lugar, probablemente lo que quieras determinar es si os.name es igual a alguno de los elementos de esa tupla, más que a la tupla en sí misma. Para ello puedes usar el operador in:

Código:
def limpiar():
 input("
Pulse una tecla para continuar...")
 if os.name == "posix":
    os.system ("clear")
 elif os.name in ("ce", "nt", "dos"):
    os.system ("cls")

No obstante creo que sería suficiente utilizando os.name == "nt" (dudo que "dos" o "ce" sean valores retornados por alguna versión desde Windows 95).

Saludos!
Hola Francisco. Muchas gracias por tu tiempo, funciona a la perfección.-

Cita:......nunca será una tupla y por esta razón os.system("cls") no llega a ejecutarse.

Voy a leer en la página con la cual estoy estudiando para ver si me explico esta parte, no la entiendo del todo.-

Saludos.
Daniel
Daniel, veámoslo de esta forma.

Código:
>>> import os
>>> os.name
'nt'

Esto es lo que ocurre cuando ejecutamos el código desde la consola interactiva en Windows. La otra opción es que en lugar de 'nt' veamos 'posix' en distribuciones de Linux (tal vez aun 'os2' en Mac OS). Lo que es común a las alternativas es que todas son cadenas.

Código:
>>> type(os.name)
<type 'str'>

Ahora bien, en tu código original estabas comparando una cadena (os.name) con una tupla.

Código:
>>> os.name == ("ce", "nt", "dos")
False

Como se trata de tipos diferentes, por definición esa comparación es siempre falsa. La única forma en que sea verdadera es que os.name sea una tupla con esos tres elementos, lo que es imposible pues dijimos que siempre es una cadena.

Como te comentaba anteriormente, lo que quieres hacer es determinar si os.name es igual a "ce", o bien a "nt", o bien a "dos". Eso puedes lograrlo utilizando el operador or:

Código:
>>> os.name == "ce" or os.name == "nt" or os.name == "dos"
True

La otra propuesta es utilizar el operador in, que retorna True cuando el valor de la izquierda es igual a alguno de los elementos dentro de la colección a la derecha (podría ser una tupla, un diccionario, una lista o cualquier otra colección).

Código:
>>> # ¿Está os.name dentro de ("ce", "nt", "dos")?
... os.name in ("ce", "nt", "dos")
True

Espero haber clarificado las cosas.

Saludos!
Hola Francisco que tengas un muy buen día.-
Gracias por la explicación, ahora me queda claro.-

Saludos, hasta la próxima.-
Daniel