Python - Limitar la cantidad de caracteres en un input()

 
Vista:

Limitar la cantidad de caracteres en un input()

Publicado por Jac (8 intervenciones) el 13/03/2018 19:42:19
Buenas tardes:

A ver si me podeis echar un cable con esto, que por mas que busco no doy con ello:

Quiero hacer un input() o un raw_input() en el terminal linea de comandos (sin entorno grafico) y limitar la cantidad de caracteres que se pueden introducir y visualizar en pantalla.

Algo al estilo de este codigo:

input("Quien eres? ", maxlength=4)

Lo que quiero decir es que una vez que hayas completado el numero de pulsaciones o caracteres indicados ya no se puedan introducir mas... Por logica, ni se podrian introducir, ni se presentarian en pantalla.

En el ejemplo de antes, para respuesta Jose:
Quien eres? Jose

En el ejemplo de antes, para respuesta Augusto:
Quien eres? Augu

En el caso de que el "maxlength" fuese igual a 2, para la respuesta Jose quedaria asi:
Quien eres? Jo

He mirado algunas librerias (curses, ncurse, pynput), pero no he visto nada clarificador.

Me podeis dar una idea de como hacerlo?

Muchas gracias de antemano y un saludo!

Jose.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Limitar la cantidad de caracteres en un input()

Publicado por Esteban Sánchez (2 intervenciones) el 16/03/2018 00:02:05
No tengo respuesta pero me interesa saberla
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 1.116
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Limitar la cantidad de caracteres en un input()

Publicado por kip (243 intervenciones) el 18/03/2018 17:28:30
Hola, tu pregunta es interesante asi que he intentado buscar la respuesta y parece que encontré algo usando el paquete Click

1
2
3
4
5
6
7
8
9
10
11
12
13
import click
 
maxlength = 2
name = ''
 
click.echo('Write your name: ', nl=False)
 
while len(name) < maxlength:
    temp = click.getchar().decode('utf-8')
    click.echo(temp, nl=False)
    name += temp
else:
    click.echo('\nYour name is %s' % name)

Uso la funcion echo que provee Click pero puedes usar print tambien, el secreto esta en la funcion o metodo getchar.

Uso el decode porque en la version 3 de Python el modulo msvcrt en especial la funcion getch que es la que usan en el paquete retorna el caracter como un byte string, esto sucede solo en Windows.... deberas ajustarlo como desees si te da algun error.

A partir de aquella logica puedes crear tu propia funcion...

Pruebalo y nos cuentas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Limitar la cantidad de caracteres en un input()

Publicado por Jose (8 intervenciones) el 14/04/2018 21:21:47
Gracias por responder!

Instalo el paquete (en ubuntu) al parecer este paquete solo esta disponible para Python 3.

# apt-get install python3-click.

Pruebo con el ejemplo que me indicabas, pero los atributos del modulo parecen no funcionar.

$ python3.4 ejemplo.py

Esta es la salida que entrega el interprete:

Traceback (most recent call last):
File "1.py", line 6, in <module>
click.echo('Write your name: ', nl=False)
AttributeError: 'module' object has no attribute 'echo'

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Limitar la cantidad de caracteres en un input()

Publicado por Lab (1 intervención) el 21/03/2019 15:56:11
1
2
def pregunta_y_pinta(limite=5)
    print(input('Dame una respuesta')[:limite])


Las strings en python son 'suscriptables' (indexables): Eso significa que en realidad son como un array ordenado de chars indexados y que puedes hacer referencia al elemento de inicio o fin de una string como si fuese un array.

Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
>>>saludo = 'Hola caracola'
>>>print(saludo)
Hola caracola
>>>print(saludo[:3])
Hol
>>>print(saludo[-4:])
cola
>>>print(saludo[3:9])
a cara
>>>print(saludo[3:-4])
a cara
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Limitar la cantidad de caracteres en un input()

Publicado por jac (8 intervenciones) el 23/03/2019 01:22:39
Efectivamente, se pueden referenciar a los strings como si fueresen arrays.

Pero no es lo que necesito.

Lo que necesito es "limitar la entrada de caracteres" en el objeto o la variable que tomara los valores introducidos en el input... o en su defecto, poder indicar el el propio input la longuitud maxima permitida de caracteres.

En definitiva, que se pueda expresar de alguna manera el numero maximo de caracteres que se pueden introducir en la instruccion...

