第11章 计算思维

学习要点

编写较为复杂的Python 程序。

对标内容

  1. 掌握 Python编程的流程控制以及数据类型,会使用这些相关语句进行编程,会使用循环、分支等语句完成较为复杂的Python 程序,能够解决较为复杂的问题。
  2. 能编写二分支、多分支结构语句程序,有循环、中断及条件语句的程序。

情景导入

学习了这么久,大家是否有这样的一种感觉∶看到书上的编程题目都会,但是合起书来,面对一道新的题目好像又不会了。这说明你只是知道了这些知识,但还不会用这些知识进行编程,这也是我们学习编程的一种正常情况。那如何做才能改变这种情况呢?那就开始尝试自己编写每一个程序,并目分析每次错误的原因,周而复始,你一定能做到得心应手。

其他方法的补充

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)
Copyright © all right reserved,powered by Gitbook该文件修订时间: 2023-07-23 15:38:01