第二章 控制流 课后练习题

目录

1. 使用尽可能多的方法实现list去重

2. 成绩等级判断

3. 实现数学中多项式求和公式的打印

4. 统计名字列表中,各名字的首字母在名字列表中出现的次数

5. 输入三个数,判断是否能构成三角形。能构成三角形三边关系:

6. 实现字典的fromkeys方法

7. 键盘读入一字符串,逆序输出

8. 读入一个整数n,输出n的阶乘

9. 打印1/2, 1/3, 1/4,….1/10

10. 写一个函数实现一个数学公式

11. 输入数字a,n,如a,4,则打印a+aa+aaa+aaaa之和

12. 求100个随机数之和,随机数要求为0—9的整数

13.要求在屏幕上分别显求1到100之间奇数之和与偶数之和

14. 输入10个数,并显示最大的数与最小的数

15.给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

16.求1000以内的所有水仙花数

17.编程求s=1!+2!+3!+…..+n!

18.钞票换硬币:把一元钞票换成一分、二分、五分硬币(每种至少一枚),有多种换法,分别有哪些?

19.自己实现在一句话中查找某个单词的算法,存在返回索引号,否则返回False

20.读入一个十进制整数,实现十进制转二进制算法,将其转成二进制数

21.5个字母'a','e','i','o','u',求5个字母组成的不同字符串组合的个数


1. 使用尽可能多的方法实现list去重

l=[1,2,3,3,2,5,4,2,1,1,4]
# 方法1:利用set
l1 =  set(l)
print(l1)

# 方法2:利用另一个列表
result = []
for i in l:
	if i not in result:
		result.append(i)

print(result)

# 方法3:利用字典
d={}
for k in l:
	d[k]=""

print(list(d.keys()))

# 方法4:利用list的count()和remove()函数
l2=[1,2,3,3,2,5,4,2,1,1,4]
for i in l2:
	if l2.count(i) > 1: # 如果i在list中大于1个
		for j in range(l2.count(i)-1): # 从list中移除l2.count(i)-1次
			l2.remove(i)

print(l2)
# 方法4在对以下列表去重时有bug:l=[1,2,3,3,4,2,5,4,33,1,6,8,4],去重后为:[2, 3, 2, 5, 33, 1, 6, 8, 4]
# 方法优化如下:
l=[1,2,3,3,4,2,5,4,33,1,6,8,4]
l2=l[:]
for i in l2: # 如此可以遍历到整个待去重列表,保证不会有去重遗漏的情况
	print(i)
	if l.count(i) > 1: 
		for j in range(l.count(i)-1):  # 此时,这句可以不要,直接l.remove(i)
			l.remove(i)

2. 成绩等级判断

利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下 的用C表示
score = input("请输入学生成绩:")
if not score.isdigit():
	print("输入的成绩不是整数")
new_score = int(score)

if new_score < 60:
	print("C")
elif new_score >=60 and new_score <=89:
	print("B")
else:
	print("A")

3. 实现数学中多项式求和公式的打印

比如:a6x^6 + a5x^5 + a4x^4 + a3x^3 + a2x^2 + a1x^1 + a0
n = int(input("请输入n值(n为打印的n项式公式):"))
s = ""
while n >= 0:
	if n == 0:
		s += 'a0'
	else:
		j = str(n)
		s += 'a'+j+'x'+'^'+j+'+'
	n -= 1

print(s)

# 方法2
m = int(input("请输入n值(n为打印的n项式公式):"))
s = ""
for i in range(m,-1,-1):
	if i >= 1:
		s += ("a" + str(i) + "x" + "^" + str(i) + "+")
	else:
		s +=("a" + str(i))

print(s)

4. 统计名字列表中,各名字的首字母在名字列表中出现的次数

name_list=['Amy','Alice','Bob','Max','Mick','Joe','jay','JJ','jack']
d={}
# 不区分字母大小写
for i in name_list:
	j=i.upper() #区分大小写时,去掉upper()操作
	d[j[0]]=0 # 存名字首字母,字典不允许有相同的key

for i in name_list:
	for j in i.upper():
		if j in d.keys():
			d[j] += 1

print(d)

# 不区分字母大小写,方法2:不用字典

result = []
for i in name_list:
	j=i.upper()
	if j[0] not in result:
		result.append(j[0]) # 存名字首字母,并避免重复

for i in result:
	count = 0
	for j in name_list:
		for k in j.upper():
			if k == i:
				count += 1
	print("%s:%d" %(i,count))

d={}
# 区分字母大小写
for i in name_list:
	d[i[0]]=0 # 存名字首字母,字典不允许有相同的key

for i in name_list:
	for j in i:
		if j in d.keys():
			d[j] += 1

print(d)

5. 输入三个数,判断是否能构成三角形。能构成三角形三边关系:

三边都大于零,两边之和大于第三边,两边之差小于第三边  
s = input("请输入3个数字,用','隔开:")
s = s.split(',')
a,b,c = int(s[0]),int(s[1]),int(s[2])

if a > 0 and b > 0 and c > 0:
	if a+b>c and b+c>a and a+c>b:
		if abs(a-b)<c and abs(b-c)<a and abs(c-a)<b:
			print("%d %d %d 能构成三角形" %(a,b,c))
		else:
			print("两边之差不小于第三边")
	else:
		print("两边之和不大于第三边")
else:
	print("三边不都大于0")

  

6. 实现字典的fromkeys方法

例如:
seq = ('name', 'age', 'sex')
dict = dict.fromkeys(seq, 10)
print ("New Dictionary : %s" % str(dict))
结果:New Dictionary : {'age': 10, 'name': 10, 'sex': 10}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值