实例51
技巧1:
按位与
技巧2:
十六进制表示:0x
八进制表示:0o
二进制表示:0b
题目:
学习使用按位与 & 。
程序分析:
0&0=0; 0&1=0; 1&0=0; 1&1=1。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
a = 0x77
print(a)
b = a & 3
print('a & b = %d' % b)
b &= 7
print('a & b = %d' % b)
输出结果:
a & b = 3
a & b = 3
实例52
技巧1:
按位或
技巧2:
转二进制:bin()
转八进制:oct()
转十六进制:hex()
均返回字符串
题目:
学习使用按位或 | 。
程序分析:
0|0=0; 0|1=1; 1|0=1; 1|1=1
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
a = 0o77
b = a | 3
print('a | b is %d' % b)
b |= 7
print('a | b is %d' % b)
输出结果:
a | b is 63
a | b is 63
实例53
技巧:
按位异或
题目:
学习使用按位异或 ^ 。
程序分析:
0^0=0; 0^1=1; 1^0=1; 1^1=0
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
a = 0o77
b = a ^ 3
print('The a ^ 3 = %d' % b)
b ^= 7
print('The a ^ b = %d' % b)
输出结果:
The a ^ 3 = 60
The a ^ b = 59
实例54
技巧:
设置一个低4位全为1,其余全为0的数:
c = ~(~0 << 4)
题目:
取一个整数a从右端开始的4〜7位。
程序分析:
可以这样考虑:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用(0<<4)
(3)将上面二者进行&运算。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
a = int(input('请输入数字:'))
b = a >> 4
c = ~(~0 << 4)
# c = 15
d = b & c
print(d)
实例55
技巧:
按位异或
题目:
学习使用按位取反~。
程序分析:
~0=1; ~1=0;
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
a = 234
b = ~a
print('The a\'s 1 complement is %d' % b)
a = ~a
print('The a\'s 2 complement is %d' % a)
输出结果:
The a's 1 complement is -235
The a's 2 complement is -235
实例56-59、63-65为使用tkinter库画图
实例60
技巧:
使用len()方法计算字符串长度
实例61
技巧:
stdout输出
from sys import stdout
stdout.write('Hello')
题目:
打印出杨辉三角形(要求打印出10行)。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from sys import stdout
a = []
for i in range(10):
a.append([])
for j in range(i+1):
a[i].append(0)
for i in range(10):
a[i][i] = 1
a[i][0] = 1
for i in range(2,10):
for j in range(1,i):
a[i][j] = a[i-1][j-1] + a[i-1][j]
for i in range(10):
for j in range(i+1):
stdout.write(str(a[i][j])+' ')
print()
输出结果:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
实例62
技巧:
find()方法 检测 字符串 中 是否 包含 子字符串 str。
如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。
语法:
str.find(str, beg=0, end=len(string))
题目:
查找字符串。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
str1 = "this is string example....wow!!!"
str2 = "exam"
print(str1.find(str2))
print(str1.find(str2, 10))
print(str1.find(str2, 40))
输出结果:
15
15
-1
实例68
技巧1:
使用collections中的deque(),rotate()方法
rotate(n=1):把右边元素放到左边,执行n次,默认执行一次。
技巧2:
for _ in range(m):
a.insert(0, a.pop())
for _ in range(n)中 _ 占位符 表示不在意变量的值 只是用于循环遍历n次,无法打印变量值。
例如,在一个序列中只想取头和尾,就可以使用_:
nums = (1,2,3,4,5,6,7,8,9)
head,*_,tail = nums
print(head)
print(tail)
for i in range(n) 在意变量i的值 可以打印print(i)
题目:
有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数
代码:
方法一:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from collections import deque
m = 3
a = [1, 2, 3, 4, 5, 6, 7, 8]
f = deque(a)
f.rotate(m)
print(list(f))
方法二:
a = [1, 2, 3, 4, 5, 6, 7, 8] # 测试列表
m = 3 # 设置向后移动 3 位
for _ in range(m):
a.insert(0, a.pop())
print(a)
输出结果:
[6, 7, 8, 1, 2, 3, 4, 5]
实例69
技巧:
算法
题目:
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
n = int(input('请输入数字:'))
data = [i+1 for i in range(n)]
i = 1
while len(data)>1:
if i % 3 == 0:
data.pop(0)
else:
data.insert(len(data),data.pop(0))
i += 1
print(data[0])
实例71
技巧:
%-6s%-10s%-8d
%-8d表示显示长度最小为8个字符,不足的话右边补空格,其他类似。
没-是左边补空格,有-是右边补空格。
另外,%d表示参数是整数,%s表示参数是字符串。
题目:
编写input()和output()函数输入,输出5个学生的数据记录。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
N = 3
# stu
# num : string
# name : string
# score[4]: list
student = []
for i in range(5):
student.append(['', '', []])
def input_stu(stu):
for i in range(N):
stu[i][0] = input('input student num:\n')
stu[i][1] = input('input student name:\n')
for j in range(3):
stu[i][2].append(int(input('score:\n')))
def output_stu(stu):
for i in range(N):
print('%-6s%-10s' % (stu[i][0], stu[i][1]))
for j in range(3):
print('%-8d' % stu[i][2][j])
if __name__ == '__main__':
input_stu(student)
print(student)
output_stu(student)
实例72
题目:
创建一个链表。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
l = [int(input('请输入一个数字:')) for i in range(5)]
print(l)
实例73
技巧:
反转列表:reverse()
题目:
反向输出一个链表。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
ptr = []
for i in range(5):
num = int(input('please input a number:\n'))
ptr.append(num)
print(ptr)
ptr.reverse()
print(ptr)
实例74
技巧:
排序列表:sort()
连接列表:+或者extend()
题目:
列表排序及连接。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
a = [1, 3, 2]
b = [3, 4, 5]
a.sort() # 对列表 a 进行排序
print a
# 连接列表 a 与 b
print a + b
# 连接列表 a 与 b
a.extend(b)
print a
实例75
题目:
判断情人节。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
if __name__=='__main__':
date=time.strftime('%m-%d',time.localtime())
if date=='02-14':
print('情人节是时候给你女朋友买支玫瑰花了!!')
else:
print('这时候你不要忘记发个红包!!')
print('哈哈,这是一个测试题!!')
实例76
题目:
编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print(sum([1/i for i in range(int(input('Enter an integer:')), 0, -2)]))
实例78
技巧1:
iteritems()函数作用:(python3.5变成item())
以classCount.iteritems()为例,作用是将字典classCount分解为元组列表:
若classCount = {‘A’:1,‘B’:2,‘C’:3},则分为[‘A’,’B’,’C’] 与 [1, 2, 3]两组。
技巧2:
itemgetter()函数作用:
以operator.itemgetter(1)为例,作用是读取元组iteritems内的第2列,即字典classCount = {‘A’:1,‘B’:2,‘C’:3}中的[1, 2, 3]。
题目:
找到年龄最大的人,并输出。
注意要找到所有与最大值匹配的key
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# import operator
dict = {'zhao':18, 'qian':5, 'sun':50, 'li':25, 'zhou':50}
# maxval = max(dict.items(), key=operator.itemgetter(1))[1]
maxval = max(v for k, v in dict.items())
keys = [k for k, v in dict.items() if v==maxval]
print(maxval, keys)
实例82
技巧:
ord() 函数它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数。
即 ASCII转数字/Unicode转数字
chr() 函数 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
即 数字转ASCII
unichr() 函数 和 chr()函数功能基本一样, 只不过是返回 unicode 的字符。
即 数字转Unicode
题目:
八进制转换为十进制
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
n = 0
p = raw_input('input a octal number:\n')
for i in range(len(p)):
n = n * 8 + ord(p[i]) - ord('0')
print n
实例91
技巧:
时间
题目:
时间函数举例1。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
import time
print(time.ctime(time.time()))
print(time.asctime(time.localtime(time.time())))
print(time.asctime(time.gmtime(time.time())))
输出结果
Wed Jun 17 16:15:18 2020
Wed Jun 17 16:15:18 2020
Wed Jun 17 08:15:18 2020
实例92
技巧:
跑模块需要多少时间,计时工具
start = time.time()
------模块-----
end = time.time()
print(end - start)
题目:
时间函数举例2。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
import time
start = time.time()
for i in range(3000):
print(i)
end = time.time()
print(end - start)
实例94
技巧:
计时游戏时间。
if else游戏进程。
题目:
时间函数举例4,一个猜数游戏,判断一个人反应快慢。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
import time
import random
play_it = input('Do you want to play it?(\'y\' or \'n\')')
while play_it == 'y':
i = random.randint(0, 101)
start = time.perf_counter()
guess = int(input('Please input your guess:'))
while guess != i:
if guess > i:
guess = int(input('Please input a little smaller:'))
else:
guess = int(input('Please input a little bigger:'))
end = time.perf_counter()
b = time.time()
var = (end - start) / 18.2
# print 'It took you %6.3 seconds' % time.difftime(b,a))
if var < 15:
print('You are very clever!')
elif var < 25:
print('You are normal!')
else:
print('You are stupid!')
print('Congradulations! The number you guess is %d.' % i)
play_it = input('Do you want to play it again?')
实例95
技巧:
将日期字符串,转换为datetime格式。
dateutil.parser.parse。可以不用我们指定格式,直接将字符串转换为datetime格式。
import datetime
import dateutil.parser
def getDateTime(s):
d = dateutil.parser.parse(s)
return d
题目:
字符串日期转换为易读的日期格式。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
from dateutil import parser
time1 = time.ctime(time.time())
print(time1)
dt = parser.parse(time1)
print(dt)
输出结果:
Wed Jun 17 16:13:39 2020
2020-06-17 16:13:39
实例96
技巧:
count()方法
用于统计字符串里某个字符出现的次数。
可选参数为在字符串搜索的开始与结束位置。
语法
str.count(sub, start= 0,end=len(string))
题目:
计算字符串中子串出现的次数。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == "__main__":
str1 = input("请输入一个字符串:")
str2 = input("请输入一个子字符串: ")
print(str1.count(str2))
实例97
技巧:
注意这两句的次序,否则‘#’也会被写进文件。
fp.write(ch)
ch = input('输入字符串:\n')
题目:
从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个#
为止。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
filename = input('输入文件名:\n')
fp = open(filename , "w+")
ch = ''
while '#' not in ch:
fp.write(ch)
ch = input('输入字符串:\n')
fp.close()
实例100
技巧:
注意这两句的次序,否则‘#’也会被写进文件。
fp.write(ch)
ch = input('输入字符串:\n')
题目:
列表转换为字典。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# No.1
r = range(ord('a'), ord('z') + 1)
a = (i for i in r)
b = map(chr, r)
print(dict(zip(a, b)))
# {97: 'a', 98: 'b', 99: 'c', 100: 'd', 101: 'e', 102: 'f', 103: 'g', 104: 'h', 105: 'i', 106: 'j', 107: 'k', 108: 'l', 109: 'm', 110: 'n', 111: 'o', 112: 'p', 113: 'q', 114: 'r', 115: 's', 116: 't', 117: 'u', 118: 'v', 119: 'w', 120: 'x', 121: 'y', 122: 'z'}
# No.2
i = ['a', 'b']
l = [1, 2]
print(dict([i,l]))
# {'a': 'b', 1: 2}
# 从列表创建字典
# No.3
i = ['a','b','c']
l = [1,2,3]
b=dict(zip(i,l))
print(b)
# {'a': 1, 'b': 2, 'c': 3}
# No.4
l1 = ['a','b','c']
l2 = [1,2,3]
d = {}
for i in range(len(l1)):
d.setdefault(l1[i],l2[i])
print(d)
# {'a': 1, 'b': 2, 'c': 3}
实例-获取 100 以内的质数
技巧:
利用filter()
题目:
获取 100 以内的质数。
程序分析:
质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数,如:2、3、5、7、11、13、17、19。
代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import math
def func_get_prime(n):
return filter(lambda x: not [x % i for i in range(2, int(math.sqrt(x)) + 1) if x % i == 0], range(2, n + 1))
print(list(func_get_prime(100)))
输出结果:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]