本章主要介绍了在 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("输入数值无法构成三角形")
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
或
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")
# 测试数据:
# 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 个数时,末尾处的“,” 没有删除
知识点:
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)