学了python,去面试经常出现,某个或某些库不熟悉导则想不起来怎么写,知道思路而写不出来,多半还是不够熟悉,这里就作为熟悉python的地方,多做做题,多思考。

题目1:店铺ID为00000000-99999999这样的8位数,商家不希望含有2,3,5这几个数字。

    a.设计一种方式,能按顺序生成出不重复且不含2,3,5这几个数字的店铺ID;

    b.计算符合上述规则的店铺ID共有多少个

 import time

 # 开始时间:当前时间的时间戳(1970纪元后经过的浮点秒数)。
start_time = time.time() # 解法1:无脑循环就完了
# 最初的列表
a = [i for i in range(0, 10)]
# 去掉元素列表
b = [2, 3, 5]
# 求差集
c = list(set(a) - set(b))
d = []
for a1 in c:
for a2 in c:
for a3 in c:
for a4 in c:
for a5 in c:
for a6 in c:
for a7 in c:
for a8 in c:
res = str(a1) + str(a2) + str(a3) + str(a4) + str(a5) + str(a6) + str(a7) + str(a8)
d.append(res)
# 截止时间
end_time = time.time()
run_time = end_time - start_time
print(len(d), run_time) # 5764801 11.144166231155396

解法1:无脑循环,究极费时

 import time
import itertools
# 开始时间:当前时间的时间戳(1970纪元后经过的浮点秒数)。
start_time = time.time() # 解法2:迭代器
# 最初的列表
a = [i for i in range(0, 10)]
# 如果希望自己输入不希望包含的数字 # b = input("请输入不希望包含的数字(逗号隔开):").split(",")
# # 去引号
# for i in range(len(b)):
# b[i] = int(b[i]) # 去掉元素列表
b = [2, 3, 5]
# 求差集
c = list(set(a) - set(b))
res = [x for x in itertools.product(c, repeat=8)]
# 截止时间
end_time = time.time()
run_time = end_time - start_time
print(len(res), run_time) # 5764801 0.950455904006958

解法2:使用迭代器,省时省力

题目2:不使用任何库函数将时间戳转化成常见的时间格式,只允许使用输入和输出函数。(面试看到的一个题目)

 import time

 # 生成一个时间戳,好进行后面计算,不在算法内
tmp = time.time() # 解法1:从本质除非进行运算(时间戳1970纪元后经过的浮点秒数)
tmp_year = tmp // (365 * 24 * 60 * 60) + 1970
# 计算其中闰年的次数1970 - (tmp_year + 1)
# 闰年:能被4整除不能被100整除或能被400整除 leap_year = []
# 不算今年
for year in range(1970, int(tmp_year) + 1):
if (year % 4) == 0:
if (year % 100) == 0:
if (year % 400) == 0:
leap_year.append(year)
else:
continue
else:
leap_year.append(year)
else:
continue
# print(leap_year)
# 判断当前年份是不是闰年,创建月份列表31 2678400 30 2592000 29 2505600 28 2419200
# 不是闰年
if leap_year[-1] < tmp_year:
month_list = [2678400, 2419200, 2678400, 2592000, 2678400, 2592000, 2678400, 2678400, 2592000, 2678400, 2592000,
2678400]
# 是闰年
else:
month_list = [2678400, 2505600, 2678400, 2592000, 2678400, 2592000, 2678400, 2678400, 2592000, 2678400, 2592000,
2678400]
# 闰年数
leap_num = int(len(leap_year))
# 去掉闰年,然后在求真实年份
tmp_year = (tmp - (366 * 24 * 60 * 60) * leap_num) // (365 * 24 * 60 * 60) + 1970 + leap_num
# 去掉年份后还剩余的秒数
tmp_month = (tmp - (366 * 24 * 60 * 60) * leap_num) % (365 * 24 * 60 * 60) num = 0
x = 0
for month_num in month_list:
num += month_num
x += 1
if tmp_month < num:
# 天数
tmp_day = (tmp_month - num + month_num) // (24 * 60 * 60) + 1
# 小时---------------这里整整少了6个小时,不知道为啥,以后有能力在来解决吧
tmp_hour = ((tmp_month - num + month_num) - (tmp_day - 1) * (24 * 60 * 60)) // 3600
# 分钟 秒
tmp_min = (((tmp_month - num + month_num) - (tmp_day - 1) * (24 * 60 * 60)) - 3600 * tmp_hour) // 60
tmp_sec = (((tmp_month - num + month_num) - (tmp_day - 1) * (24 * 60 * 60)) - 3600 * tmp_hour) % 60
# 月份
tmp_month = x
# 小时 break timeArray = time.localtime(tmp)
otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
print("{}--{}--{} {}:{}:{}".format(int(tmp_year), int(tmp_month), int(tmp_day), int(tmp_hour), int(tmp_min),
int(tmp_sec)))
print(otherStyleTime)
# 2019--10--15 10:0:27 自己求的(小时这一项,不知道为啥少6小时)
# 2019--10--15 18:00:27 库函数输出的

