开发者

100 个 Python 小例子(练习题三)

目录
  • 实例051:按位与
  • 实例052:按位或
  • 实例053:按位异或
  • 实例054:位取反、位移动
  • 实例055:按位取反
  • 实例056:画圈
  • 实例057:画线
  • 实例058:画矩形
  • 实例059:画图(丑)
  • 实例060:字符串长度
  • 例061:杨辉三角
  • 实例062:查找字符串
  • 实例063:画椭圆
  • 实例64:画椭圆、矩形
  • 实例065:画组合图形
  • 实例066:三数排序
  • 实例067:交换位置
  • 实例068:旋转数列
  • 实例069:报数
  • 实例070:字符串长度II
  • 实例071:输入和输出
  • 实例072:创建链表
  • 实例073:反向输出链表
  • 实例074:列表排序、连接
  • 例075:不知所云

前期练习:

100 个 python 小例子(练习题二)

100 个 Python 小例子(练习题一)

实例051:按位与

题目:学习使用按位与 & 。

程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1

a=0o77
print(a)
b=a&3
print(b)
b=b&7
print(b)

实例052:按位或

题目:学习使用按位或 | 。

程序分析:0|0=0; 0|1=1; 1|0=1; 1|1=1

a=0o77
print(a|3)
print(a|3|7)

实例053:按位异或

题目:学习使用按位异或 ^

程序分析:0^0=0; 0^1=1; 1^0=1; 1^1=0

a=0o77
print(a^3)
print(a^3^7)

实例054:位取反、位移动

题目:取一个整数a从右端开始的4〜7位。

程序分析:可以这样考虑: (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))

实例055:按位取反

题目:学习使用按位取反~。

程序分析:~0=1; ~1=0;

print(~234)
print(~~234)

实例056:画圈

题目:画图,学用circle画圆形。   

from tkinter import *
canvas=Canvas(width=800,height=600,bg='yellow')
canvas.pack(expand=YES,fill=BOTH)
k=1
j=1
for i in range(26):
  canvas.create_oval(310-k,250-k,310+k,250+k,width=1)
  k+=jhttp://www.cppcns.com
  j+=0.3
mainloop()

实例057:画线

题目:画图,学用line画直线。

if __name__ == '__main__':
  from tkinter import *

  canvas = Canvas(width=300, height=300, bg='green') 
  canvas.pack(expand=YES, fill=BOTH)         
  x0 = 263
  y0 = 263
  y1 = 275
  x1 = 275
  for i in range(19):
    canvas.create_line(x0,y0,x0,y1, width=1, fill='red')
    x0 = x0 - 5
    y0 = y0 - 5
    x1 = x1 + 5
    y1 = y1 + 5

  x0 = 263
  y1 = 275
  y0 = 263
  for i in range(21):
    canvas.create_line(x0,y0,x0,y1,fill = 'red')
    x0 += 5
    y0 += 5
    y1 += 5

  mainloop()

实例058:画矩形

题目:画图,学用rectangle画方形。   

if __name__ == '__main__':
  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()

实例059:画图(丑)

题目:画图,综合例子。  

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.crhttp://www.cppcns.comeate_line(x0,y0,x,y,fill = 'red')
  mainloop()

实例060:字符串长度

题目:计算字符串长度。  

s='zhangguang101'
print(len(s))

例061:杨辉三角

题目:打印出杨辉三角形前十行。  

def generate(numRows):
  r = [[1]]
  for i in range(1,numRows):
    r.append(list(map(lambda x,y:x+y, [0]+r[-1],r[-1]+[0])))
  return r[:numRows]
a=generate(10)
for i in a:
  print(i)

实例062:查找字符串

题目:查找字符串。  

s1='aabbxuebixuebi'
s2='ab'
s3='xue'
print(s1.find(s2))
print(s1.find(s3))

实例063:画椭圆

题目:画椭圆。 

程序分析:使用 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()

实例065:画组合图形

题目:一个最优美的图案。  

import math
from tkinter import *

class PTS:
  def __init__(self):
    self.x = 0
    self.y = 0
points = []

def LineToDemo():
  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()

实例066:三数排序

题目:输入3个数a,b,c,按大小顺序输出。   

程序分析:同实例005。

raw=[]
for i in range(3):
  x=int(input('int%d: '%(i)))
  raw.append(x)

for i in range(len(raw)):
  for j in range(i,len(raw)):
    if raw[i]>raw[j]:
      raw[i],raw[j]=raw[j],raw[i]
print(raw)


raw2=[]
for i in range(3):
  x=int(input('int%d: '%(i)))
  raw2.append(x)
print(sorted(raw2))

实例067:交换位置

题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

li=[3,2,5,7,8,1,5]

li[-1],li[li.index(min(li))]=li[li.index(min(li))],li[-1]

m=li[0]
ind=li.index(max(li))
li[0]=li[ind]
li[ind]=m

print(li)

实例068:旋转数列

题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

from collections import *
li=[1,2,3,4,5,6,7,8,9]
deq=deque(li,maxlen=len(li))
print(li)
deq.rotate(int(input('rotate:')))
print(list(deq))

