第11章 计算思维
学习要点
编写较为复杂的Python 程序。
对标内容
- 掌握 Python编程的流程控制以及数据类型,会使用这些相关语句进行编程,会使用循环、分支等语句完成较为复杂的Python 程序,能够解决较为复杂的问题。
- 能编写二分支、多分支结构语句程序,有循环、中断及条件语句的程序。
情景导入
学习了这么久,大家是否有这样的一种感觉∶看到书上的编程题目都会,但是合起书来,面对一道新的题目好像又不会了。这说明你只是知道了这些知识,但还不会用这些知识进行编程,这也是我们学习编程的一种正常情况。那如何做才能改变这种情况呢?那就开始尝试自己编写每一个程序,并目分析每次错误的原因,周而复始,你一定能做到得心应手。
其他方法的补充
round()
描述 round() 方法返回浮点数 x 的四舍五入值,准确的说保留值将保留到离上一位更近的一端(四舍六入)。精度要求高的,不建议使用该函数。
实例
print ("round(70.23456) : ", round(70.23456))
print ("round(56.659,1) : ", round(56.659,1))
print ("round(80.264, 2) : ", round(80.264, 2))
print ("round(100.000056, 3) : ", round(100.000056, 3))
print ("round(-100.000056, 3) : ", round(-100.000056, 3))
以上实例运行后输出结果为:
round(70.23456) : 70
round(56.659,1) : 56.7
round(80.264, 2) : 80.26
round(100.000056, 3) : 100.0
round(-100.000056, 3) : -100.0
计算思维
知识点详解
从二级考试开始,计算思维基本以编程题的方式来考核,所以编程题有一定的难度。但是,编程题中所有涉及的知识点都是前面我们已经罗列过的,这里重点考核的是解决问题的能力和程序设计的能力。
同一道题,解决方案一般也有多种,建议同学们采用代码较少、实现起来比较简单的方案。比如下面这道题,如果采用类型转换或者一一比较等方法也可以完成,但是其代码量均比较大,程序的流程等都比较复杂;如果采用遍历判断的方法,会简单很多,也易于理解。
剔除数字
要求如下∶
(1)编写一段程序,程序运行后,需要用户随意输入一段包含数字和字母的字符串。 (2)程序会自动删除字符串中的数字,然后输出一串没有数字的字符串(纯字母的字符串)或者列表(没有数字)。 (3)要求输出的非数字的字符顺序不能变。
解题思路∶
(1)用户输入的是一段不确定的文字,里面包含数字、字母等内容,并且最后输出的非数字的字符顺序也不能变,由此我们首先想到的是使用列表,因为列表是可变序列。 (2)自动删除字符串里面的数字,那么首先就要判断字符是否是数字,这里我们想到可以使用 if...in...语句来进行判断。 (3)剔除某一个值有多种方法,但是由于并不知道这些元素所在的索引位置,我们可以用remove();除此之外还有一种方法,将需要的元素放到一起,不加入不需要的元素。
根据以上思路,我们可以编写出如下程序。
a=input("输入字符串") #接受用户输入
b=[] #建立空列表,将需要的元素放进去
for i in a: #遍历字符串a
if inot in "0123456789": #判断取出的字符是否为数字
b.append(i) #如果不是,则把该字符加入b列表
print(b) #输出最后的结果
模拟考题
考题 1 编程题
数字转汉字∶用户输入一个1~9(包含1和9)的任一数字,程序输出对应的汉字。如输入2,程序输出"二"。可重复查询。
题目解析∶该题目的难点在于将数字1~9和中文数字一到九进行一一绑定,这里可以用的方法有3种∶列表、元组、字典。
参考程序1∶使用列表
d=['一','二','三','四','五','六','七','八','九']
while True:
a=int(input('输入数字∶'))
print(dd[a-1])
参考程序2∶使用元组
dd=('一','二','三','四','五','六','七','八','九')
while True:
a=int(input('输入数字∶'))
print(dd[a-1])
参考程序3∶使用字典
dd={'1'∶'一','2'∶'二','3'∶'三','4'∶'四','5'∶'五','6'∶'六','7':'七','8'∶'八','9'∶'九'}
while True:
a=input('输入数字∶')
print(dd[a])
考题2 编程题
求质数∶提示用户输入两个正整数,编程求出这两个数之间的所有质数并打印输出。显示格式为"*数是质数。"
题目解析∶该题的难点有两个。第一个是用于输入的两个数要进行比较,只有知道了范围,才可以进行筛选;第二个是质数的计算,即怎样才能确定这个数是质数。
参考程序
a = int(input("请输入开始的整数值∶"))
b= int(input("请输入结束的整数值∶"))
x=(a,b)
x1=min(x)
x2=max(x)
for n in range (x1,x2+1):
f=True
for i in range(2,n-1):
if n%i==0:
f=False
break
if f:
print(n,"是质数")
考题3 编程题
根据乘坐出租车的里程,计算应该支付的费用。
(1)程序开始运行后,输入一个数字(整数)作为里程(提示为"请输入里程,单位为千米∶"))。
(2)计算乘坐出租车应该支付的费用,保留两位小数。其计算方式如下∶3千米内收费13元;超出3千米,在15千米内,每千米收费2.3元;超出15千米,每千米收费3.45元。
题目分析∶该题目主要的难点有3个。
(1)费用的计算问题,3种不同的情况如何进行累计。
(2)保留两位小数。
(3)数据类型转换。
参考程序
miles = int(input("请输入里程,单位为千米∶")) #输入里程
fee =0 #车费初始化
if 0<miles <= 3: #3千米内
fee = 13
elif 3<miles <=15: #牛超出3千米,15千米内
fee = 13 +2.3 *(miles-3)
elif niles >15: #超出15千米
fee=13+ 2.3*(15-3)+3.45 *(miles-15)
else: # 输入负数时提示错误
print("不能为负数,请重新输入!")
fee = round(fee,2) #保留两位小数
print("应付的费用是∶",fee)