python3:小练习
刷题网站上找的一些小题,还挺有意思的,记录一下
练习一:
抓了a,b,c,d四名犯罪嫌疑人,其中有一人是小偷,审讯中:
a说我不是小偷;
b说c是小偷;
c说小偷肯定是d;
d说c胡说!
其中有三个人说的是实话,一个人说的是假话,请编程推断谁是小偷(用穷举法和逻辑表达式)。
def thief_is():for thief in ('a', 'b', 'c', 'd'):sum = ('a' != thief) + (thief == 'c') + (thief == 'd') + (thief != 'd')if sum == 3:print("thief is %s"%thief)
练习二:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
方法1:
思路:遍历数组中的元素,判断给定的目标值和数组中元素的差是否在这个数组中,如果在的话就找到其索引返回
一个for循环,时间复杂度为O(n)
def find_factor_index(nums, target):for i in range(len(nums)):# 计算两数之差another_num = target-nums[i]# 如果差值在nums中if another_num in nums:ind= nums.index(another_num)if ind != i:return [i,ind]return []
print(find_factor_index( [11,7, 2, 15], 9))
方法2:
思路:和上面方法类似,只是用字典d实现,将两数之差作为key,当前的下标作为value
当遍历出来的元素已经存在于字典d中,说明两个元素的下标都找到了
def find_factor_index1(nums, target):d = {}for i in range(len(nums)):# 计算两数之差another_num = target-nums[i]if nums[i] not in d:d[another_num] = ielse:return d[nums[i]],ireturn []
print(find_factor_index1( [11,7, 2, 15], 9))
方法3:
两个for循环,算法的时间复杂度为O(n^2)
def find_factor_index2(nums, target):L = len(nums)for i in range(L-1):for j in range(i+1,L):if nums[i] + nums[j] == target:return i,j
print(find_factor_index2( [11,7, 2, 15], 9))
练习3:
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。
说明:必须在原地旋转图像,需要直接修改输入的二维矩阵,不要使用另一个矩阵来旋转图像。
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
方法1:
推导列表,不符合要求。因为借助了另外一个列表
matrix = [[1,2,3],[4,5,6],[7,8,9]]
print([[i[j] for i in matrix[::-1]] for j in range(len(matrix))])
方法2:
直接在原来的矩阵后追加,然后返回追加那部分内容
def rotate2(matrix):# 记录列表开始的长度length = len(matrix)# 只对和开始长度相等的内容进行遍历for i in range(length):matrix.append( [element[i] for element in matrix[:length][::-1] ])return matrix[length:]print(rotate2(matrix))
方法3:
借助zip函数,将列表中嵌套的列表下标相同的元素组合到一起,翻转即可
matrix = [[1,2,3],[4,5,6],[7,8,9]
]
def rotate3(matrix):matrix[:]=map(lambda x:x[::-1],zip(*matrix))return matrix
print(rotate3(matrix))
方法4:
旋转90度的效果等价于将矩阵沿着对角线[1,5,9]对转,然后再沿着中间列[4,5,6]对折:
1 2 3 1 4 7 7 4 1
4 5 6 -> 2 5 8 -> 8 5 2
7 8 9 3 6 9 9 6 3
matrix = [[1,2,3],[4,5,6],[7,8,9]
]def rotate4(matrix):#先将矩阵matrix沿着对角线对折,也就是行列互换length = len(matrix)for i in range(length):for j in range(i+1,length):matrix[i][j], matrix[j][i] = matrix[j][i] ,matrix[i][j]# 沿着中间列对折for i in range(length):matrix[i].reverse()return matrix
print(rotate4(matrix))
python3:小练习相关推荐
- Python3小程序:把字符串转换成连续的UTF8编码(16位)
# coding: utf-8 import binascii ''' 参考代码1 mystery = b"\xe5\x88\xab" x = mystery.decode('ut ...
- python3小项目2-基于autopy的游戏脚本
python3小项目2-基于autopy的游戏脚本 说明: 这里笔者用的PC端的安卓模拟器为雷电模拟器,因为发现这个兼容性好 这里笔者在雷电模拟器上安装了一款心动女友app游戏 本次项目的目的: 创建 ...
- python3小游戏源代码_如何用python3代码玩小游戏?
在大家的印象中,程序员似乎一直是在码代码的,做着枯燥无聊的生活,殊不知,他们其实也有很多在编程中的快乐.小编最羡慕的就是他们能写一段小程序运行出来,好玩又好看,看起来还很高大上!为了照顾众多pytho ...
- python3 小工具
扫描IP的端口是否开放:Porttest.py 1 # -*- coding: utf-8 -*- 2 import sys 3 import os 4 import socket 5 6 #扫描 7 ...
- python3小项目——爬取招聘信息(智联招聘)
2017年6月,花了大概一周的时间学习了以下内容,并基于此写了一个小项目.这里对其进行总结,说明其中遇到的问题和解决方案以及下一步计划. 学习的内容和网址: 斯巴达网站 斯巴达视频 python零基础 ...
- python3小游戏(1):吃苹果小游戏
python小白群交流:861480019 注意,申请入群时必须备注"不发广告",不然不通过(禁止在群里发广告,不然诅咒你),另外这个群都是一群和我一样的小白,大家谁也不说谁,共同 ...
- python3小游戏源代码_Python3制作仿“FlappyBird”小游戏|python3教程|python入门|python教程...
https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...
- Python3小知识
对于迭代器对象,Python默认赋值是将引用赋值,即指向同一片内存空间.为了实现对内存空间的赋值,我们可以使用分片进行深复制.例如: 当定义元组的时候,我们一般使用小括号将元素包围起来,也可以不使用括 ...
- python3小游戏源代码_Python入门塔防小游戏,开发步骤和源码,带你轻松学python...
在上一篇文章中,我介绍了有关python入门塔防小游戏的一些功能,下面我继续讲解有关这个小游戏的大致开发步骤. 开发工具还是: Python版本:3.6.4 相关的模块有:pygame模块,以及一些p ...
- python3小游戏代码教程_Python3制作仿“经典90坦克大战”小游戏|python3教程|python入门|python教程...
https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...
最新文章
- 针对Chrome的css的hack写法
- 解决服务间调用的三种传统方式
- android之实现各个组件点击事件处理
- 【青岛】12月16日.NETCore与AI技术交流会-等你来哦!!
- python怎么播放mp3_python 下如何播放mp3
- 从主机 Windows 上无法远程访问 Linux 的 Tomcat 服务器解决方法
- span 居中_H5元素的水平垂直居中布局总结
- 条件语句与循环语句:将数字一二三四五六七八九十转化成汉字大写的壹, 贰,叁,肆,伍,陆,柒,捌,玖,拾
- 基于Python的管理系统(附源码)
- socket通信之epoll模型
- 图书馆图书借阅登记微信小程序开发制作管理软件系统
- redis为什么快?
- vue3+ts+ant-vue:手把手教你实现穿梭框简易版,配源码
- 传真通讯技术的革新:IP传真
- 泛微Ecology9单点登录说明
- VHDL行为描述方法实现与门
- 元宇宙+教育,究竟是什么?学校可以怎么做?
- 国标消消乐---10.下级不对上级的invite消息进行回应
- 有两个磁盘文件 A 和 B, 各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件 C 中
- 用DD-WRT无线路由器自建计费Wifi热点