刷题网站上找的一些小题,还挺有意思的,记录一下

练习一:

抓了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:小练习相关推荐

  1. Python3小程序:把字符串转换成连续的UTF8编码(16位)

    # coding: utf-8 import binascii ''' 参考代码1 mystery = b"\xe5\x88\xab" x = mystery.decode('ut ...

  2. python3小项目2-基于autopy的游戏脚本

    python3小项目2-基于autopy的游戏脚本 说明: 这里笔者用的PC端的安卓模拟器为雷电模拟器,因为发现这个兼容性好 这里笔者在雷电模拟器上安装了一款心动女友app游戏 本次项目的目的: 创建 ...

  3. python3小游戏源代码_如何用python3代码玩小游戏?

    在大家的印象中,程序员似乎一直是在码代码的,做着枯燥无聊的生活,殊不知,他们其实也有很多在编程中的快乐.小编最羡慕的就是他们能写一段小程序运行出来,好玩又好看,看起来还很高大上!为了照顾众多pytho ...

  4. python3 小工具

    扫描IP的端口是否开放:Porttest.py 1 # -*- coding: utf-8 -*- 2 import sys 3 import os 4 import socket 5 6 #扫描 7 ...

  5. python3小项目——爬取招聘信息(智联招聘)

    2017年6月,花了大概一周的时间学习了以下内容,并基于此写了一个小项目.这里对其进行总结,说明其中遇到的问题和解决方案以及下一步计划. 学习的内容和网址: 斯巴达网站 斯巴达视频 python零基础 ...

  6. python3小游戏(1):吃苹果小游戏

    python小白群交流:861480019 注意,申请入群时必须备注"不发广告",不然不通过(禁止在群里发广告,不然诅咒你),另外这个群都是一群和我一样的小白,大家谁也不说谁,共同 ...

  7. python3小游戏源代码_Python3制作仿“FlappyBird”小游戏|python3教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...

  8. Python3小知识

    对于迭代器对象,Python默认赋值是将引用赋值,即指向同一片内存空间.为了实现对内存空间的赋值,我们可以使用分片进行深复制.例如: 当定义元组的时候,我们一般使用小括号将元素包围起来,也可以不使用括 ...

  9. python3小游戏源代码_Python入门塔防小游戏,开发步骤和源码,带你轻松学python...

    在上一篇文章中,我介绍了有关python入门塔防小游戏的一些功能,下面我继续讲解有关这个小游戏的大致开发步骤. 开发工具还是: Python版本:3.6.4 相关的模块有:pygame模块,以及一些p ...

  10. python3小游戏代码教程_Python3制作仿“经典90坦克大战”小游戏|python3教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...

最新文章

  1. 针对Chrome的css的hack写法
  2. 解决服务间调用的三种传统方式
  3. android之实现各个组件点击事件处理
  4. 【青岛】12月16日.NETCore与AI技术交流会-等你来哦!!
  5. python怎么播放mp3_python 下如何播放mp3
  6. 从主机 Windows 上无法远程访问 Linux 的 Tomcat 服务器解决方法
  7. span 居中_H5元素的水平垂直居中布局总结
  8. 条件语句与循环语句:将数字一二三四五六七八九十转化成汉字大写的壹, 贰,叁,肆,伍,陆,柒,捌,玖,拾
  9. 基于Python的管理系统(附源码)
  10. socket通信之epoll模型
  11. 图书馆图书借阅登记微信小程序开发制作管理软件系统
  12. redis为什么快?
  13. vue3+ts+ant-vue:手把手教你实现穿梭框简易版,配源码
  14. 传真通讯技术的革新:IP传真
  15. 泛微Ecology9单点登录说明
  16. VHDL行为描述方法实现与门
  17. 元宇宙+教育,究竟是什么?学校可以怎么做?
  18. 国标消消乐---10.下级不对上级的invite消息进行回应
  19. 有两个磁盘文件 A 和 B, 各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件 C 中
  20. 用DD-WRT无线路由器自建计费Wifi热点

热门文章

  1. 每秒处理10万订单乐视集团支付架构读后感
  2. 简报悦读:教育部取消5类高考加分项目,猿辅导纪录片讲述十年坚守
  3. 中国菜刀使用(实战正确姿势)
  4. 【论文翻译 - RFID】射频全息图:利用商业化产品对移动射频标签进行实时高精度追踪
  5. 潘建伟:与量子“纠缠”的逐梦者
  6. 苹果手机代理charles(此链接非私人连接)
  7. java 七巧板油漆问题_七巧板的问题
  8. 华强北的AirPods 能用吗?(华强北避坑科普分享)
  9. 用matlab求状态转移矩阵
  10. 文本数据增强一(概述、中文、同义句生成、enhance、augment、text、nlp)