Python 如何将用户输入与类对象数据进行比较?
这里完全是初学者 我试图理解如何将用户输入数据与预设的类数据进行比较。假设Python 如何将用户输入与类对象数据进行比较?,python,Python,这里完全是初学者 我试图理解如何将用户输入数据与预设的类数据进行比较。假设class=Person,加上年龄、体重和姓名 我有两个人,johnsmith=Person(50200,“约翰·史密斯”) 汤姆·琼斯=个人(40220,“汤姆·琼斯”) 我想提示用户输入名称Tom,并检查Person类的所有“name”属性。比如说 person=input(打印(“插入此人姓名”)输入“Tom”,然后返回所有Tom的列表供用户选择,如果只有一个,则确认用户实际上指的是Tom Jones 我是否应该创建
class=Person
,加上年龄、体重和姓名
我有两个人,johnsmith=Person(50200,“约翰·史密斯”)
汤姆·琼斯=个人(40220,“汤姆·琼斯”)
我想提示用户输入名称Tom,并检查Person类的所有“name”属性。比如说
person=input(打印(“插入此人姓名”)
输入“Tom”,然后返回所有Tom的列表供用户选择,如果只有一个,则确认用户实际上指的是Tom Jones
我是否应该创建一个像people=[tomjones,johnsmith,(etc)]
这样的数组,并在其中进行搜索
请给我指出正确的方向,谢谢
我是否应该创建一个像people=[tomjones,johnsmith,(etc)]
这样的数组,并在其中进行搜索
对
虽然我想如果你希望大量的“人”和频繁的查询总是在同一个字段上(例如,你总是按姓名搜索某个特定的人),你也可能需要创建一个索引来加快搜索速度,例如创建一个dict(可能是WeakValueDictionary
)它将你的搜索键映射到合适的人
这是因为迭代一个列表既便宜又高效,但是遍历整个列表是线性时间(O(n)),所以如果列表很长,并且遍历了很多次,那么它就加起来了。建立索引的成本很高(并且需要至少遍历整个列表一次),而且查找需要更多的设置,但除了查找之外,设置是固定时间(O(1))。将Person类的实例存储在列表中是一种方法。然后,您可以在列表中循环以匹配名称 e、 g
首先,您不需要将
打印
放入输入
中。将所有个人数据保存在某种类型的集合中,比如一个列表。然后,您需要做的就是result=[dude for dude in person\u list if dude.name==user\u input]
当然,调整变量名以匹配您的案例将所有person
保留在列表中,然后您可以使用for
-循环检查每个person
中的姓名,为什么不使用字典?
class Person():
def __init__(self, age, weight, name):
self.age = age
self.weight = weight
self.name = name
all_persons = []
all_persons.append(Person(50, 200, "John Smith")) # add your Person instance to a list
all_persons.append(Person(40, 220, "Tom Jones"))
name_input = input("Insert the person's name: ")
for person in all_persons: # loop through list of all Person instances
if name_input.lower() in person.name.lower(): # lower() to handle case
# do something with person