机器学习方向python面试题集锦

 

1  谈谈python 指针变量的理解,并解释python交换两个变量的值实现语句a,b=b,a原理?

答:python的变量都是指针,python并不会为定义的变量开辟内存空间,而是为值开辟内存空间。因此,a,b=b,a语句中,a指针指向b的值,b指针指向a的值,从而实现了变量值的交换。

 

2  输出Fibonacci数列,上限100,递归公式为F[n]=F[n-1]+F[n-2],初值F[1]=1,F[2]=1。

答:

a,b = 0, 1
while b<100:
    print (b),
    a, b = b, a+b

输出:1 1 2 3 5 8 13 21 34 55 89

 

3  简述python中, list, tuple, dict, set的区别?并分别回答如下问题。

(1)tuple可以索引吗?

(2)用set去除mylist = [1, 1, 2, 3, 4, 'ok','ok']重复元素。

(3)dict的健值(key)可以重复吗?

答:

list: 链表, 有序的项目, 通过索引进行查找;构建语法mylist=[1,2,3]

tuple: 元组, 元组将多样的对象集合到一起, 不能修改, 通过索引进行查找;构建语法mytuple=1,2,3

dict: 字典, 字典是一组键(key)和值(value)的组合, 通过键(key)进行查找, 没有顺序;构建语法mydict= {1: 1, 2: 2, 3: 3}

set: 集合,无序, 元素只出现一次, 自动去重;构建语法myset = {1,2,3}

(1)可以索引。

(2)list(set(mylist))

(3)不能重复。

 

4  用字典结构构建一个简单的数据库,构造字典people存储和查询Alice, Beth 和Cecil的电话和地址。请完成以下代码(电话和地址请任意编写)

labels = {
'phone': 'phone number',
'addr': 'address'
}
name = input('Name: ')
request = input('Phone number (p) or address (a)? ')
if request == 'p': key = 'phone'
if request == 'a': key = 'addr'

if name in people: print ("%s's %s is %s." % \
(name, labels[key], people[name][key]))

 

答:
 

people = {
'Alice': {
'phone': '2341',
'addr': 'Foo drive 23'
},
'Beth': {
'phone': '9102',
'addr': 'Bar street 42'
},
'Cecil': {
'phone': '3158',
'addr': 'Baz avenue 90'
}
}

labels = {
'phone': 'phone number',
'addr': 'address'
}
name = input('Name: ')
request = input('Phone number (p) or address (a)? ')
if request == 'p': key = 'phone'
if request == 'a': key = 'addr'

if name in people: print ("%s's %s is %s." % \
(name, labels[key], people[name][key]))

 

5  用list结构写一个简单的数据库database,实现用户名密码验证,请补全以下代码,用户名为albert, dilbert, smith, jones4人,密码请随意编写。

username = input('User name: ')
pin = input('PIN code: ')
if [username, pin] in database: 
    print ('Access granted')

答:

database = [
['albert','1234'],
['dilbert','4242'],
['smith','7524'],
['jones','9843']]

username = input('User name: ')
pin = input('PIN code: ')
if [username, pin] in database: 
    print ('Access granted')

 

6  用dict实现list中重复元素的去除。mylist=[1,1,3,5,6,6,6]

答:

mylist=[1,1,3,5,6,6,6]
d={}
for x in mylist:
    d[x]=1
mylist =list(d.keys()) 

 

7  写出下列代码的输出

class Parent():
    x = 1
 
class Child1(Parent):
    pass
 
class Child2(Parent):
    pass
 
print (Parent.x, Child1.x, Child2.x)
Child1.x = 2
print (Parent.x, Child1.x, Child2.x)
Parent.x = 3
print (Parent.x, Child1.x, Child2.x)

答:

1 1 1
1 2 1
3 2 3

8  定义一个类comapny,具有三个参数(arguments):员工姓名,部门,职位。具有方法setDepartment,addPosition,getPosition,分别对应设定(修改)部门名,添加职位名,得到职位名。例如员工何凯,hekai = company('He Kai','R&D','engineer'),部门修改为Human resouce, 职位增加一个(兼职)manager。

答:

class company(object):
    
    def __init__(self,name,department,position):
        self.department = department
        self.name=name
        self.position=[position]
        
    def setDepartment(self,department):
        self.department=department
     
    def addPosition(self,position):        
        self.position.append(position)
 
    def getPosition(self):
        return self.position
    
hekai = company('He Kai','R&D','engineer')
print(hekai.name,hekai.department,hekai.position)
hekai.setDepartment('human resource')
print(hekai.name,hekai.department,hekai.position)
hekai.addPosition('manager')
print(hekai.name,hekai.department,hekai.position)
print(hekai.getPosition())
print(vars(hekai))

9  阅读一下代码并写出输出

class Doctor:
    def __init__(self):
        self.role = True
    def prescript(self):
        if self.role:
            print ('prescription:...')
        else:
            print('no right to prescribe')
    def consultant(self):
        print('please speak...')
    def getposition(self):
        return 'resident doctor' 
        
class InternDoctor(Doctor):
    def __init__(self):
        self.role = False
    def getposition(self):
        return 'intern doctor'

Yang = Doctor()
print(Yang.getposition())

Mike = InternDoctor()
print(Mike.getposition())
Mike.consultant()

Mike.prescript()
Yang.prescript()

答:

resident doctor
intern doctor
please speak...
no right to prescribe
prescription:...

更多数学原理小文请关注公众号:未名方略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞行codes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值