实例069:报数

题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

if __name__ == '__main__':
  nmax = 50
  n = int(input('请输入总人数:'))
  num = []
  for i in range(n):
    num.append(i + 1)

  i = 0
  k = 0
  m = 0

  while m < n - 1:
    if num[i] != 0 : k += 1
    if k == 3:
      num[i] = 0
      k = 0
      m += 1
    i += 1
    if i == n : i = 0

  i = 0
  while num[i] == 0: i += 1
  print(num[i])

实例070:字符串长度II

题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

def lenofstr(s):
  return len(s)

print(lenofstr('tanxiaofengsheng'))

实例071:输入和输出

题目:编写input()output()函数输入,输出5个学生的数据记录。

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)

实例072:创建链表

题目:创建一个链表。

class Node:

  def __init__(self, data):
    self.data = data
    self.next = None

  def get_data(self):
    return self.data

class List:

  def __init__(self, head):
    self.head = head

  def is_empty(self):
    return self.get_len() == 0

  def get_len(self): 
    length = 0
    temp = self.head
    while temp is not None:
      length += 1
      temp = temp.next
    return length

  def append(self, no编程客栈de):
    temp = self.head
    while temp.next is not None:
      temp = temp.next
    temp.next = nodehttp://www.cppcns.com

  def delete(self, index):
    if index < 1 or index > self.get_len():
      print("给定位置不合理")
      return
    if index == 1:
      self.head = self.head.next
      return
    temp = self.head
    cur_pos = 0
    while temp is not None:
      cur_pos += 1
      if cur_pos == index-1:
        temp.next = temp.next.next
      temp = temp.next

  def insert(self, pos, node):
    if pos < 1 or pos > self.get_len():
      print("插入结点位置不合理")
      return
    temp = self.head
    cur_pos = 0
    while temp is not Node:
      cur_pos += 1
      if cur_pos == pos-1:
        node.next = temp.next
        temp.next =node
        break
      temp = temp.next

  def reverse(self, head):
    if head is None and head.next is None:
      return head
    pre = head
    cur = head.next
    while cur is not None:
      temp = cur.next
      cur.next = pre
      pre = cur
      cur = temp
    head.next = None
    return pre

  def print_list(self, head):
    init_data = []
    while head is not None:
      init_data.append(head.get_data())
      head = head.next
    return init_data

if __name__=='__main__':
  head=Node('head')
  link=List(head)
  for i in range(10):
    node=Node(i)
    link.append(node)
  print(link.print_list(head))

实例073:反向输出链表

题目:反向输出一个链表。

class Node:

  def __init__(self, data):
    self.data = data
    self.next = None

  def get_data(self):
    return self.data

class List:

  def __init__(self, head):
    self.head = head

  def is_empty(self):
    return self.get_len() == 0

  def get_len(self): 
    length = 0
    temp = self.head
    while temp is not None:
      length += 1
      temp = temp.next
    return length

  def append(self, node):
    temp = self.head
    while temp.next is not None:
      temp = temp.next
    temp.next = node

  def delete(self, index):
    if index < 1 or index > self.get_len():
      print("给定位置不合理")
      return
    if index == 1:
      self.head = self.head.next
      return
    temp = self.head
    cur_pos = 0
    while temp is not None:
      cur_pos += 1
      if cur_pos == index-1:
        temp.next = temp.next.next
      temp = temp.next

  def insert(self, pos, node):
    if pos < 1 or pos > self.get_len():
      print("插入结点位置不合理")
      return
    temp = self.head
    cur_pos = 0
    while temp is not Node:
      cur_pos += 1
      if cur_pos == pos-1:
        node.next = temp.next
        temp.next =node
        break
      temp = temp.next

  def reverse(self, head):
    if head is None and head.next is None:
      return head
    pre = head
    cur = head.next
    while cur is not None:
      temp = cur.next
      cur.next = pre
      pre = cur
      cur = temp
    head.next = None
    return pre

  def print_list(self, head):
    init_data = []
    while head is not None:
      init_data.append(head.get_data())
      head = head.next
    return init_data

if __name__=='__main__':
  head=Node('head')
  link=List(head)
  for i in range(10):
    node=Node(i)
    link.append(node)
  print(link.print_list(head))
  print(link.print_list(link.reverse(head)))

实例074:列表排序、连接

题目:列表排序及连接。

程序分析:排序可使用sort() 方法,连接可以使用 + 号或 extend() 方法。

a=[2,6,8]
b=[7,0,4]
a.extend(b)
a.sort()
print(a)

例075:不知所云

题目:放松一下,算一道简单的题目。

if __name__ == '__main__':
  for i in range(5):
    n = 0
    if i != 1: n += 1
    if i == 3: n += 1
    if i == 4: n += 1
    if i != 4: n += 1
    if n == 3: print (64 + i)

到此这篇关于100 个 Python 小例子(练习题三)的文章就介绍到这了,更多相关 Python 练习题内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