前言:
Python 100个小测试,用于熟悉和巩固Python基础
例题地址:https://www.runoob.com/python/python-100-examples.html
"""
题目51:学习使用按位与&。
"""
按位与: & 双目运算符.其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位都为1时,结果位才为1.参与运算的两个数均以补码出现.
按位或: | 双目运算符.只有对应的两个二进位都为1时,结果位才为1
按位异或: 如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
取反 : ~ 在补码表示中,最高位为符号位,正数的符号位为0,负数为1
右移 : >>
左移 : <<
分析: 0&0=0; 0&1=0; 1&0=0; 1&1=1。
"""
题目52:学习使用按位或 | 。
"""
分析: 0|0=0; 0|1=1; 1|0=1; 1|1=1
"""
题目53:学习使用按位异或 ^ 。
"""
分析: 0^0=0; 0^1=1; 1^0=1; 1^1=0
"""
题目54:取一个整数a从右端开始的4〜7位。
"""
分析:
首先这个整数得满足>=7位,然后取右端开始的4-7位, 考核截取字符串;
num = input("输入整数: ")
num = list(num)[-7:-3]
举一反三:
str = '0123456789'
print(str[:]) # 截取字符串的全部字符
print(str[0:3]) # 截取第1位到第3位的字符
print(str[6:]) # 截取第7个字符到结尾
print(str[:-3]) # 截取从头开始到倒数第3个字符之前
print(str[2]) # 截取第3个字符
print(str[-1]) # 截取倒数第1个字符
print(str[::-1]) # 创造1个与原字符串顺序相反的字符串
print(str[-3:-1]) # 截取倒数第3位到倒数第1位之前的字符
print(str[-3:]) # 截取倒数第3位到结尾
print(str[:-5:-2]) # 逆序截取==> 先截取,再进行逆序.
value:
012
0123456789
6789
0123456
2
9
9876543210
78
789
96
逆袭截取解释:
str = 'abcdefghijklmn'
位置编号: 012345678910111213
对应编号: -14-13-12-11-10-9-8-7-6-5-4-3-2-1
# 官方方法
分析:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4)
(3)将上面二者进行&运算。
a = int(input('输入一个数字: '))
b = 0 # 0
b = ~b # 1
b = b<<4 # 10000
b = ~b # 1111
c = a>>4
d = c&b
print('a:',bin(a))
print('b:',bin(b))
print('c:',bin(c))
print('d:',bin(d))
"""
题目55:学习使用按位取反~。
"""
二进制数在内存中以补码的形式存储。
按位取反:二进制每一位取反,0 变 1,1 变 0。
最高位为符号位,正数的符号位为 0,负数为 1。
对正数来说,最高位为 0,其余各位代表数值本身(以二进制表示),如 +42 的补码为 00101010。
对负数而言,把该数绝对值的补码按位取反,然后对整个数加 1,即得该数的补码。如 -42 的补码为 11010110(00101010 按位取反
11010101+1 即 11010110)。
~9 的计算步骤:
转二进制:0 1001
计算补码:0 1001
按位取反:1 0110
转为源码:
按位取反:1 1001
末位加 1:1 1010
符号位为 1 是负数,即 -10
a = 7
b = ~a # -8
c = -7
d = ~c # 6
print ('变量 a 取反结果为: %d' % b)
print ('变量 c 取反结果为: %d' % d)
"""
题目56:画图,学用circle画圆形。
"""
分析: 主要为turtle包的使用
import turtle
turtle.title("画圆")
turtle.setup(800,600,0,0)
pen=turtle.Turtle()
pen.color("yellow")
pen.width(5)
pen.shape("turtle")
pen.speed(1)
pen.circle(100)
"""
题目57:画图,学用line画直线。
"""
分析: 主要为turtle包的使用
import turtle
def drawline(n):
t=turtle.Pen()
t.color(0.3,0.8,0.6) #设置颜色,在0--1之间
t.begin_fill() #开始填充颜色
for i in range(n): #任意边形
t.forward(50)
t.left(360/n)
t.end_fill() #结束填充颜色
drawline(4)
"""
题目58:画图,学用rectangle画方形。
"""
分析: 考察tkinter包的使用
from tkinter import *
root = Tk()
root.title('Canvas')
canvas = Canvas(root,width = 400,height = 400,bg = 'yellow')
x0 = 263
y0 = 263
y1 = 275
x1 = 275
for i in range(19):
canvas.create_rectangle(x0,y0,x1,y1)
x0 -= 5
y0 -= 5
x1 += 5
y1 += 5
canvas.pack()
root.mainloop()
"""
题目59:画图,综合例子。
"""
分析: 考察tkinter包的使用
if __name__ == '__main__':
from Tkinter import *
canvas = Canvas(width = 300,height = 300,bg = 'green')
canvas.pack(expand = YES,fill = BOTH)
x0 = 150
y0 = 100
canvas.create_oval(x0 - 10,y0 - 10,x0 + 10,y0 + 10)
canvas.create_oval(x0 - 20,y0 - 20,x0 + 20,y0 + 20)
canvas.create_oval(x0 - 50,y0 - 50,x0 + 50,y0 + 50)
import math
B = 0.809
for i in range(16):
a = 2 * math.pi / 16 * i
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 * math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
canvas.create_oval(x0 - 60,y0 - 60,x0 + 60,y0 + 60)
for k in range(501):
for i in range(17):
a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 + math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
for j in range(51):
a = (2 * math.pi / 16) * i + (2* math.pi / 180) * k - 1
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 * math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
mainloop()
"""
题目60:计算字符串长度。
"""
str = 'abc'
print(len(str))
"""
题目61:打印出杨辉三角形(要求打印出10行如下图)。
"""
分析: 首先要理解什么是杨辉三角,这是非常经典的一个题目;
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.第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
2.每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。
即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。
def triangles():
L = [1]
while True:
yield L
L = [sum(i) for i in zip([0]+L, L+[0])]
def triangles(num = 10):
LL = [[1]]
for i in range(1,num):
LL.append([(0 if j== 0 else LL[i-1][j-1])+ (0 if j ==len(LL[i-1]) else LL[i-1][j]) for j in range(i+1)])
return LL
"""
题目62:查找字符串。
"""
分析: 基础运用
str_1 = 'abcdefg'
str_2 = 'cde'
print(str_1.find(str_2))
"""
题目63:画椭圆。
"""
分析: 考察tkinter包的使用
if __name__ == '__main__':
from Tkinter import *
x = 360
y = 160
top = y - 30
bottom = y - 30
canvas = Canvas(width = 400,height = 600,bg = 'white')
for i in range(20):
canvas.create_oval(250 - top,250 - bottom,250 + top,250 + bottom)
top -= 5
bottom += 5
canvas.pack()
mainloop()
"""
题目64:利用ellipse 和 rectangle 画图。。
"""
if __name__ == '__main__':
from Tkinter import *
canvas = Canvas(width = 400,height = 600,bg = 'white')
left = 20
right = 50
top = 50
num = 15
for i in range(num):
canvas.create_oval(250 - right,250 - left,250 + right,250 + left)
canvas.create_oval(250 - 20,250 - top,250 + 20,250 + top)
canvas.create_rectangle(20 - 2 * i,20 - 2 * i,10 * (i + 2),10 * ( i + 2))
right += 5
left += 5
top += 10
canvas.pack()
mainloop()
"""
题目65:一个最优美的图案。
"""
import math
class PTS:
def __init__(self):
self.x = 0
self.y = 0
points = []
def LineToDemo():
from Tkinter import *
screenx = 400
screeny = 400
canvas = Canvas(width = screenx,height = screeny,bg = 'white')
AspectRatio = 0.85
MAXPTS = 15
h = screeny
w = screenx
xcenter = w / 2
ycenter = h / 2
radius = (h - 30) / (AspectRatio * 2) - 20
step = 360 / MAXPTS
angle = 0.0
for i in range(MAXPTS):
rads = angle * math.pi / 180.0
p = PTS()
p.x = xcenter + int(math.cos(rads) * radius)
p.y = ycenter - int(math.sin(rads) * radius * AspectRatio)
angle += step
points.append(p)
canvas.create_oval(xcenter - radius,ycenter - radius,
xcenter + radius,ycenter + radius)
for i in range(MAXPTS):
for j in range(i,MAXPTS):
canvas.create_line(points[i].x,points[i].y,points[j].x,points[j].y)
canvas.pack()
mainloop()
if __name__ == '__main__':
LineToDemo()
"""
题目66:输入3个数a,b,c,按大小顺序输出。
"""
分析: 也没懂这个题顺序是怎么来的,感觉一堆乱...
前面太多一样的,这里就不写了..
"""
题目67:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
"""
分析: 利用下标和max,min即可;
a = [1,3,4,5,6]
for i in range(len(a)):
if a[i] == max(a):
a[0],a[i]=a[i],a[0] # 不可分开写,否则会变成[6, 3, 4, 5, 6] 先后赋值;
if a[i] == min(a):
a[len(a)-1],a[i]=a[i],a[len(a)-1]
print(a)
# 法2
a = [1,3,4,5,6]
print a
# 最小的放到最后
min = min(a)
a.remove(min)
a.append(min)
# 最大的放到最前面
max = max(a)
a.remove(max)
a.insert(0,max)
print(a)
"""
题目68:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数
"""
分析: 因为总长度不变,即最后一项变为第一个,最后第二个变为整数第二个
即a[i] = a[i+m] , a[len(a)-1] = a[i]
逻辑和方法对了,其实就很简单了
a = [1,2,3,4,5,6,7] # 测试列表
m = 5 # 设置向后移动 3 位
for i in range(m):
a.insert(0, a.pop()) # pop 剔除默认最后一位,insert加入指定位置指定数;
print(a)
"""
题目69:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
"""
n = [i+1 for i in range(20)]
i = 1
while len(n) > 1:
if i % 3 == 0:
n.pop(0)
else:
n.insert(len(n),n.pop(0)) # 同68 考验逻辑
i += 1
print(n)
"""
题目70:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
"""
分析: 略
"""
题目71:编写input()和output()函数输入,输出5个学生的数据记录。
"""
分析: 略
"""
题目72:创建一个链表。
"""
l=[ input("please input a number:\n") for i in range(5)]
print(l)
"""
题目73:反向输出一个链表。
"""
l=[ input("please input a number:\n") for i in range(5)]
l.reverse()
print(l)
"""
题目74:列表排序及连接。
"""
分析: 略
"""
题目75:放松一下,算一道简单的题目。
"""
分析: 略
51-75题如上,大家有什么疑问可以留言讨论。
题外话
希望本文有大家有帮助, 如有错误,欢迎指正。
转载请注明原文链接:
https://blog.csdn.net/weixin_41613094/article/details/122268882