解法1:思路没问题,但是小时数有误的解法

  

 

<python练习题>python练习题(常练勿忘)的更多相关文章

  1. Python之基础练习题

    Python之基础练习题 1.执行 Python 脚本的两种方式 2.简述位.字节的关系 解:8位是一个字节 3.简述 ascii.unicode.utf-8.gbk 的关系 4.请写出 “李杰” 分 ...

  2. Python:程序练习题(二)

    Python:程序练习题(二) 2.1温度转换程序. 代码如下: t=input("请输入带符号的温度值(如:32C):") if t[-1] in ["C", ...

  3. python基础知识练习题(一)

    1.执行Python脚本的两种方式:WIN+R,cmd,命令行窗口输入:python  进入python模式输入命令行直接执行命令:编写以.py结尾的文件,写入命令行,然后运行python.exe打开 ...

  4. python - opencv 的一些小技巧备忘

    python - opencv 的一些小技巧备忘 使用python-opencv来处理图像时,可以像matlab一样,将一幅图像看成一个矩阵,进行矢量操作,以加快代码运行速度. 下面记录几个常用的操作 ...

  5. 【转载】【python】python练手项目

    入门篇 1.Python - Python 图片转字符画 50 行 Python 代码完成图片转字符画小工具. &lt;img src="https://pic3.zhimg.com ...

  6. Python基础-1 python由来 Python安装入门 注释 pyc文件 python变量 获取用户输入 流程控制if while

    1.Python由来 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚 ...

  7. python基础--python基本知识、七大数据类型等

    在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 (1)python应用领域 目前Python主要应用领域: 云计算: 云计算最火的语言, ...

  8. 【Python】-NO.97.Note.2.Python -【Python 基本数据类型】

    1.0.0 Summary Tittle:[Python]-NO.97.Note.2.Python -[Python 基本数据类型] Style:Python Series:Python Since: ...

  9. Python -- Effective Python:编写高质量Python代码的59个有效方法

    第 1 章 用 Pythonic 方式来思考 第 1 条:确认自己所用的 Python 版本 python --version import sys print(sys.version_info) p ...

随机推荐

  1. WinDows应急响应基础

    文件排查 开机启动有无异常文件 msconfig 敏感的文件路径 %WINDIR% %WINDIR%\SYSTEM32\ %TEMP% %LOCALAPPDATA% %APPDATA% 用户目录 新建 ...

  2. python学习笔记:python简介和入门

    编程语言各有千秋.C语言适合开发那些追求运行速度.充分发挥硬件性能的程序.而Python是用来编写应用程序的高级编程语言. Python就为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数 ...

  3. Eureka 系列(04)客户端源码分析

    Eureka 系列(04)客户端源码分析 [TOC] 0. Spring Cloud 系列目录 - Eureka 篇 在上一篇 Eureka 系列(01)最简使用姿态 中对 Eureka 的简单用法做 ...

  4. Spring Boot控制上传文件大小

    spring: http: multipart: max-file-size: 5MB max-request-size: 20MB

  5. gdb调试已在运行中的进程

    一.在服务器上调试进程,服务器上并没有源代码,所以需要将源码上传至服务器,才能调试看到源码,以下是步骤: 1.查看服务进程id:pgrep 服务名 [user@user-MP app]$ pgrep ...

  6. flex属性设置

    flex是一个复合属性,所以有三个值设置,这也就造成了flex可以只设置一个值或两个值: 如果flex只设置一个值: 没有单位的数,则这个值是flex-grow, 并且flex-basis变为0 有单 ...

  7. Linux利器 strace [看出process呼叫哪個system call]

    Linux利器 strace strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必 ...

  8. 【记录】利用Jquery 在 textarea 内实现文字动态换行

    背景: 最近在做前端时候遇到一种情况,需要用js动态输入内容到textarea, 比如实时聊天功能,用户A每次发送信息都需要另起一行. 问题: 根据以往经验,以为用$('#textArea').htm ...

  9. C 编译器的“贪心法”

    C语言中有单字符符号和多字符符号之分,那么,当C编译器读入一个字符‘/’后又跟了一个字符‘*’,那么编译器就必须做出判断:是将其作为两个分别的符号对待,还是合起来作为一个符号对待.C语言对这个问题的解 ...

  10. vue 条件渲染v-if v-show

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...