Bien en la propia instruccion, o bien el el objeto o variable que tomara los valores introducidos.

Ejemplo 1, que no funciona:

1
2
var=len(10)
var=input("Dimelo: ")


Ejemplo 2, que tampoco funciona:

1
dime=input("Dimelo: ", maxlength=10)


Ejemplo 3, que mas de lo mismo:

1
input("Dimelo: ", maxlength=10)


Gracias por responder.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 399
Bronce
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Limitar la cantidad de caracteres en un input()

Publicado por joel (25 intervenciones) el 24/03/2019 13:25:21
Hola jac, no se si te puede servir esto:

1
2
3
4
5
answer=""
while len(answer)!=10:
    answer = input("What's up, doc? ")
    if(len(answer)!=10):
        print("tienes que introducir 10 caracteres")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Limitar la cantidad de caracteres en un input()

Publicado por jac (8 intervenciones) el 25/03/2019 20:04:36
Hola joel!

Lo que propones es una entrada forzada de 10 caracteres... Tampoco es eso lo que busco.

A ver si puedo expresarme con claridad.

En SQL, definicion de una columna de una tabla, por ejemplo:

dime varchar(10)

Aqui estamos diciendo que la columna "dime" contendra campos de un maximo de 10 octetos (caracteres)... alfanumericos en este caso.

Y la idea es:

Al hacer una pregunta (con un input por ejemplo, que es el caso mas sencillo)...

Que el usuario mientrasl introduce datos (los caracteres tipeados en el teclado), no pueda sobrepasar la longuitud indicada.

Osease, que mientras esta tecleando y presentando datos en pantalla solo se puedan introducir y/o presentar en pantalla el maximo de caracteres indicados.

En el caso de sql "dime varchar(10)" longuitud maxima del string dime 10 octetos.. pues hacer lo mismo o algo muy parecido en python al preguntar al usuario por el objeto o la variable "dime".

Un saludo.

Y gracias por responder.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 399
Bronce
Ha aumentado su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Limitar la cantidad de caracteres en un input()

Publicado por joel (25 intervenciones) el 26/03/2019 09:15:49
Hola Jac, creo que te he entendido... he encontrado como obtener unicamente 10 caracteres, pero no consigo verlos cuando los entra...

1
2
3
4
5
6
7
8
9
10
11
import readchar
 
string = ""
 
while len(string) < 10:
    c = readchar.readchar()
    if c == readchar.key.CR:
        break
    string += c
 
print(string)

He tenido que instalar la librería readchar...
1
pip3 install readchar

Voy a ver si encuentro alguna otra manera...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Limitar la cantidad de caracteres en un input()

Publicado por jac (8 intervenciones) el 26/03/2019 19:56:52
Hola de nuevo joel!

Gracias por el interes prestado...

En la libreria curses existe el metodo getstr().

Esto que te pongo a continuacion es parte de la documentacion original en Ingles:

window.getstr()
window.getstr(n)
window.getstr(y, x)
window.getstr(y, x, n)

Read a bytes object from the user, with primitive line editing capacity.

Ubicacion en pantalla definida por y, x... Longuitud maxima del string n.

Te pego un pedazo de codigo:
1
2
3
4
5
6
7
8
9
10
11
12
import curses
def main(scr):
        scr.clear()
        curses.echo()
        scr.addstr(0, 0, "Dime: ")
        longuitud_maxima_del_string=10          #10 octetos y/o bytes...
        dime = scr.getstr(0, 6, longuitud_maxima_del_string)          #longuitud maxima definida previamente
        scr.addstr(2, 0, "Me has dicho: {}\n".format(dime))
        scr.addstr(4, 0, "<Enter> para salir")
        scr.getkey()
 
curses.wrapper(main)


Pero no quiero utilizar curses... No necesito entorno grafico.

Ni nada por el estilo que me obligue a implementar un monton de codigo y llamadas a funciones innecesarias y/o complejas.

Lo que quiero es utilizar el terminal en bruto, como haciamos en los años 80, a la antigua usanza, sin entorno grafico...

Este trocito de codigo o algo similar seria ideal, importando una libreria sencillita que pudiera existir:

1
input("Dime:  ", maxlength=10)		#10 octetos y/o bytes longuitud maxima...



Gracias de nuevo y un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad