如何检查来自类数组中用户的字符串输入

Posted

技术标签:

【中文标题】如何检查来自类数组中用户的字符串输入【英文标题】:How to check String input from user inside Class Array 【发布时间】:2022-01-20 23:31:43 【问题描述】:

我正在做一个练习,但我被困在最后一部分

该部分在这里:

重写函数 remove_friend,使其同时要求输入名字和姓氏,并删除 list_of_friends 中好友对象的名字和姓氏等于用户输入的名字和姓氏的所有内容

在remove_friends函数中,我知道它不正确。

在我的脑海中,我认为我需要将 delete_first_name 和 delete_last_name 与 new_friends 类中的 first_name 和 last_name 进行比较。

但是,我不知道要完成此操作的语法是什么。

有人对如何进行有提示吗?如果您能提供建议而不是编写解决方案,我将不胜感激。

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_namehas 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")

【问题讨论】:

【参考方案1】:

循环好友列表并检查名字和姓氏

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

【讨论】:

【参考方案2】:

list_list_friends 有 Friend 对象而不是字符串。 您需要访问 Friend 属性。 比如这样(功能不完整):

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)

请注意,在开始时我复制了列表 - 不要遍历列表(或类似列表)并从同一列表中删除对象,这是导致错误的秘诀。

【讨论】:

在 Alon.b,这非常有效!太感谢了。你能解释一下为什么需要一个 temp_list 吗?我很想知道如果我们要在同一个列表上进行更改,为什么会产生错误。 最常见的是尝试按索引访问列表时:for i in range(len(my_list))。项目的索引在运行时会发生变化,并且您访问了错误的项目。如果您在迭代列表时尝试将项目添加到列表中,情况也是如此。这个想法是你不想改变你迭代的同一个列表的长度。在你的情况下,我猜 temp_list 是不需要的,但你应该意识到这种危险。

以上是关于如何检查来自类数组中用户的字符串输入的主要内容,如果未能解决你的问题,请参考以下文章

针对用户输入测试字符串和整数数组

如何检查我的哈希是否有来自字符串数组的键?

来自字符串数组的有效二叉树

用于检查 char 数组是不是包含 Java 中用户给定字母的 if 语句

在 C++ 中验证来自用户的整数输入

Arraylist.contains 不会检查字符串