绘图

绘制蟒蛇

import turtle
turtle.setup(650, 350, 200, 200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth(-40)
for i in range(4):
    turtle.circle(40, 80)
    turtle.circle(-40, 80)
turtle.circle(40, 80/2)
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2/3)
turtle.done()

绘制正五边形

import turtle
turtle.seth(0)
turtle.pensize(3)
for i in range (5):
    turtle.forward(40)
    turtle.left(360/5)
turtle.done()

绘制嵌套五边形

  • 使用turtle库的fd()、seth()、pencolor()函数绘制嵌套五角形,五角形边长从1像素开始,第一条边从0度方向开始,边长按照2个像素递增,每条边使用一种颜色,效果如下图所示。
import turtle as t
colors = ["purple","red","blue","green","black"]
d = 0
k = 1

for j in range(10):
    for i in range(5):
        t.pencolor(colors[i])
        t.fd(k)
        d = d + 360/5
        t.seth(d)
        k += 2
t.done()

绘制同心圆

  • 使用turtle库的turtle.circle()函数和turtle.seth()函数绘制图形,最小的圆圈半径为20像素,不同圆圈之间的半径差是20像素。效果如下图所示。
import turtle
r = 20
head = 90
for i  in range (3):
   turtle.seth(head)
   turtle.circle(r)
   r = r + 20
r = 20
head = 270
for i  in range (3):
   turtle.seth(head)
   turtle.circle(r)
   r = r + 20
turtle.done()

绘制科赫雪花

#KochDrawV2.py
import turtle
def koch(size, n):
    if n == 0:
        turtle.fd(size)
    else:
        for angle in [0, 60, -120, 60]:
            turtle.left(angle)
            koch(size/3, n-1)
def main():
    turtle.setup(600,600)
    turtle.penup()
    turtle.goto(-200, 100)
    turtle.pendown()
    turtle.pensize(2)
    level = 3 # 3阶科赫雪花,阶数
    koch(400, level)
    turtle.right(120)
    koch(400, level)
    turtle.right(120)
    koch(400, level)
    turtle.hideturtle()
main()

随机蒲公英

  • 使用turtle库的fd()、seth()、pencolor()、backward()、right()、screensize()等函数,以及random随机函数库的seed(), randint(), choice()函数,绘制n个彩色的蒲公英小伞。小伞的颜色在给定的颜色列表color中随机选择;伞顶半径画笔宽1个像素长edge个像素,edge取值在(20,30)范围里随机选择;伞柄画笔宽5个像素长handle个像素,handle取值在(30,50)范围里随机选择;小伞的伞柄与伞顶交点的位置在画布上随机分布;画布的X轴坐标取值在(-200,200)范围里随机选择,Y轴坐标取值在(-100,100)范围里随机选择。n的值由用户输入,其他值由代码模板给出。当用户输入6的时候,效果如下图所示。
from random import *
import turtle as t
def oneDandelion (x0,y0,color, edge, handle):
    t.up()
    t.goto(x0,y0)
    t.down()
    t.pencolor(color)
    t.seth(90)
    t.pensize(5)
    t.fd(handle)
    t.seth(250)
    t.pensize(1)
    for i in range(33):
        t.fd(edge)
        t.backward(edge)
        t.right(10)

color = ['red','pink','green','violet','purple']
seed(20)
t.screensize(400,200, "#E0FFFF")
n = 6
for i in range(n):
    edge = randint(20, 40)
    handle = randint(30, 60)
    oneDandelion(randint(-200, 200), randint(-100, 100), choice(color), edge, handle)
t.done()
print(' x0,y0',' handle ',' edge ',' edge = randint(20, 40)',' handle = randint(30, 60)')

简单程序记录

选择排序

  • 从键盘输入7个整数,用逗号隔开,对这7个整数从小到大排序,并输出结果到屏幕上。编写一个选择排序的函数SelectSort(lst,n),并调用该函数完成排序。
def SelectionSort(lst, n):
    for i in range(n):
        for j in range(i, n)
            if lst[j] == min(lst[i: n]):
                lst[i],lst[j]=lst[j],lst[i]
    return lst

print("请输入7个整数,用逗号隔开:")
numbers =input()
lst = numbers.split(',')
slst = SelectionSort(lst, len(lst))
print(','.join(slst))

冒泡排序

  • 从键盘输入5个整数,用逗号隔开,对这5个整数从小到大排序,并输出结果到屏幕上。编写一个冒泡排序的函数BubbleSort(numbers),并调用该函数完成排序。
def BubbleSort(numbers):
    for i in range(len(numbers)-1):
        for j in range(len(numbers)-1):
            if eval(numbers[j]) > eval(numbers[j+1]):
                numbers[j],numbers[j+1]=numbers[j+1],numbers[j]
    return numbers

#print("请输入5个整数,用英文逗号隔开:")
numbers =input()
numls = numbers.split(',')
sortednum = BubbleSort(numls)
print(','.join(sortednum))

众数和频率(字典lambda函数排序)

ls = [1080,750,1080,750,1080,850,960,2000,1250,1630,1080,1800,1080,2100,1080,1450,2500,560,1080,560]
counts ={}
for num in ls:
    counts[num] = counts.get(num,0)+ 1
items = list(counts.items())
items.sort(key = lambda x:[1],reverse = True)
num,count = items[0]
print("众数为{},出现频率为{}。".format(num,count))

