Python基础——考核练习(1)

考核总结

一、基础题

1.深入学习for循环

首先,回顾一下基础的for循环

for 变量 in 可迭代对象:

例子:用来判断100以内的素数

su = []
for i in range(2,101):
    for j in range(2,i):
        if i % j ==0:
            break
    else:
        su.append(i)
print(su)

继续深入学习for循环

[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]

例子:用列表表达式生成200以内是2的倍数或者是5的倍数的列表


b=[i for i in range(1,201) if i%2 == 0 or i%5 == 0]

print(b)

再如:
例子1

str='123456'
a=[int(i) for i in str]
print(a)

结果是[1, 2, 3, 4, 5, 6]

例子2

a=[i*i for i in range(10)]
print(a)
结果是:[0,1,4,9,16,25,36,49,64,81]

应该知道这个新for循环怎么用了吧。

2.回顾字典

字典还是比较重要的。
访问字典的基础方法就不演示了有keys(),values(),items()这三个。
keys()返回字典中的键。
values()返回字典中的值。
items()返回字典中的键值对。
这次来一道与上面for有关的问题。
例子:字典 dict1={‘num’: ‘123456’, ‘name’: ‘kelvin’, ‘age’: 18}
遍历字典中所有的键值对

dict1={'num': '123456', 'name': 'kelvin', 'age': 18}
for i,j in dict1.items():
    print(i,j)
  结果: num 123456
        name kelvin
        age 18

也可以写成这样:

dict1={'num': '123456', 'name': 'kelvin', 'age': 18}
for i in dict1:
    print(i,dict1.get(i))
  get可以返回指定的值

结果一样

二、算法题

1.常规算法

eg:给定一个由整数组成的非空数组所表示的非负整数在该数的基础上一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3
输入:digits = [0]
输出:[1]
解释:输入的数组表示数字0.
第一种做法

digits=[9,9,9]
def OnePlus(digits):
    s = ''
        for i in digits:
            s+=str(i)
        i = int(s)+1     #先转化为整数型对末尾加一
        s2 = str(i)      #再转为字符串
        l = []
        for j in s2:
            l.append(int(j))
        return l
print(OnePlus(digits))
  这种做法好处是不需要考虑末尾是9的情况,简单

第二种做法
末尾加一如果加一后的结果等于10,则将其变为0,然后倒数第二位加一,重复判断是否等于10,如果等于10,继续重复操作, 否则,结束循环,返回列表,看下列操作:

digits=[9,9,9]
def Onepuls_2(digits):
    for i in range(len(digits)):
        digits[-(i+1)]+=1
        if digits[-(i+1)] == 10:
            digits[-(i + 1)] = 0
        else:
            return digits
        if digits[0] == 0:  # 如果出现 999 这种特殊情况,加一以后等于1000 多出了一位,需要再列表 索引为零的地方加 1
            digits.insert(0,1)   # 第一个元素 是插入的索引,第二个元素是插入的值
            return digits
print(Onepuls_2(digits))

这种方法麻烦,但是他的思路很清晰,和小时候做加法题思路一样,所以不建议用。

2.二维数组题

矩阵a用数组表示为 a=[[1,2,3,4],[2,3,4,5],[3,4,5,6]],并编写transpose()方法实现矩阵的转置(转置如下)

// 转置前
1 2 3
4 5 6
7 8 9
10 11 12
// 转置后
1 4 7 10
2 5 8 11
3 6 9 12

a = [[1,2,3,4],[2,3,4,5],[3,4,5,6]]
print("转置前")
for i in a:
    for j in i:
        print(j,end=' ')
    print()
a_copy = [[],[],[],[]]
def transpose(a):
    for i in range(len(a[0])):
        for j in range(len(a)):
            a_copy[i].append(a[j][i])
    return a_copy
l = transpose(a)
print('转置后')
for i in l:
    for j in i:
        print(j,end=' ')
    print()

这里在创建二维列表时不能用以下的方法

a = [[]]*3
a[0].append(1)
a[1].append(2)
a[2].append(3)
print(a)
 输出为[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

原因是创建一个列表,然后复制上个,相当于二维数组中,引用的是同一个一位数组。
意思就是:a = [[b]]*3只是创建了3个指向b的应用,所以一旦b改变,a中的3个列表也会改变。

总结

经过这一次的考核,认识到之前的知识还没掌握好,有些知识没有认真学,我会好好复习之前的知识,多加练习。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值