Python100例学习笔记【下】

实例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

详见:【python】统一转换日期格式dateutil.parser.parse

题目:

字符串日期转换为易读的日期格式。

代码:
#!/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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值