临近期末,我们来做几个python的实例,浅浅总结一下python的使用。
首先,我们做第一个实例:生成名字,要求如下
使用标准库random中的函数choice()在多个姓氏中随机选取一个,使用random()生成介于[0,1)区间的随机数,如果随机数大于0.5则生成人名中的第二个字,这样可以得到包含三个汉字的人名,否则得到包含两个汉字的人名
那么我们要做这个实例首先我们需要掌握几个函数:想要生成基于给定姓氏的人名,并使用random
库的choice()
和random()
函数来控制名字的长度。使用标准库中的random
模块来生成包含两个或三个汉字的人名。
random库中有几个生成器函数
(1)random.random(): 返回随机生成的一个浮点数,范围在[0,1)之间
import random
print(random.random())
(2) random.randint(a,b):生成指定范围内的整数
import random
print(random.randint(1,10))
(3)random.choice():从指定的序列中获取一个随机元素
import random
print(random.choice('学习python')) # 从字符串中随机取一个字符
print(random.choice(['good', 'hello', 'is', 'hi', 'boy'])) # 从list列表中随机取
print(random.choice(('str', 'tuple', 'list'))) # 从tuple元组中随机取
这些是本次实例需要用到的一些函数(其他函数用到时再补充)
那么我们开始写这个实例。我们需要确定我们的思路:首先我们需要建立一个列表来存储我们的姓,然后从这个列表之中随机选取一个作为我们的姓氏。
那么我们有很多种实现的方法,我展示如下一种:
from random import choice, random
name = choice('赵钱孙李周吴郑王崔')
我们使用choice函数从一个姓氏序列中随机选取一个字
接下来我们加名。先确定我们的思路:我们使用random函数随机生成一个数,如果它大于0.5则让它从一组名字中随机选取一个字(这里我用数字代替汉字)
这里的name += choice("12345678")就是name=name+choice("12345678")
if random() > 0.5:
name += choice("1245668")
这里可能会有人问:那如果小于0.5不就没有第二个名了吗。不要慌,正是因为这样,才会有接下来的思路:那么我们应该再设计一个不需要随机生成的随机名来组成我们需要的名字。
name += choice('玉天尔武凯1234567')
我们在if外输入我们的第三个名生成的代码就OK啦~这样就生成了一个简单的名字组成器!最后代码如下:
from random import choice, random
name = choice('赵钱孙李周吴郑王崔')
if random() > 0.5:
name += choice("1245668")
name += choice('玉天尔武凯1234567')
print('名字为:', name)
编程计算BMI(Body Mass Index身体质量指数),BMI=体重(kg)/身高2(m2),并根据BMI指数提示,输出结果。
第二个要求我们做一个关于计算BMI的程序,那么我们首先要知道bmi的公式:体重/身高的平方,那么我们就可以列出一个式子:我们设体重为k,身高为m可以得出bmi=k/(m**2)。接下来我们需要用户输入他的身高体重来赋值:
k=eval(input('输入体重'))
m=eval(input('输入身高'))
bmi=k/(m**2)
这样我们就可以计算出用户的BMI啦,然后我们根据BMI对用户的身体做出提示,那么这个时候我们就需要做出一个分支的语句,如果大于值为肥胖,小于值为偏瘦等等.....
if bmi<18.5:
y='偏瘦'
elif 18.5
这里注意:分支结构也是python基础中的一个重点我们来复习一下。
首先分支机构由if elif else 三个组成,翻译过来就是如果是,要么是,否则(易于理解就这么写了)然后呢,if语句的结构如下:
if 条件:
print()
elif 条件:
print()
else:
print()
这里一定要注意缩进!
最后这个实例也就完成了,最后只需要输出即可:
k=eval(input('输入体重'))
m=eval(input('输入身高'))
bmi=k/(m**2)
if bmi<18.5:
y='偏瘦'
elif 18.5
看见最后的结果可能有些人会有疑问,首先这个f是一个f串的使用,作用是保留小数位数。它的使用方式为:f'函数={函数:.nf}'(n为你要保留的小数位数)
猜数游戏。利用random库的randint()方法随机产生一个1-100之间的整数(random.randint(1,100)),跟用户输入的整数比较大小,判断是否猜中,游戏过程中给出“猜大了!”、“猜小了!”或“恭喜你,猜中了!”的提示。
这个实例和第一个实例原理是相同的,我们需要用到random库中的函数randint来随机生成数:根据题意可知,我们需要生成一个1-100的随机整数
from random import randint
n=randint(1,100)
接下来我们需要让用户猜数:首先我们的思路要明确:让用户输入需要用input函数来实现,但是我们并不确定用户输入的这个数的格式是什么,有可能是字符串而不是数字,那么这个时候我们需要用eval函数来让这个输入的内容脱掉“衣服”。简单来说就是可以让这个‘数’变成一个数。
g=eval(input('猜一个数'))
接下来我们需要做一个猜数的流程:
接下来我们根据这个流程做出操作:
if g>n:
print('猜大了')
elif g
如果我们想要这个游戏实现多次运行,那么我们需要用while循环将if语句套在里面:
while True:
g=eval(input('猜一个数'))
if g>n:
print('猜大了')
elif g
对于这个循环有几个要点:
第一:if语句需要注意缩进,这个是非常重要的一环
第二:if语句的嵌套要注意if和上面命令的缩进,在这里,if应该再else下,注意不要和if同一列。
第三:while循环体是一个无限循环,所以要终止它我们需要用break跳出循环体
编程完成抓狐狸游戏,利用异常处理设置洞口数为正整数,最大尝试次数大于零小于洞口数,随机生成狐狸位置,每抓一次以后狐狸随机左右移动一个位置,游戏过程中根据抓取情况给予相应的提示,如“恭喜你,抓到狐狸了!”、“很遗憾,这次没抓到,再试一次吧”、“很遗憾,没抓到狐狸,你输了!”
这个实例我们需要用到random库中的两个函数:randint和chioce。
接下来我们开始实例:首先我们需要用户输入想要玩的洞口数
n = eval(input("请输入洞口数"))
然后再次输入要尝试猜的次数:
maxtimes=eval(input("请输入尝试次数"))
完成这两项之后,我们要考虑狐狸出现的洞口数,并且如果用户猜对了,应该返回猜对了!
如果猜错了需要返回猜错了!
在这个进程中,首先我们先定义了一个参数cp为狐狸可以出现的洞口数,接下来用户开始猜护理出现在哪个洞口数:
cp = randint(1,n)
guess = eval(input("请输入要打开的洞口数"))
洞口数设置完之后,就可以来判断用户猜的对不对,使用if选择语句来判断对错,如果对了那么我们输出:正确。并跳出程序,如果不对,那么我们则返回:没抓到
cp = randint(1,n)
guess = eval(input("请输入要打开的洞口数"))
if guess == cp:
print("真棒,抓到了!")
break
else:
print("很遗憾没抓到!")
这样一个简单的程序就写完了,我们还应该考虑到这是一个游戏,我们可以使用循环来询问用户要不要继续玩,这时候我们就可以使用一个for循环来实现:
for i in range(maxtimes):
guess = eval(input("请输入要打开的洞口数"))
if guess == cp:
print("真棒,抓到了!")
break
else:
print("很遗憾没抓到!")
else:
print("抓到了,好棒耶")
我们在这个程序的外围写一个for循环来让玩家自己规定自己猜的次数,也就是我们刚开始让用户自己输入的要玩的次数。那么在使用for循环的时候我们要注意,缩进的严谨。for应该是整个函数的最外层,所以我们要将for循环放在最外面,在for循环下,我们先让玩家输入要打开的洞口数,开始这个游戏。
然后是我们的程序判断:玩家猜的对不对?如果对,那么我们则输出:抓到了!并且用break跳出循环。如果没猜对,那么我们需要输出:没抓到!这个时候程序会自动开始下一次循环,让玩家继续猜洞口,直到对或者次数用尽为止。
这样一个完整的程序就完成了,接下来我们给游戏增加一点趣味性:如果玩家猜错了,那么我们让狐狸随机到一个洞口,让它不是固定的洞口:
for i in range(maxtimes):
guess = eval(input("请输入要打开的洞口数"))
if guess == cp:
print("真棒,抓到了!")
break
else:
print("很遗憾没抓到!")
if cp == 1:
cp = cp + 1
elif cp == n:
cp = cp - 1
else:
cp = cp + choice([1, -1])
这个操作因为是在玩家没猜到之后,所以我们应该放到没抓到的下面,让狐狸重新进一个洞口,我们用if选择语句来实现这个玩法:
首先如果狐狸的洞口是1的话就让它的洞口+1,如果洞口是最大值,那么就让洞口-1,如果不是这两个值,那么就让系统随机从一组数中随机选取一个数,这里我用的是比较简单的数,可以自行更改在这里我就用【1,-1】之间随机选取一个数。这样一个完整的程序就完成了!
重点来了:
我们在考虑用户输入洞口数的时候,我们需要考虑用户输入的是不是正整数且大于0,那么我们如何来判断呢?我们就可以使用一个异常处理来判断。
我们先来学习一下异常处理结构:
try ... except ... else
try ... finally
try ... except ... finally
try ... except ... else ... finally
异常结构的基本语法为:
try:
被检测的代码块
except 异常类型:
try中一旦检测到异常,就执行这个位置的逻辑
else:
finally:
print()
在异常处理里面必须要有的是try 和except。其余函数可以没有。
我们回来继续看这个题:
这个题的需求我们来判断用户输入的洞口数是否为正整数,那么我们需要设置一些参数,先来看一个函数:assert函数。
assert函数是属于python下的一个函数,也叫作断言函数,它可以用于判断某个表达式的值,若是该值为真,那么程序就能够继续往下执行; 反之,Python解释器就会报出AssertionError错误。
其中有一个 isinstance()函数,它用来判断两个类型是否相同比如:
a = 2
isinstance (a,int)
True
在这个代码中,我们给a赋一个初值2.然后我们用isinstance函数来判断a这个值是不是属于int整形,如果正确返回Ture如果不正确那么返回False。
我们掌握了这个函数之后就可以开始我们的异常处理了:
首先我们先确定我们的条件是:1.是正整数
2.大于0
我们就可以用isinstance函数来实现:
assert isinstance(n, int) and n > 0
这样我们的条件就表示完成了。我们来回到我们最初的思路:
如果这个数符合我们的条件,那么就继续执行,如果不符合,那么我们就需要报错,并且让用户重新输入。
n = eval(input("请输入洞口数"))
try:
assert isinstance(n, int) and n > 0
break
except:
input("请重新输入一个正整数")
else:
break
那么我们来看,这个异常处理就已经完成了,但是我们要考虑到一点:如果我们让用户重新输入了这个数,我们还需要重新判断这个数是不是符合我们的条件,那么我们就要加上一个循环来使这个操作完成:
while True:
n = eval(input("请输入洞口数"))
try:
assert isinstance(n, int) and n > 0
break
except:
input("请重新输入一个正整数")
else:
break
这样,我们的操作就完成了,如果这个循环体返回了Ture,那么这个循环就结束,如果这个这个循环体返回了False那么循环运行,重新输入,这样我们就完成了这个异常处理的结构。那么这时候肯定有人好奇,这个else的break有什么作用,这里else是异常处理必要的结尾,如果少了这个那么异常处理的运行就会报错,而在我们不需要else的时候,我们可以在它下面加一些不会影响进程的命令。
输入带华氏或摄氏标志的温度值,如37C(表示37摄氏度)或100F(表示100华氏度),根据温度标志选择适当的温度转换公式,输出转换后带温度标志的摄氏或华氏温度。
相信到了这里这种实例对于我们来说已经很简单了。
我们先来确定我们的思路:
我们需要定义两个参数来实现两个温度的转化,然后我们让用户输入一个温度,通过函数来实现这两个温度的转化即可。(输入结果,取最后单位)
在输入的时候,我们可以让用户输入一个带有符号的温度,接下来,我们用索引来找到温度,利用温度的符号来判断是哪种温度,我们来根据不同的温度进行不同的操作。(if的选择语句)
还应该注意的是计算过后的结果有可能除不开,有很多小数位,那么我们就需要用f串保留小数位数。当然,这里还可以使用round函数保留小数位数,方法不唯一。(保留小数位数)
T=input("请输入一个华氏温度或摄氏温度:")
if T[-1] in ["F"]:
C=(eval(T[0:-1])-32)/1.8
print(f"摄氏度为:{C:.2f}C")
elif T[-1] in ["C"]:
F=eval(T[0:-1])*1.8+32
print(f"华氏温度为:{F:.2f}F")
else:
print("输入华氏温度格式错误")
随机生成20个随机小数存入列表或元组中,计算这些数据的截尾平均数(去掉最小值和最大值后剩余数据的平均值)
想必各位没有忘记第一个实例的时候我讲解的randint库下的三个函数。接下来我们来做一个生成随机数并计算结尾平均数的实例。
我们先了解一个新的函数:unifrom
random.uniform(x, y)
方法将随机生成一个实数,它在 [x,y]
范围内。
那么我们现在来做这个实例吧~
首先,我们用unifrom函数在0-1之间随机生成小数,然后使用for循环生成20个小数
data = [random.uniform(0, 1) for i in range(20)]
然后我们去掉最大值和最小值
data = data[1:-1]
我们可以用另外一种方法:
我们可以使用max和min函数先把最大值和最小值显示出来
Max=max(data)
print("最大值是,"Max)
Min=min(data)
print("最小值是",Min)
然后我们使用remove函数删除这两个值
data.remove(Max)
data.remove(Min)
print(data)
接下来我们可以把剩余的数加一起然后除以数量来计算平均值、
average = sum(data) / len(data)
最后输出可
学生成绩读取和统计,随机生成若干百分制学生成绩存入列表,生成字典统计其中“优”、“良”、“中”、“合格”、“不合格”的数量。
这个案例和我们上面的案例很相似,我们先来总结一下思路:首先我们先创建一个列表,里面包含学生成绩,这个学生成绩我们可以使用randint生成,范围控制在60-100随机。然后我们用for循环创建20个成绩即可。
scores = [round(random.uniform(60, 100), 2) for i in range(20)]
然后我们初始化字典以存储成绩等级的计数
grade_counts = {"优": 0, "良": 0, "中": 0, "合格": 0, "不合格": 0}
根据题的需求,我们可以遍历成绩列表,将每个成绩分类并增加相应的计数
for score in scores:
if score >= 90:
grade = "优"
elif score >= 80:
grade = "良"
elif score >= 70:
grade = "中"
elif score >= 60:
grade = "合格"
else:
grade = "不合格"
grade_counts[grade] += 1
或者我们可以在每个循环内加入相应的列表
这里我们的操作就是创建一个字典,如果它符合其中一个条件就把它加入这个字典。
最后输出即可:
print("学生成绩:", score)
print("成绩统计:", grade_dict)
模拟简易计算器,完成加减乘除运算,其中加运算利用add函数实现,减运算利用sub函数实现,乘法运算利用mul实现,除运算利用div函数实现,并采用异常处理结构,处理除数为0的情况。
这个题考察的是定义函数:
定义函数我们使用def + 函数名的方式:
def add(x,y):
return x+y
def sub(x,y):
return x-y
def mul(x,y):
return x*y
def div(x,y):
return x/y
这里我们定义函数然后在括号里面代表要计算的两个数,然后我们返回两个值的计算方式来计算。这样就完成了。
注意:
在这里我们要注意一点,除数不能为0,所以我们要做一个异常处理来返回错误。
try:
assert y!=0
except:
print('除数不能为0')
else:
return x/y
所以我们最后完整的代码就完成了:
def add(x,y):
return x+y
def sub(x,y):
return x-y
def mul(x,y):
return x*y
def div(x,y):
try:
assert y!=0
except:
print('除数不能为0')
else:
return x/y
下面来做一个输入输出的代码:
首先我们要让用户输入两个数,然后输入要运行的操作。我们可以使用if选择语句来进行分支选择,通过不同的运算符得出不同的结果。
a,b=eval(input("请输入两个运算数:"))
s=input("请输入一个运算符(+-*/):")
if s=='+':
print('a+b=',add(a,b))
elif s=='-':
print('a-b=',sub(a,b))
elif s=='*':
print('a*b=',mul(a,b))
elif s=='/':
print('a/b=',div(a,b))
else:
print('运算符错误!')
既然这是一个程序,那么我们就需要完善一下,我们应该让它循环使用,所以我们应该添加一个while循环,根据用户的需求来进行是否继续进程的操作。所以我们在外层加一个while即可。
def add(x,y):
return x+y
def sub(x,y):
return x-y
def mul(x,y):
return x*y
def div(x,y):
try:
assert y!=0
except:
print('除数不能为0')
else:
return x/y
while True:
a,b=eval(input("请输入两个运算数:"))
s=input("请输入一个运算符(+-*/):")
if s=='+':
print('a+b=',add(a,b))
elif s=='-':
print('a-b=',sub(a,b))
elif s=='*':
print('a*b=',mul(a,b))
elif s=='/':
print('a+b=',div(a,b))
else:
print('运算符错误!')
flag=input("继续运算吗?Y/N:")
if flag=="Y":
pass
else:
break
最后代码如上,这类实例其实原理都是差不多的,只要我们整理好思路,然后根据我们的思路来写就简单的多。
来做一个扩展的实例,与前几个实例没什么太大关系,仅做了解就可以啦~
英文词频统计。读入一篇英文文章,统计出现频率最高的前10个单词次出现的次数。
dic={}
txt = open('d:\\loveandtime.txt', 'r',encoding="utf-8").read()
txt = txt.lower()
for GYP in """.," ” “ ?:!""":
txt = txt.replace(GYP,' ')
words = txt.split()
for i in words:
dic[i] = dic.get(i,0)+1
x=list(dic.items())
test = sorted(x,reverse=True,key=lambda y:y[1])
for a in range(10):
word,count=test[a]
print(f"top{a+1:<10}{word:<10}{count:>5}")
这类题考察的就是open,sorted这两个函数
sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作将新的列表逆序排序。
open就是打开一个文件,如果这个文件不存在,那么则新建之后打开。
我们直接来看这个代码段吧。首先第一行,我们新建一个字典,然后我们打开这个文件,R是以只读的方式,encoding是字符编码,用read命令就是打开一个文件后单行读取。之后我们将所有的字母变成小写,用lower函数。然后我们将里面所有的标点符号都变成空格。用空格隔开split()
将每一个单词分开之后,我们就可以将每一个字母放入字典中,如果有重复的单词就让它的值加1。完成后我们将这个字典变成列表list(dic.items())。
接着我们就把这个字典转换成新的列表,逆序排序,然后我们用循环输出前十个出现频率最高的单词就可以了。
学了这么多我们来练习一下吧~
try:
"代码块"
except ExceptionName:
"捕获指定类型的异常,执行此代码块"
except Exception:
"捕获异常,执行此代码块"
说明:
一个 try 语句可能有多个 except 子句,以指定不同异常的处理程序
except 后面可以是一个类型异常类型,也可以是多个异常类型,使用()括起来。
except 后面不接异常类型,会捕获所有异常。
也可以使用 as 给异常类型起别名,方便在异常处理代码块中调用。
try...except...可以是嵌套结构
那么我们来做一个实例:
尝试执行一些代码, 如果出现ZeroDivisionError,那么执行这里的代码:
try:
# 尝试执行一些代码
x = 1 / 0
except ZeroDivisionError as e:
# 如果出现ZeroDivisionError,那么执行这里的代码
print("捕获到一个异常:", e)
finally:
# 无论是否出现异常,这里的代码总是会被执行
print("这是finally块")
第二个:
在一段代码中,如果执行之后发现是输出ValueError那么就说明这个代码有异常,如果有其他的异常,那么我们需要输出其他异常情况:
try:
# 尝试执行一些代码
x = int('non_numeric_string')
except ValueError as e:
# 如果出现ValueError,那么执行这里的代码
print("捕获到一个异常:", e)
except Exception as e:
# 如果出现任何其他类型的异常,那么执行这里的代码
print("捕获到一个异常:", e)
finally:
# 无论是否出现异常,这里的代码总是会被执行
print("这是finally块")
在这个例子中,程序会检查变量x
的值,如果x
大于0,它会打印"x是正数"。如果x
等于0,它会打印"x是零"。如果x
小于0,它会打印"x是负数"。
x = 10
if x > 0:
print("x是正数")
elif x == 0:
print("x是零")
else:
print("x是负数")
在这个例子中,程序会进入一个无限循环(while True),要求用户输入一个数字。然后,使用if语句检查输入的数字是否为正整数。如果是正整数,将计数值增加该数字,并打印当前的计数值。然后,使用break语句跳出while循环。如果输入的数字是零,程序会打印一条消息并退出。如果输入的数字不是正整数,程序会打印一条错误消息并提示用户重新输入。
# 初始化变量
count = 0
# while循环嵌套在if语句中
while True:
# 输入一个数字
number = int(input("请输入一个数字: "))
# 检查输入是否为正整数
if number > 0:
count += number
print("当前计数值为:", count)
break # 跳出while循环
elif number == 0:
print("输入为零,结束。")
break # 跳出while循环
else:
print("输入无效,请输入正整数。")
练习这里就不过多讲解代码如何生成的了,都是一些基础的操作,各位可以多多练习,自己尝试做出来每一个代码~