python二级Turtle
太阳花
题目:用turtle库的turtle.fd()函数和turtle.left()函数绘制一个边长为200的太阳花。绘制效果如图:
import turtle
turtle.color('red', 'yellow') # 画笔色,填充色
turtle.begin_fill() # 开始填充
for i in range(36): # 循环36次。36条边,每个内角360/36=10,
turtle.fd(200)
turtle.left(170) # 旋转角度 180-10 = 170 turtle.left() 和 turtle.right() 都是水平180旋转
turtle.end_fill()
四瓣花
从左上角的花瓣开始绘制
import turtle
for i in range(4):
turtle.seth(90*(i+1)) # 改变画笔绘制方向
turtle.circle(50, 90) # 绘制弧形
turtle.seth(-90+i*90)
turtle.circle(50, 90)
turtle.hideturtle() # 隐藏画笔
turtule.seth()
改变画笔绘制方向,参数角度为绝对方向角度
turtle.circle(radius, extend=None)
radius为半径, extend绘制多大角度的弧形,不设置时或设置为None时,绘制整个圆形。
turtle.hideturtle()
隐藏画笔箭头
正六边形和圆内切六边形
from turtle import *
pensize(5)
# 边长为100像素的正六边形
for i i range(6):
fd(100)
right(60)
# 半径为60的红色圆内切六边形
color('red')
circle(60, steps=6)
知识回顾:turtle库
turtle.circle() 有两个参数,第一个参数为圆的半径,第二个参数有两种,一个是圆弧的角度(默认360),另外一种是内切N变形(steps=n
)n必须大于等于3.
质数(素数)
判断是否是素数(从2开始(大于1的自然数),因数 只有他本身和1),最小的素数为2
def prime(num):
if num < 2: # 小于2不是素数,返回False
return False
elif num > 2:
for i in range(2, num): # 一个数的因数分布于[2,num)
if num % i == 0: # 整除 无余数(取余为零)
return False
return True
# list(range(2, 2)) 输出为空
def prime(num):
if num < 2:
return False
for i in range(2, num):
if num % i == 0:
return False
return True
鲁棒输入
题目:
键盘输入一个1~26的数字,对应英文大写字母表的索引,在屏幕上显示输出对应的英文字母。
num = eval(input("请输入一个的1~26数字:"))
ls = [0]
for i in range(65, 91):
ls.apppend(chr(i))
print("{}".format(ls[num]))
知识回顾: python字符串
python字符串中每一个字符都是Unicode编码字符
ord(x) :将单个 字符转化为Unicode编码
chr(u) :将Unicode编码转换为对应字符
字符A的Unicode编码是65,字符a的Unicode编码是97
将用户输入的十进制整数,转换为二进制,八进制,和十六进制(大写)屏幕输出
num = int(input('请输入数字:'))
print("对应的二进制数:{0:b}\n八进制数:{0:o}\n十六进制数:{0:X}".format(num))
字符串格式化输出
将参数num同时传入三个槽中,槽中必须填写参数序号。否则会出现IndexError
IndexError: Replacement index 1 out of range for positional args tuple
槽内部格式化配置方式{<参数序号>:<格式控制标记>}
-
格式控制标记:
<填充><对齐<宽度><,><精度><类型>
-
默认<左对齐,空格填充
-
<,> 数字千分位的分隔符
-
<.精度> 浮点数小数精度/字符串 最大输出长度
-
<类型>:
整数类型:b二进制 c(Unicode编码对应的字符)d(十进制) o(八进制)x(小写的十六进制表示形式) X(大写的十六进制表示形式)
浮点数类型 e E f %
题目:输入一个年份。编写一个函数,判断用户输入的是否为闰年。(闰年分为普通闰年和世纪闰年,普通闰年是能被四整除,但是不能被100整除的年份,世纪闰年是能被400整除的年份)
def judge_year(year):
if year % 4 == 0 and year % 100 != 0:
return True
elif year % 400 == 0:
return True
return False
year = eval(input('请输入一个年份:'))
if judge_year(year) == False:
print('{}年不是闰年。'.formant(year))
else:
print('{}年是闰年。'.format(year))
知识回顾:条件
if 条件表达式为Ture, 执行if 条件下的语句。
elif 检查多个表达式是否为True,为真执行特定代码块中的代码。
知识联系多个判断查找 : 使用映射对象(比如:字典)的最大一个好处就是它的搜索操作比 类似 if-elif-else语句或者是for循环这样的序列查询要快很多。
异常处理
题目:使用python异常处理结构,写对数计算,要求底数大于0且不等于1, 真数大于0, 且输入的必须为实数, 否则抛出对应的异常。
import math
try:
a = eval(input('请输入底数:'))
b = eval(input('请输入真数:'))
c = math.log(b, a) # math.log(真,底)
except ValueError: # 每个条件逐一判断
if a <= 0 and b > 0:
print('底数必须大于0')
elif a > 0 and b <= 0:
print('真数必须大于0')
elif a <= 0 and b <= 0:
print('真数和底数都必须大于0')
except ZeroDivisionError:
print('底数不能为1')
except NameError:
print('输入必须为实数')
else:
print(c)
python math模块
import math
菜鸟教程 math模块
math.log(x[, base])
使用一个参数,返回x的自然对数
常用函数:
- 数学常量
math.pi 圆周率
math.e 自然对数的底数 - 数学函数 (求绝对值。平方根、幂函数…)
math.ceil(x) 返回大于等于x的最小整数
math.floor(x) 返回小于等于x的最大整数
math.sqrt(x) 返回x的平方根
math.pow(x, y) 返回x的y次幂
math.log(x) 返回x的自然对数
math.log10(x) 返回x的以10为底的对数
math.degrees(x) 将弧度转换为角度
math.radians(x) 将角度转换为弧度 - 三角函数
math.sin(x) 返回x的正弦值,x以弧度为单位
math.cos(x) 返回x的余弦值,x以弧度为单位
math.tan(x) 返回x的正切值,x以弧度为单位
math.asin(x) 返回x的反正弦值(弧度)
math.acos(x) 返回x的反余弦值(弧度)
math.atan(x) 返回x的反正切值(弧度)
math.atan2(y, x) 返回给定的X,Y坐标值的反正切值,y/x,弧度制.
解密
将每一个英文字符循环替换为字母列表序列中该字符后第三个字符。
原文字符P,其密文字符C满足如下条件
C = (P+3)mod26
解密方法反之,P = (C-3)mod26
步骤:1.接收用户输入文本 2.加密(对照字母a-z, A-z按照密码算法进行转换,同时输出
其他非英文原样输出。
intxt = input('请输入明文:')
for p in intxt:
if 'a' <= p <= 'z':
# 后三个字符的位置用Unicode编码确定,ord(p)-ord('a')+3 循环mod26 从'a'开始,最后转换为字符输出
print(chr(ord('a')+(ord(p)-ord('a')+3)%26), end="")
elif "A" <= p <= "Z":
print(chr(ord('A')+(ord(p)-ord('A')+3)%26), end="")
else:
print(p, end="")
# 菱形
...*
..**
.***
****
.***
..**
...*
for i in range(0, 4):
print(" "*(3-i), end="") #
print("*"*(i+1))
for i in range(0, 4):
print(" "*(i+1), end="")
print("*"*(3-i))
函数的返回结果是元组类型
获得用户输入的一组数字,采用逗号风输入,输出其中的最大值。
data = eval(input('请输入一组数据,以逗号分割:'))
print(max(data))
【答案解析】要把输入的数据中最大值输出,可使用max()方法。input()方法输入的数据是字符串类型,字符串的比较是根据ASCII进行比较的,所以需要使用eval()方法把字符串类型转换Python数值类型,然后max()方法对变量data进行比较,所以空白处应填“max(data)”。
类
fo = open('PY301-1.py', 'w')
class Horse():
def __init__(self, category. age, gender):
self.category = category
self.age = age
self.gender = gender
def get_descriptive(self):
self.info = "一匹" + self.category + str(self.age) + "岁的"+ self.gender + "马"
def write_speed(self, new_speed):
self.speed = update_speed
addr = "在草原上奔跑的速度是"
fo.write(self.info + "," + addr + self.speed + "km/h")
horse = Horse("阿拉伯", 12, "公")
horse.get_descriptive()
horse.update_speed(50)
fo = open("PY301-2.txt", 'w')
class Horse():
def __init__(self, category. age, gender):
self.category = category
self.age = age
self.gender = gender
def get_descriptive(self):
self.info = "一匹" + self.category + str(self.age) + "岁的" + self.gender + "马"
def write_speed(self, new_speed):
self.speed = new_speed
addr = "在草原上奔跑的速度是"
fo.write(self.info + "," + addr + self.speed + "km/h")
# 继承Horse super()方法
class Camel(Horse):
def __init__(self, category, age, gender):
super().__init__(category, age, gender)
def write_speed(self, new_speed):
self.speed = new_speed
addr = "在沙漠上奔跑的速度是"
fo.write(self.info.replace("马", "骆驼"), + addr + self.speed + 'km/h')
camel = Camel("双峰", 20, "母")
camel.get_descriptive()
camel.write_speed(40)