我是Python的新手,目前正在寻找一些实习或工作。我目前正在使用Python编写一个程序,该程序读取包含此形状数据的文件:
Id;name;surname;age;gender;friends;
ID 和年龄是正整数,
性别可以是"男性"或者"女性",
和朋友是由逗号分隔的数字数组,其代表与当前人物成为朋友的人的身份。如果Person1是Person2的朋友,那么它必须反之亦然。
正如您在上面的示例中所看到的," Person"的属性。用分号分隔,诀窍是不是每个人都有各自的属性,当然,他们的不同之处在于朋友的数量。因此,任务的第一部分是制作一个程序,该程序读取文件并创建一个结构,该结构代表具有上述属性的人员列表。我必须通过Id搜索这些人。
第二部分是使用两个参数(Id1,Id2)创建一个函数,如果具有Id2的人是具有Id1的人的朋友,则返回True。否则,它返回false。
我有一些想法,但我不知道如何实现这一点,因为我还不太了解Python。我想最好的结构是字典,但我不知道如何将文件加载到其中,因为所有人的属性都不同。我很乐意为你提供任何帮助。 这是我尝试编写代码:
people = open(r"data.txt")
class People:
id = None
name = ''
surname = ''
age = None
gender = ['male', 'female']
friends = []
#def people(self):
# person = {'id': None,
# 'name': '',
# 'surname': '',
# 'age': None,
# 'gender': ['male', 'female'],
# 'friends': []
# }
# return person
def community(self):
comm = [People()]
return comm
def is_friend(id1, id2):
if (id1 in People.friends) & (id2 in People.friends):
return True
people.close()
答案 0 :(得分:0)
你的问题太宽泛了,但我会给你一些提示:
O(n)密钥访问的最简单数据结构确实是一个字典。请注意,dict需要不可变值作为键(但由于你的ID是整数,这很好),但可以将任何值作为值。但这只适用于(相对)小数据集,因为它全部存储在内存中。如果您需要更大的数据集和/或持久性,您需要一个数据库(关键字:值,关系,文档,您可以自行选择)。
Python具有类和计算属性
在Python中,缺少值是None
对象
标准库中有csv
个文件解析器。
现在你只需阅读文档并开始编码。
[edit] wrt / your code snippet
class People:
id = None
name = ''
surname = ''
age = None
gender = ['male', 'female']
friends = []
Python不是Java或PHP。您在上面定义的是类属性(由类的所有实例共享),您需要实例属性(在__init()
方法中定义)。你应该read the FineManual。
此外,如果您使用的是Python 2.7.x,则希望您的类继承自object
(历史原因)。
所以你的Person
课应该是这样的:
class Person(object):
def __init__(self, id, name, surname, age, gender, friends=None):
self.id = id
self.name = name
self.surname = surname
self.age = age
self.gender = gender
self.friends = friends or []
然后创建一个Person
实例:
person = Person(42, "John Cleese", "Archie Leach", 77, "male", [11, 1337)])
def is_friend(id1, id2):
if (id1 in People.friends) & (id2 in People.friends):
return True
这里有几点意见:
首先:您要么重命名此功能are_friends
或使其成为Person
类的方法,然后只传递(单个)Person
实例(不是' id')作为参数。
第二:在Python中,&
是按位运算符。逻辑"和"运算符是拼写的,and
。
第三:表达式本身具有真值,因此您的if
语句是多余的。每当你看到类似的东西时:
def func():
if <some expression>:
return True
else:
return False
你可以把它重写为:
def func():
return <some expression>
或者,如果您想确保func
返回正确的布尔值(True
或False
):
def func():
return bool(<some expression>)
我会在此停留,因为我不打算教你如何编程。你显然需要至少完整的官方Python教程,也可能需要一些完整的初学者教程。