2016-04-05 8 views
1

Ich erstelle ein Programm in Python 3.x, wo es den Benutzer nach dem Vornamen und dann nach dem Nachnamen fragt und diese in Variablen speichert, die dann zu einer Variablen verkettet werden:Python - Validierung, um sicherzustellen, dass die Eingabe nur Zeichen enthält AZ

firstName = input("What's your first name? ") 
lastName = input("What's your first name? ") 
name = firstName + " " + lastName 

I versucht:

while True: 
    try: 
     firstName = input("What's your first name? ") 
     lastName = input("What's your first name? ") 
     name = firstName + " " + lastName 
     break 
    except ValueError: 
     print("That's invalid, please try again.") 

die sicherstellt, dass eine Zeichenfolge eingegeben wird, sondern 'bob38', '74' oder Eingeben '] [; p /' alle Zählung als String-Werte, so dass diese würde akzeptiert werden, was ich nicht will.

Ich möchte gültige Eingabe, nur die Buchstaben AZ/az (Groß- und Kleinbuchstaben) enthalten, und wenn die Eingabe etwas anderes enthält, wird eine Fehlermeldung ausgegeben (zB 'Das ist ungültig, versuche es erneut.') Und der Benutzer wird die Frage erneut gestellt. Wie würde ich das tun?

+0

dies scheint der Weg zu sein: http://stackoverflow.com/questions/5183488/python-string-replace-based -on-chars-not-in-regex –

+3

Also ist es Peter O'Hanraha-Hanrahan verboten, sich für deine Seite anzumelden? –

+1

@DanielRoseman Das ist ein * sehr * guter Punkt .... Und ich, der eine Antwort gegeben hat, habe gerade gemerkt, dass mein Nachname auch von dieser Seite abgelehnt wird. HA! :) – idjaw

Antwort

4

Was Sie tun möchten, ist tatsächlich zu überprüfen, ob Ihre Zeichenfolge nicht isalpha() ist und einen Fehler ausgeben und Ihre Schleife fortsetzen, bis Sie einen gültigen Eintrag erhalten.

Also, um Ihnen eine Idee zu geben, hier ist ein einfaches Beispiel:

while True: 
    name = input("input name") 
    if name.isalpha(): 
     break 
    print("Please enter characters A-Z only") 

print(name) 

Beachten Sie, dass in den Kommentaren zu dieser Frage wie erwähnt, dies nur Namen beschränkt ist, die Buchstaben enthalten. Es gibt mehrere gültige Namen, die ' und - enthalten, die wahrscheinlich berücksichtigt werden sollten, wenn Namen validiert werden sollen.

+2

Oder 'wenn name.isalpha(): break 'dann brauchen Sie nicht die Fortsetzung, die beste Lösung unabhängig. –

+1

@PadraicCunningham Ah! Na sicher! Danke für die Köpfe hoch. Geändert. – idjaw

+0

Danke. Wäre es viel schwieriger, Bindestriche (-) und Apostrophe (') einzufügen? – BobZeBuilder

2

assert all('a'<=letter<='z' or 'A'<= letter <= 'Z' for letter in name)

Dies wird einen Fehler aus, wenn der Name eines nicht Alphabet Buchstaben enthält.

1

Sie können einen einfachen regulären Ausdruck für diesen Einsatz -

import re 
is_valid_name = r'[a-zA-Z]+' 

if bool(re.match(firstName, is_valid_name)) and bool(re.match(lastName, is_valid_name)): 
    name = firstName + lastName 
else: 
    print('thats invalid') 
1

Es gibt eine andere Lösung. Es ist nicht so effizient wie mit re oder isalpha sondern ermöglicht es Ihnen, leicht die Charaktere passen Sie erlauben:

valid_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 
# Just insert other characters into that string if you want to accept anything else. 

while True: 
    firstName = input("What's your first name? ") 
    if all(char in valid_characters for char in firstName): 
     break 
    print("That's invalid, please try again.") 

Die all prüft, ob alle Zeichen aus firstName in der valid_characters String enthalten sind, und gibt False wenn einer von ihnen ist nicht drin.

So Leerzeichen hinzuzufügen und minus - Sie etwas verändern kann:

valid_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ -' 
#      whitespace is here ------------------------------^ 
Verwandte Themen