如何检查来自类数组中用户的字符串输入
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 是不需要的,但你应该意识到这种危险。以上是关于如何检查来自类数组中用户的字符串输入的主要内容,如果未能解决你的问题,请参考以下文章