Home > OS >  How to check String input from user inside Class Array
How to check String input from user inside Class Array

Time:12-18

I'm working on an exercise, but I'm stuck on the last part

The section goes here:

Rewrite the function remove_friend so it asks for both the firstname and the lastname and remove all in the list_of_friends for which the first- and last name of the friend object equals the first- and last name entered by the user

In the remove_friends function, I know it's not correct.

In my head, I think I need to compare the delete_first_name and delete_last_name against the first_name and last_name in the new_friends class.

However, I don't know what the syntax would be in order to accomplish this.

Does anyone have hints on how to proceed? I would greatly appreciate if you could give suggestions, and not write the solution.

class Friend:
    def __init__(self, first_name, last_name, phone_number):
        self.first_name = first_name
        self.last_name = last_name
        self.phone_number = phone_number

    def print_info(self, index):
        print(f"\n {self.first_name}, {self.last_name}, {self.phone_number} \n")


list_of_friends = []


def add_friends():
    print(" ")
    first_name = input("Enter the first name: ")
    last_name = input("Enter the last name: ")
    phone_number = input("Enter the phone number: ")
    new_friend = Friend(first_name.upper(), last_name.upper(), phone_number)
    list_of_friends.append(new_friend)
    print(f"{new_friend.first_name.title()} {new_friend.last_name.title()} has been added to the list \n")


def view_friends():

    if len(list_of_friends):
        for counter, new_friend in enumerate(list_of_friends, 0):
            print(" ")
            new_friend.print_info(counter)

    else:
        print(" ")
        print("List is empty \n")


def remove_friends():
    print(" ")
    delete_first_name = input("Enter first name to remove: ").upper()
    delete_last_name = input("Enter last name to remove: ").upper()

    full_name = [delete_first_name, delete_last_name]

    if full_name not in list_of_friends:
        print(f"{delete_first_name} {delete_last_name} does not exist in the list \n")
    else:
        list_of_friends.remove(delete_first_name)
        list_of_friends.remove(delete_last_name)
        print(f"{delete_first_name} {delete_last_name}has been deleted from the list \n")


def print_menu():
    menu_string = "\n----Options----\n"
    menu_string  = "1: Add\n"
    menu_string  = "2: View\n"
    menu_string  = "3: Remove\n"
    menu_string  = "4: Exit\n"
    print(menu_string)


user_input = 0


while user_input != 4:
    print_menu()
    try:
        user_input = int(input("Choose one of the above options: "))
        if user_input < 1 or user_input > 4:
            print("Invalid number. Number must be between 1-4 \n")
        elif user_input == 1:
            add_friends()
        elif user_input == 2:
            view_friends()
        elif user_input == 3:
            remove_friends()
    except Exception as err:
        print(f"Invalid input: {err}")


print("Exiting \n")

CodePudding user response:

The list_list_friends has Friend objects and not strings. you need to access the Friend attributes. for example like this (function is not comeplete):

def remove_friends():
    first_name=...
    last_name = ...
    temp_list = list_of_friends[:]
    for friend in temp_list :
        if first_name == friend.first_name and last_name == friend.last_name:
            list_of_friends.remove(friend)

Note that in the beginning I copied the list - do not iterate over a list (or similar) and delete objects from the same list, it is a recipe for bugs.

CodePudding user response:

Loop the the list of friends and check first and last name

def remove_friends():
    print(" ")
    delete_first_name = input("Enter first name to remove: ").upper()
    delete_last_name = input("Enter last name to remove: ").upper()

    new_list = []

    for frnds in list_of_friends:
      fnm = frnds.first_name
      lnm = frnds.last_name

      if(fnm == delete_first_name and lnm == delete_last_name):
        # print something meaningfull
        continue
      else:
        new_list.append(frnds)

    # new_list will contain the list of friends after removal
  • Related