前言
本章主要介绍了在 Python 中对顺序结构、选择结构和循环结构的语句描述,并对列表解析和生成器表达式作简要介绍。
程序 = 算法 + 数据结构
而无论多么复杂的算法,都可以使用上述的三种基本控制中的一种或几种组成。
BTW , 这一章的作业有点长,所以打算分两次上传(实际是因为,我最近摆烂了)。
正文
题目一
- 题目:编写程序读取三角形的三条边长,如果输入合法(三角形任意两边之和大于第三边),则计算它的周长和面积,如果输入是非法的,则输出错误信息。
知识点:
eval()函数:
eval(expression,globals=None,local=None)
作用:将输入的字符串当成有效的 Python 表达式来求值
- 代码实现
import math a,b,c = eval(input("请输入三角形三条边长为:"))#输入时使用英文字符 if a+b>c and a+c>b and b+c>a: cir = a+b+c p = (cir)/2 s = math.sqrt(p*(p-a)*(p-b)*(p-c))#海伦公式 print(cir,s) else: print("输入数值无法构成三角形")
题目二
文章来源地址https://www.toymoban.com/news/detail-469937.html
- 题目:编写一个程序请用户输入美元与人民币之间的国币汇率,而后提示用户输入“0”表示将美元转换为人民币,输入“1”表示将人民币准换为美元,并将用户输入的美元数或人民币数分别转换为人民币或美元,若输入其他数值,则提示输入错误。
- 以下为运行示例:
Enter the exchange rate from dollars to RMB:6.81
Enter 0 to convert dollers to RMB and 1 vice veras:0
Enter the doller amount:100
$ 100.0 is 681.0 yuan
文章来源:https://www.toymoban.com/news/detail-469937.html
或
Enter the exchange rate from dollars to RMB:6.81
Enter 0 to convert dollers to RMB and 1 vice veras:1
Enter the doller amount:1000
1000 yuan is $ 156.84
或
Enter the exchange rate from dollars to RMB:6.81
Enter 0 to convert dollers to RMB and 1 vice veras:5
Incorrect input
- 代码实现
Exrate = float(input("Enter the exchange rate from dollars to RMB:")) Choose = int(input("Enter 0 to convert dollers to RMB and 1 vice veras:")) if Choose == 0: amount = float(input("Enter the doller amount:")) reason = amount*Exrate print(f"$ {amount} is {reason} yuan") elif Choose == 1: amount = float(input("Enter the doller amount:")) reason = amount/Exrate print(f"{reason} yuan is $ {reason}") else: print("Incorrect input")
题目三
- 题目:从键盘输入整数 n (1—9之间),对于 1—100 之间的整数删除包含 n 并且能被 n 整除的数,例如如果 n 为 6 ,16 这样的数及是6的倍数的如 12 和 18 这样的数,输出所有满足条件的数,要求每满 10 个数换行(最后一行可能不满 10 个数)
# 测试数据:
# 6
# 屏幕输出:
# 1,2,3,4,5,7,8,9,10,11
# 13,14,15,17,19,20,21,22,23,25
# 27,28,29,31,32,33,34,35,37,38
# 39,40,41,43,44,45,47,49,50,51
# 52,53,55,57,58,59,70,71,73,74
# 75,77,79,80,81,82,83,85,87,88
# 89,91,92,93,94,95,97,98,99,100
知识点:
strip() 函数:
str.strip([chars])
用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
注意:该方法只能删除开头或是结尾的字符,不能删除中间的字符
# 一开始在做这道题时,发现换行后每行的末尾字符保留了“,”,所以想到了可不可 以使用这个函数去除末尾的“,”,不过最后也没用上
代码实现
n = int(input("输入整数 n (1-9之间):"))
j = 1
for i in range(1,101):
if i % n == 0 : #删除整除 n 的数
continue
if i % 10 == n : #删除个位为 n 的数
continue
if i // 10 == n: #删除十位为 n 的数
continue
elif i % n != 0: #每十个数换行并删除最后一位的','
if j % 10 != 0 :
print(i,end=',')
if j % 10 == 0 :
print(i)
print("\n")
j += 1
- 一点碎碎念:
做这道题时,调式了很多次数据总是不对,最后一行一行的打断点才发现,有一行代码 中的 i 写成了 n , 难崩……
此外,这个答案还有一个问题没有解决,就是当最后一行不满 10 个数时,末尾处的“,” 没有删除
题目四
- 题目:求解 1~4 这4个数字可以组成多少个无重复的三位数,并从小到大的顺序输出这些三位数。
-
知识点:
Python itertools 使用详解:
http://t.csdn.cn/YUy3r
product(*iterables,repeat=1)
作用:用来生成 *iterables 各元素之间的不同组合
但是各个组合中的元素顺序是按照参数的先后顺序固定的
-
代码实现
#解法一 #这样做的时间复杂度似乎有点高 import itertools for i, j, k, l in itertools.product(range(1,5), range(1,5), range(1,5), range(1,5)): print(f"{i}{j}{k}{l}",end=' ')
#解法二 #似乎这种方法的时间复杂度也没好多少 import itertools for i, j in itertools.product(range(1,5), range(1,5)): if j == i : continue for k in range(1,5): if k in [j, i]: continue for l in range(1,5): if l in [k, j, i]: continue print (f"{i}{j}{k}{l}",end=' ')
题目五
- 题目:
输出所有满足以下条件的 3 位整数:该数是素数,该数的个位数字与十位数字之和被 10 除所得余数恰好是该数的百位数字。
例如,293 是素数并且(3+9)被 10 除的余数是 2 ,因此 293 是满足条件的 3 位素数。
代码实现
for i, j, k in itertools.product(range(1,10),range(1,10),range(1,10,2)):
a = 100*i + 10*j + k #所有 3 位整数
for i2 in range (2,math.ceil(math.sqrt(a)) + 1):
if a % i2 == 0 : #素数判断
break
if (j+k)%10 == i: #判断数的个位数字与十位数字之和被 10 除所得余数恰好是该数的百位数字
break
else:
print(a,end = ' ')
总结
总而言之,这一章很重要……感觉考试必考……
写注释是一个好文明,边看边赞边收藏也是一个好文明 (Q_Q)
到了这里,关于《Python 程序设计》张莉主编 第五章:程序控制结构 课后习题答案(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!