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

 
Vista:

Limitar la cantidad de caracteres en un input()

Publicado por Jac (14 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.120
Bronce
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 (257 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 (14 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 (14 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: 3.475
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 joel (901 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 (14 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: 3.475
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 joel (901 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 (14 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

Limitar la cantidad de caracteres en un input()

Publicado por Juan (1 intervención) el 06/07/2019 09:49:54
1
2
3
4
5
6
7
8
def entrada_teclado(info, numero_caracteres):
    cadena = input(f'{info}, máximo {numero_caracteres} carácteres: ')[:numero_caracteres]
    return cadena
 
 
nombre = entrada_teclado('Introduce nombre', 5)
 
print(nombre)

Con esto aunque el usuario escriba más caracteres de los que quieres, la variable sólo te tomara el tamaño que tu quieras.
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
sin imagen de perfil
Val: 2.808
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 tincopasan (1082 intervenciones) el 06/07/2019 13:02:25
hace mucho tiempo ya, implementé una función así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#-*- coding:utf-8 -*-
import msvcrt
 
def input_corto(msj=">>>",largo=8):
    print(msj)
    contador= 0
    cadena =""
    while contador < largo:
        if msvcrt.kbhit():
            ch = str(msvcrt.getche(),'utf -8')
            if ch == '\r':
                break
            else:
                cadena+=ch
                contador+= 1
    print()
    return cadena
 
prueba=input_corto("Escribe tu nombre: ")
if len(prueba) < 8:
    print("excelente")
input("Salir")
quizá la puedas aplicar.
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.120
Bronce
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 (257 intervenciones) el 06/07/2019 16:38:10
La libreria msvcrt es solo apicable en Windows
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 Sergio Fernandez (1 intervención) el 22/08/2019 17:35:51
1
2
3
4
5
aux  = input()
var=""
for i in range(0,10):
    var += aux[i]
print(var)
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 Alexander Ibarguen Mendoza (1 intervención) el 05/10/2020 00:31:25
entrada = input(textoPregunta)[:cantidadCaracteres]
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 Isa (3 intervenciones) el 13/04/2022 20:25:15
podrías probar contando los espacios entre las palabras, es decir, si tenemos en cuenta que no introducimos espacios en blanco ni al principio ni al final de una cadena, la cantidad de palabras que introducimos siempre serán el número de espacios más 1.

A partir de aquí, se podría restringir el número de palabras que introducimos, o al menos eso creo.
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 Isa (3 intervenciones) el 13/04/2022 21:03:15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
MAX_PAL = 10
cad = input("Introduce la cadena: ")
 
espacios = 0
for i in range (len(cad)):
    if (cad[i] == " "):
        espacios += 1
 
#print(espacios)
num_pal = espacios + 1
 
#print(num_pal)
 
while (num_pal > MAX_PAL):
    print("Error: el máximo de palabras permitido es 10. ")
    cad=input("Introduce la cadena: ")
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 Isa (3 intervenciones) el 14/04/2022 13:43:40
En caso de que no se tengan en cuenta los espacios del principio y del final, podemos usar la función split que nos separa la cadena introducida por palabras de forma que podemos almacenarla en un array, de manera que la dimensión de este será el número de palabras introducidas.

1
2
3
4
5
6
MAX_PAL=10
cad = input("Introduce la cadena: ")
lista= cad.split()
while(len(lista)> MAX_PAL):
    print("Error: el máximo de palabras permitido es 10. ")
    cad=input("Introduce la cadena: ")
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 Jose (14 intervenciones) el 06/10/2022 19:23:41
Parece que no entendeis a lo que me refiero...

Cuando digo "limitar", quiero decir:
Que el teclado no permita introducir mas caracteres de los indicados.
Y que en la pantalla, el cursor se quede parado, y no pueda avanzar mas, o ir mas lejos de los caracteres indicados.

Lo vuelvo a repetir:
Que las pulsaciones del teclado mas aya de las indicadas no se vean reflejadas en pantalla, y no se incluyan en el objeto, variable, etc...

No quiero o no necesito una purga o una revision posterior al input.
Posterior a haber pulsado <enter>.

Tiene que ser el mismo input el tiene que forzar la longuitud maxima de los caracteres permitidos, para que el cursor no avance mas de lo indicado.

Gracias por seguir intentandolo!
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