实验二:Python程序设计之结构与复用
一.实验目的
1.掌握程序的分支、循环等控制结构;
2.掌握random随机库的使用方法;
3.了解程序的异常处理及用法;
4.掌握函数的定义和调用方法。
二.知识要点
1.程序控制结构
三、实验内容
1.猜数字游戏。在程序中预设一个0-9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示“你猜的数字大于正确答案”;小于预设的数,显示“你猜的数字小于正确答案”,如此循环,直至猜中该数,显示“你猜了N次,猜对了,真厉害”,其中N是用户输入数字的次数。
实验代码:
#GuessNumberV1.py
guess = 0 #猜的数字
secert = 7 #预设的数字
times = 1 #猜的次数
print('---------欢迎参加猜数字游戏,请开始-------')
#输出提示信息
while guess != secert: #条件
guess = int( input('@数字区间0-9,请输入你猜的数字:'))
print('你输入的数字是:',guess) #展示用户输入
#这里是,号,不是加号,因为int不能与string直接相连
#错误如下
#TypeError: can only concatenate str (not "int") to str
if guess ==secert: #判断猜的数字是否为预设的数字
print('你猜了{}次,你猜对了,真厉害!'.format( times))
else: #如果不正确
if guess <secert: #猜的数字小于预设的数字
print('你猜的数字小于正确答案!')
else: #猜的数字大于预设的数字
print('你猜的数字大于正确答案!')
times += 1
print('游戏结束')
实验结果:
2.猜数字游戏续。改编1中的猜数字游戏,让计算机能够随机产生一个预设数字,范围在0-100之间,其他游戏规则不变。
实验代码:
#GuessNumberV2.py
import random
guess = 0 #猜的数字
secert = random.randint(0, 100) #生成0-100的随机数
times = 1 #猜的次数
print('---------欢迎参加猜数字游戏,请开始-------')
#输出提示信息
while guess != secert: #条件
guess = int( input('@数字区间0-100,请输入你猜的数字:'))
print('你输入的数字是:',guess) #展示用户输入
#这里是,号,不是加号,因为int不能与string直接相连
#错误如下
#TypeError: can only concatenate str (not "int") to str
if guess == secert: #判断猜的数字是否为预设的数字
print('你猜了{}次,你猜对了,真厉害!'.format( times))
else: #如果不正确
if guess < secert: #猜的数字小于预设的数字
print('你猜的数字小于正确答案!')
else: #猜的数字大于预设的数字
print('你猜的数字大于正确答案!')
times += 1
print('游戏结束')
实验结果:
s设置允许猜数字的最大次数(比如最多只允许猜6次maxtimes=6),并在猜错后提示还有几次机会。用for循环改写整个程序,并提交。
实验代码:
#GuessNumberV3.py
import random
guess = 0 #猜的数字
secert = random.randint(0, 100)
#生成0-100的随机数
times = 1 #猜的次数
maxtimes = 7 #最大次数
print('---------欢迎参加猜数字游戏,请开始-------')
#输出提示信息
for i in range(1, maxtimes+1):
#计数循环maxtimes次
guess = int( input('@数字区间0-100,请输入你猜的数字:'))
print('你输入的数字是:',guess) #展示用户输入
#这里是,号,不是加号,因为int不能与string直接相连
#错误如下
#TypeError: can only concatenate str (not "int") to str
if guess == secert: #判断猜的数字是否为预设的数字
print('你猜了{}次,你猜对了,真厉害!'.format( times))
break #跳出循环
else: #如果不正确
if i == maxtimes: #猜的次数够了
print('你并没有猜出这个数字')
else:
if guess < secert: #猜的数字小于预设的数字
print('你猜的数字小于正确答案!')
else: #猜的数字大于预设的数字
print('你猜的数字大于正确答案!')
print('你还可以猜'+str(maxtimes-i)+'次')
times += 1 #次数加1
print('游戏结束')
4.猜数字游戏之续了又续。为了增加代码的复用性,将猜数字游戏封装为函数GuessSecret(maxtimes),将允许猜数字的最大次数maxtimes作为参数。在调用GuessSecret时允许用户自己设置maxtimes,美化程序的输出界面。提交程序文件。
实验代码:
#GuessNumberV4.py
import random
def GuessSecert(maxtimes):
guess = 0 #猜的数字
secert = random.randint(0, 100) #生成0-100的随机数
times = 1 #猜的次数
print('--------------------------------------')
print('--- ---')
print('-------欢迎参加猜数字游戏,请开始-------')
print('--- ---')
print('--------------------------------------')
#输出提示信息
for i in range(1, maxtimes+1): #计数循环maxtimes次
guess = int(input('@数字区间0-100,请输入你猜的数字:'))
print('你输入的数字是:',guess) #展示用户输入
#这里是,号,不是加号,因为int不能与string直接相连
#错误如下
#TypeError: can only concatenate str (not "int") to str
if guess == secert: #判断猜的数字是否为预设的数字
print('你猜了{}次,你猜对了,真厉害!'.format( times))
break #跳出循环
else: #如果不正确
if i == maxtimes: #猜的次数够了
print('你并没有猜出这个数字')
else:
if guess < secert: #猜的数字小于预设的数字
print('你猜的数字小于正确答案!')
else: #猜的数字大于预设的数字
print('你猜的数字大于正确答案!')
print('你还可以猜'+str(maxtimes-i)+'次')
times += 1 #次数加1
print('游戏结束')
maxts = eval(input('@请输入最大次数:'))
GuessSecert(maxts)
实验结果:
实验代码:
#KochDrawV2.py
import turtle
def koch(size, n): #size:边长 n:结束
if n == 0: #基例
#如果是0阶,即绘制一条直线
turtle.fd(size)
else:
for angle in [0, 60, -120, 60]:
#turtle的角度数组
turtle.left(angle) #向左转angle度
koch(size/3, n-1) #递归调用
def main():
turtle.speed('fastest') #绘制速度最快
turtle.setup(600,600) #画笔起始点
turtle.penup()
turtle.goto(-200, 100) #到达该点
turtle.pendown()
turtle.pensize(2) #画笔粗细
level = 5 # 5阶科赫雪花,阶数
#绘制雪花的三分之一,然后向右转120度,内角即为60度,3*60=180,即一个正三角形
koch(400,level) #绘制一个level阶,长度为400i像素的科赫曲线
turtle.right(120)
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.hideturtle() #隐藏画笔
turtle.done() #结束绘画
main()
实验结果:
四、实验总结
2.整数类型和字符串类型不能直接使用加号
及进行连接,如果进行连接,则会出现以下错误:
错误如下
TypeError: can only concatenate str (not “int”) to str
3.for i in range()所代表的计数循环,以及while所代表的无限循环的使用方法。其中range(m)生成的序列是从0到m-1,如果是range(m, n)就是从m到n-1。
4.break语句的使用方法及作用,break只能跳出内部循环,而不能跳出外部循环。
5.递归函数一定是有参函数,且递归函数一定有基例来使函数结束,递归函数的结构是由分支语句加函数组成的。