2015-12-26 3 views
1

Je suis à la recherche d'une solution pour limiter le nombre de caractères qu'un utilisateur peut saisir dans un raw_input. J'ai deux raw_inputs dans une même ligne, qui ressemble à ceci:Limite raw_input longueur

Name: (user input)       Date of Birth: (user input) 

Si un utilisateur tape un nom qui est plus grand que la quantité X de caractères, il va commencer à écrire sur la date de naissance, comme celui-ci :

Name: Mary Jane Smith McDonald Obama Romney Bushh of Birth: (user input) 

La chose la plus proche que j'ai trouvé ceci: Limiting Python input strings to certain characters and lengths, mais cela ne fonctionne pas pour moi. Je ne veux pas qu'il montre un avertissement; Je veux simplement arrêter d'accepter plus de caractères et/ou passer à l'entrée suivante.

J'utilise béni, qui est une bibliothèque qui utilise des malédictions pour positionner la deuxième entrée dans la même ligne que la première.

Des idées?

+1

Malheureusement, raw_input() ne fonctionnera pas pour vous. Ce que vous devrez faire est de gérer manuellement les entrées au clavier et d'effectuer vous-même le rendu à travers les malédictions (ou bénies). – Aldehir

+0

@Aldehir je vois. Et avez-vous une idée de comment pourrais-je faire cela en utilisant béni? –

+0

FWIW, imposer une limite de longueur sur le nom d'une personne n'est probablement pas une bonne stratégie de conception. –

Répondre

1

La fonction getstr() qui est la raw_input alternative pour curses, travaille avec une contrainte de caractère:

s = stdscr.getstr(0,0, 15) #Input is limited to 15 characters, once the limit is hit, it stops accepting more 
+0

Ça a marché comme un charme! Mon seul problème est que j'utilise déjà «béni» pour beaucoup de choses qui seraient autrement trop compliquées avec des «malédictions», et je ne peux en utiliser qu'une seule à la fois. Savez-vous si béni, ou toute autre bibliothèque fondée sur les malédictions d'ailleurs, a cette fonction? –

1

Voici une chose intéressante que je viens fouetté, pourrait aider quelqu'un regarder ce fil qui n'utilise pas malédictions . Contraint efficacement la longueur de chaîne pour l'entrée de l'utilisateur pendant l'entrée.

import readchar 
import sys 

string = "" 

while len(string) < 20: 
    c = readchar.readchar() 
    sys.stdout.write(c) 
    string += c 

print '\n' + string 
+0

C'est exactement ce que je cherchais, mais quand j'ai essayé de l'implémenter dans mon code, j'ai eu l'erreur suivante: "sqlite3.ProgrammingError: Vous ne devez pas utiliser de bytestrings 8 bits sauf si vous utilisez un text_factory capable d'interpréter 8 bits bytestrings (comme text_factory = str) Il est fortement recommandé de simplement passer votre application aux chaînes Unicode. " –

+0

Aurait probablement besoin de regarder votre code source complet pour vous donner la meilleure réponse. Il semble que vous sauvegardiez les entrées utilisateur dans une base de données sqlite avec quelque chose comme 'cursor.execute ('INSERT INTO table VALUES (1,1,1,1)', user_input)'. Vous devriez forcer le user_input à être unicode, 'unicode (user_input)'. – vesche

+0

C'est exactement ce que j'ai obtenu mais je peux quand même vous envoyer le code si vous le voulez. Le problème est, j'utilise des caractères UTF-8, donc je ne peux pas utiliser unicode. J'ai d'abord essayé de simplement remplacer "(chaîne)" par "(nom)" qui est un raw_input, mais cela n'a donné aucun résultat. Puis j'ai essayé "nom =" Nom: "et c'est quand j'ai eu l'erreur –