合格率计算

  • 输入一个数字n作为合格标准,然后,输入一系列的数字,每次输入换行表示,空换行结束,输出合格率。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
  • 合格率指输入元素中合格元素与全部元素的比值。
i=0
s=0
a=eval(input())
b=input()
while b!="":
    s+=1
    if eval(b)>a:
        i+=1
    b=input()
if s!=0:
    print("合格率为{:.2f}%".format(i*100/s))
else:
    print("合格率为100.00%")

输出当前系统时间

  • 使用time 输出当前系统时间,参考格式为:2018-01-26 12:55:20
import time
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
import time
t = time.gmtime()
print(time.strftime("%Y-%m-%d %H:%M:%S",t))
  • time库是Python中处理时间的标准库。
  • time.gmtime()获取当前时间,表示为计算机可处理的时间格式。
  • strftime(tpl, ts)将时间以合理的方式展示出来,tpl是格式化模板字符串,用来定义输出效果,ts是计算机内部时间类型变量。
  • 格式化控制符如下:

自然数倒数和

  • 输入一个自然数n,如果n为奇数,输出表达式1+1/3+…+1/n的值;如果n为偶数,输出表达式1/2+1/4+…+1/n的值;输出表达式结果保留2位小数。
def f(n):
    sum=0
    if n%2==1:
        for i in range(1, n+1, 2):
            sum += 1/i
    else:
        for i in range(2, n+1, 2):
            sum += 1/i
    return sum

n = int(input())
print("{:.2f}".format(f(n)))

检查密码合格性

  • 输入一个密码字符串,依次检查下述的条件:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬
  • 大于8个字符,必须有一个字母或者一个数字
while True:
    s = input()
    if len(s) < 8 :
        print('密码长度要大于8个字符,请重新输入')
    elif s.isdigit():
        print('密码要包含字母,请重新输入')
    elif s.isalpha():
        print('密码要包含数字,请重新输入')
    else:
        print('你的密码合格了')
        break

生成随机密码

  • 利用random随机库里的函数,生成一个随机密码,该密码长度由用户输入一个正整数,密码中的偶数位字符是从大写和小写英文字母之中选出的字母,奇数位字符是从0-9之间的选出的数字,显示在屏幕上。
import random as r
lttbl = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'
numtbl = '0123456789'
r.seed(0.5)
n = eval(input())
code = ''
for i in range(n):
    if i%2 == 0:
        code += r.choice(lttbl)
    else:
        code += r.choice(numtbl)
print(code)

程序整理

100以内素数求和

import math
s=0
for i in range (2,100):
    for j in range (2,i+1):
        if i%j==0:
            break
    if j==i:
        s+=i
print(s)

气体浓度排序(数组lambda函数排序)

  • 字符串变量str保存了气体浓度传感器的4条数据,每条数据的第一字段是传感器编号,第二字段是气体名称,第三字段是浓度值。

  • 在屏幕上按照浓度值递减的顺序,显示输出每种气体名称,浓度,及其浓度在四种气体浓度中所占的百分比。示例如下:

    氮气的浓度是:5.20,占比: 49%
    乙烯的浓度是:2.43,占比: 23%
    甲烷的浓度是:1.70,占比: 16%
    甲醛的浓度是:1.36,占比: 13%

str = 'TGS2402:甲醛:1.36\nTGS2500:氮气:5.20\nTGS2310:甲烷:1.70\nTGS2820:乙烯:2.43'
ls = str.split('\n')
sum = 0
fieds = []

for gas in ls:
    fi = gas.split(':')
    sum += eval(fi[2])
    fieds.append(fi)

    fieds.sort(key=lambda x: x[2], reverse=True)

for gas in fieds:
    print('{}的浓度是:{},占比:{:3.0f}%'.format(gas[1], gas[2], 100 * eval(gas[2]) / sum))

交换键值并排序输出

  • 编写函数reverse_dict(),功能是交换字典的key值和value值(不允许重复),并按照key值降序输出新字典的内容,返回新的字典。
def reverse_dict(dic):
    out = {}
    for k,v in dic.items():
        out[v] = k
    keys = sorted(out.keys(),reverse = True)

    for k in keys:
        print(k,out[k])
    return out
#请输入一个字典
dic = eval(input(""))
reverse_dict(dic)

中文分词排序输出(文件读取)

import jieba
txt = open("阿甘正传-网络版.txt","r",encoding ="utf-8").read()
words = jieba.lcut(txt)
counts ={}
for word in words:
    if len(word) == 1:
        continue
    else:
        counts[word] = counts.get(word,0)+1
items = list(counts.items())
items.sort(key = lambda x:x[1],reverse = True)
for i in range(10):
    word,count = items[i]
    print("{0}:{1}".format(word,count))

求平均数中位数(文件读取)

def Arithmetic(numbers):#计算算法平均数
    sum = 0.0
    for i in numbers:
        sum = sum + float(i)
    return sum/len(numbers)

def Median(numbers):    #计算中位数
    numbers = sorted(numbers)
    size = len(numbers)
    if size % 2 == 0:
        med = (float(numbers[size//2-1]) + float(numbers[size//2]))/2
    else:
        med = numbers[size//2]
    return med      

fo = open("numbers.txt","r",encoding ="utf-8")
ls = []
for line in fo.readlines():
    line = line.replace("\n","")
    ls.append(line)

print("算术平均数为{}。".format(Arithmetic(ls)))
print("中位数为{}。".format(Median(ls)))