python练习题和面试题(附多种解题思路)

1.求水仙花数,水仙花数是指一个 3 位数,它的每个位上的数字的 3次方之和等于它本身

①数字取整取余去计算个位十位百位

for i in range(100,1000):
    x = i//100
    y = i//10%10
    z = i%10
    if x**3+y**3+z**3 == i:
        print('水仙花数{}'.format(i))

②字符串取个位十位百位

for i in range(100,1000):
    x = str(i)[-1]
    y = str(i)[-2]
    z = str(i)[-3]
    if int(x)**3+int(y)**3+int(z)**3 == i:
        print('水仙花数{}'.format(i))

③三次循环每个位数

for x in range(1,10):
    for y in range(10):
        for z in range(10):
            if x**3+y**3+z**3 == x*100+y*10+z:
                print('水仙花数{}'.format(x*100+y*10+z))

2.请写出冒泡排序或选择排序

①冒泡排序

def bubb(li):
    for j in range(len(li)-1):
            for i in range(len(li)-1-j):
                if li[i] > li[i + 1]:
                    li[i], li[i + 1] = li[i + 1], li[i]
    return li

②选择排序

def choose(li):
    for i in range(len(li)-1): 
        for j in range(i+1,len(li)): 
            if li[i] < li[j]: 
                li[i], li[j] = li[j], li[i]  
    print(li)

3.1-100斐波拉契数列求和

①递归

def fb(num):
    if num ==1 or num == 2:
        return 1
    return fb(num-1) + fb(num-2)
sum = 0
for i in range(1,101):
       sum += fb(i)
print(sum)

②递推交换

def fb(num):
    a, b = 0, 1
    for i in range(num):
        a, b = b, a + b
    return a
sum = 0
for i in range(1,101):
    sum += fb(i)
print(sum)

③生成器

def fb(max):
    a, b = 0, 1
    while max > 0:
        a, b = b, a + b
        max -= 1
        yield a
sum = 0
for i in fb(100):
    sum += i
print(sum)

④列表求和

def fb(num):
    a = [1,1]
    for i in range(num-2):
        a.append(a[-2]+a[-1])
    return a

print(sum(fb(100)))

4.列表如何去重

①利用集合定义去重

def qc(old_list)

    new_list = list(set(old_list))

    return new_list

②利用不在新列表去重

def qc(old_list):

    new_list = []

    for i in old_list:

        if i not in new_list:

           new_list.append(i)

    return new_list

③利用字典的键去重

def qc(old_list):

    new_dict = {}

    new_list = []

    new_dict = new_dict.fromkeys(old_list)  #工厂函数形成统一的键

    for i in new_dict.keys():

        new_list.append(i)

    return new_list

5.字符串如何倒序输出

①字符串定义

str[::-1]

②列表逆序

def dx(str):
    li = list(str)
    li.reverse()
    s = ''
    for i in li:
        s += i
return s

6.字符串截取函数是什么,有哪些参数,如何使用

Python 截取字符串使用 变量[头下标:尾下标],就可以截取相应的字符串,其中下标是索引,从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾

7.可变和不可变的数据类型的区别是什么

可变数据类型:在内存地址不变的情况下,值可改变(列表和字典是可变类型,但是字典中的 key 值必须是不可变类型)

不可变数据类型:内存改变,值也改变。(数字,字符串,布尔类型,都是不可变类型)可以通过 id() 方法进行内存地址的检测。

8.说一下Python中变量的作用域,作用域的搜索顺序是什么样的

局部作用域>嵌套作用域>全局作用域>内置作用域

9.os模块是什么类型的模块,有哪些方法

# 内置模块
import os
os.rename()
os.mkdir()
os.chdir()
os.listdir()
os.rmdir()
os.getcwd()
os.path.isfile()
os.path.isdir()
os.remove()

10. 程序需求:输入用户名,密码,认证成功显示欢迎信息,输入错误三次后退出程序

flag = True # 跳出外层循环的标识,True不跳False跳

for i in range(3):

    if flag:  # 跳出外层循环的标识

        user = input('>>>用户名')

        password = input('>>>密码')

        for u in user_list:

            if user == u['user'] and password == u['password']:
 
                print('欢迎,%s'%user)

                flag = False  # 跳出外层循环的标识

                break

        else:

            print('输入第%d次错误' % (i + 1))

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值