Python Forum
element in list detection problem
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
element in list detection problem
#1
I am trying to make a UK grading system. The console based app will take name and grade as inputs, save it into a list of dictionaries, convert that list of dictionaries to add a key value pair that represents what grade the student got from. so above 70% is first, above 60% is 2:1 etc. WHat i have problem is with my process name function. basically it takes an input and if the input contains characters that are not part of the english alphabet then it loops and asks for a new name but not before printing an appropriate error message. It keeps looping until the name input contains only letters of the english alphabet. When that occurs the function returns the name. my code follows


def process_name():
    ALPHABET = ["a","b","c","d","e","f","g",
                "h","i","j","k","l","m","n",
                "o","p","q","r","s","t","u",
                "v","w","y","y","z"]
    detected=True
    while True:
        name=input("What is the student's name?\n").lower()
        for char in name:
            if char not in ALPHABET:
                detected=False
        if detected==True:
            return name
        else:
            print(f"{name} contains characters that are not part of the English alphabet!!\n"
                  f"Please enter a valid name!!\n")
the problem is that it doesn't always work correctly. It always gives the error and loops if the name input has symbols or numbers but sometimes a clean input like "jim" or "tim" still causes the loop to keep going. as you can see i have the f string to inform the user that the input has characters that are not a part of the alphabet and even if i give it appropriate input it still gives me the error message and loops instead of returning the input to the main function of the program. Sorry if its confusing im just dazzled by the result. i tried setting the alphabet as a string or a list and it still sometimes does not work appropriately. Please help
Reply
#2
(Apr-09-2024, 08:15 PM)jacksfrustration Wrote: sometimes a clean input like "jim" or "tim" still causes the loop to keep going.
I think it is because you don't reinitialize detected to True when the while loop starts again. You could move line 6 inside the while loop to correct this.

You can also avoid completely the need for the detected variable by using the for ... else structure.
def process_name():
    ALPHABET = ["a","b","c","d","e","f","g",
                "h","i","j","k","l","m","n",
                "o","p","q","r","s","t","u",
                "v","w","y","y","z"]
    while True:
        name=input("What is the student's name?\n").lower()
        for char in name:
            if char not in ALPHABET:
                break # this exits the for loop as soon as a bad character is detected
        else: # this part is executed only if the for loop completed without encountering a 'break' statement.
            return name
        print(f"{name} contains characters that are not part of the English alphabet!!\n"
                  f"Please enter a valid name!!\n")
« We can solve any problem by introducing an extra level of indirection »
Reply
#3
Looks like a good place to use "all".
from string import ascii_lowercase

def process_name():
    while True:
        name = input("What is the student's name?\n")
        if all(c in ascii_lowercase for c in name.lower()):
            return name
        print(f"{name} contains characters that are not part of the English alphabet!!\n"
            "Please enter a valid name!!\n")

print("Welcome", process_name())
Reply
#4
Sorry, buggy post.
« We can solve any problem by introducing an extra level of indirection »
Reply
#5
I believe, in Britain, it is customary to write ones name with a capital letter at the beginning.

from string import ascii_lowercase, ascii_uppercase

alphi = ascii_lowercase + ascii_uppercase + ' '
def washyename(name):
    for n in name:
        if n not in alphi:
            return False
    return True

# assume most people know their name and can write it correctly
# don't go straight to a while loop
name=input("What is your name? Get it right boy! ")

# some people will get it wrong
if not washyename(name):    
    while not washyename(name):
        print(f'This name {name} is not acceptable, let\'s do that again and try get it right this time! ... ')
        name=input("What is your name? ")
        if washyename(name):
            print('Amazing, you got it right!')
Reply
#6
Quote:I believe, in Britain, it is customary to write ones name with a capital letter at the beginning.
You can use lower() for the comparison without changing the entered name.

It makes more sense to use set operations for this problem.
from string import ascii_lowercase


alphi = set(ascii_lowercase + ' ')


def enter_name():
    while True:
        name = input("What is the student's name?\n").lower()
        if len(set(name.lower()) - alphi) == 0:
            return name
        print(
            f"{name} contains characters that are not part of the English alphabet!!\n"
            "Please enter a valid name!!\n"
        )


print(enter_name())
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  list in dicitonary element problem jacksfrustration 3 740 Oct-14-2023, 03:37 PM
Last Post: deanhystad
  Find (each) element from a list in a file tester_V 3 1,245 Nov-15-2022, 08:40 PM
Last Post: tester_V
  Сheck if an element from a list is in another list that contains a namedtuple elnk 8 1,865 Oct-26-2022, 04:03 PM
Last Post: deanhystad
  Membership test for an element in a list that is a dict value for a particular key? Mark17 2 1,232 Jul-01-2022, 10:52 PM
Last Post: Pedroski55
  How to solve this simple problem? Check if cvs first element is the same in each row? thesquid 2 1,255 Jun-14-2022, 08:35 PM
Last Post: thesquid
  How to find the second lowest element in the list? Anonymous 3 2,039 May-31-2022, 01:58 PM
Last Post: Larz60+
  check if element is in a list in a dictionary value ambrozote 4 2,000 May-11-2022, 06:05 PM
Last Post: deanhystad
  Problem with "Number List" problem on HackerRank Pnerd 5 2,142 Apr-12-2022, 12:25 AM
Last Post: Pnerd
  sorting a list of lists by an element leapcfm 3 1,901 Sep-10-2021, 03:33 PM
Last Post: leapcfm
  Convert each element of a list to a string for processing tester_V 6 5,371 Jun-16-2021, 02:11 AM
Last Post: tester_V

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020