打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
刻意练习3
编程没有唯一解,代码答案不唯一。
主要是让大家多写代码多练习~

该文档无法直接写代码,需要在课程的编辑器中运行代码。
或者完成第7关后私聊助教领取【本地编辑器】安装包。

一、作答版本

1、知枫为了解决口味选择困难,把楼下的餐厅都整理起来了。但是很可惜,他最爱的【兰州拉面】转让给了【长沙臭豆腐】,所以需要【更改】餐厅列表的值并打印出来。

选择语言
# '肯德基'、'兰州拉面'、'椰子鸡'、'沙县小吃'、'必胜客'、'海底捞'
lunch = ['肯德基', '兰州拉面', '椰子鸡', '沙县小吃', '必胜客', '海底捞', '']

2、知枫早上上班的时候,大川让他去市场看看有没有卖包子的,有的话就帮忙买10个包子当大家的早餐,如果有看到卖西瓜的,就买一个。回公司之后,知枫用代码复现了早上这个小插曲。


3、闪光小学班上共有10个学生,本次期末考试考了语文、数学、英语共3个科目,成绩储存在一个大列表scores里,大列表中有3个小列表chinese、math、english储存了各科成绩。请打印出60分以上的成绩。

成绩已经存在列表里了:

选择语言
# scores列表里嵌套了三个科目的列表
chinese = [55, 60, 95, 90, 88, 87, 61, 59, 78, 90]
math = [66, 77, 90, 99, 58, 69, 77, 88, 82, 95]
english = [100, 98, 66, 43, 66, 47, 91, 67, 89, 59]
scores = [chinese, math, english]

4、知枫想设计出一个猜数字的程序,要求是使用随机函数随机生成一个1到10以内的数字,然后再来猜测它,如果猜的结果比生成的数字大,系统提示“猜大了!”,如果猜的结果比生成的数字小,系统提示“猜小了!”,否则提示“猜对了”,最后猜对的时候系统反馈猜测的总次数。

提示:随机函数需要使用random模块,使用方法如下

选择语言
# 生成1到10之间的随机数
import random
target = random.randint(1,10)

5、闪光图书馆新进了一批图书,想分一部分比较多的书籍给闪光小学,请完成以下两个任务:

1.筛选出图书本数大于5的书籍,并把书名打印出来。

2.将数量大于5的书籍的数量改为“分配”;数量小于等于5的书籍的数量改为“自留”

书籍已经存在字典中了:

Python
# 所有的书和数量都以字典的形式储存
books_dic = {'82年生的金智英': 3, '了不起的盖茨比': 6,
'乌合之众': 5, '活着': 8, '小王子': 6, '设计的意义': 2}

6、知枫要尝试编写一个程序,使其可以在终端打印出一个九九乘法表

提示:从上往下看,每一行最大的列值就是行值,如2X2=4与3x3=9,第2行只有2列,第3行只有3列。单独一行来看,列数是逐渐增加的,直到跟行数一致就换列,那么我们可以使用for循环结合range()来实行逐渐增加列数的操作。从整体来看,行数也是逐渐增加的,直到9为止,那么我们同样也开始用for循环来实现。

也就是说,我们可以使用一个for循环嵌套for循环来实现功能。外层和内层的循环分别用来管理行的输出和列的输出。





但是为了更美观,我们还需要控制式子的间隔以及上下的换行、输出。

print('字符串',end='\t')可以在字符串后面保持间隔的一致(原意是添加一个制表符,即是tab)。

print()函数会默认换行,可以单独使用,用于换行,让结果更美观。


7、计算出闪光小学一年1班各同学的总分,和班级的各科平均分。

各同学成绩存在字典中:

选择语言
# 分数以字典嵌套列表存储,列表中依次为语文、数学、英语的成绩
scores = {'小李': [95, 98, 90], '小花': [96, 90, 94],
'小华': [85, 80, 90], '小胖': [87, 94, 89],
'小红': [79, 85, 90]}

8、知枫想给家里的门设置一个密码锁,输入198764就可以成功解锁,一共只有5次解锁机会,每输错一次就会提示你已经只剩下几次机会了,直到5次机会全部用完,例如





要求:用while和for循环两个知识点分别为小红家的密码锁设置一个程序。


9、不知道你有没有过用镜子看书的体验,是不是发现字的顺序和我们正常看书的顺序是不同的,那我们是不是可以通过代码实现镜子里面文字顺序的反转,变成正常看书的顺序呢?请思考下,如何实现吧。

提示:对于字符串的反转,可以使用len()函数来求得字符串的长度,再根据字符串长度,采用循环去倒序遍历;也可以使用反向切片来实现


二、答案版本

1、知枫为了解决口味选择困难,把楼下的餐厅都整理起来了。但是很可惜,他最爱的【兰州拉面】转让给了【长沙臭豆腐】,所以需要【更改】餐厅列表的值并打印出来。

答案:

Python
# 新建一个列表lunch,里面包含菜式:
# '肯德基'、'兰州拉面'、'椰子鸡'、'沙县小吃'、'必胜客'、'海底捞'
lunch = ['肯德基', '兰州拉面', '椰子鸡', '沙县小吃', '必胜客', '海底捞', '']
# 打印更改前的列表
print(lunch)
# 通过偏移量更改店铺名称
lunch[1] = '长沙臭豆腐'
# 打印更改后的列表
print(lunch)

2、知枫早上上班的时候,大川让他去市场看看有没有卖包子的,有的话就帮忙买10个包子当大家的早餐,如果有看到卖西瓜的,就买一个。回公司之后,知枫用代码复现了早上这个小插曲。

答案:

选择语言
# 三引号打印背景
print('''大川让我上班的时候,看看有没有卖包子的。
有的话,就买10个包子当大家的早餐,
如果看到卖西瓜的,就买1个。''')
# 提示信息:于是我来市场,看看有没有
q_1 = input('于是我来市场,看看有没有卖包子的?')
# 如果 q_1 的值是否为'有' ,则直接进入当前条件
if q_1 == '有':
# 输入提示文字:那我再去看看有没有卖西瓜的
q_2 = input('那我再去看看有没有卖西瓜的')
# 如果 q_2 的值是否为'有',是则打印'有西瓜,所以高高兴兴买了1个包子'
if q_2 == '有':
print('有西瓜,所以高高兴兴买了1个包子')
# q_2结果非'有',则打印'没有西瓜,所以买了10个包子
else:
print('没有西瓜,所以买了10个包子')
# 如果 q_1不是'有',打印'真轻松!什么都不用买“
else:
print('真轻松!什么都不用买')

3、闪光小学班上共有10个学生,本次期末考试考了语文、数学、英语共3个科目,成绩储存在一个大列表scores里,大列表中有3个小列表chinese、math、english储存了各科成绩。请打印出60分以上的成绩。

成绩已经存在列表里了:

选择语言
# scores列表里嵌套了三个科目的列表
chinese = [55, 60, 95, 90, 88, 87, 61, 59, 78, 90]
math = [66, 77, 90, 99, 58, 69, 77, 88, 82, 95]
english = [100, 98, 66, 43, 66, 47, 91, 67, 89, 59]
scores = [chinese, math, english]

答案:

Python
chinese = [55, 60, 95, 90, 88, 87, 61, 59, 78, 90]
math = [66, 77, 90, 99, 58, 69, 77, 88, 82, 95]
english = [100, 98, 66, 43, 66, 47, 91, 67, 89, 59]
# scores列表里嵌套了三个科目的列表
scores = [chinese, math, english]

# 依次从scores列表里取出chineses、math、english列表
for score in scores:
# 从取出的小列表里取出分数跟60进行比较
for s in score:
# 分数大于等于60分的就打印出来
if s >= 60:
print(s)

4、知枫想设计出一个猜数字的程序,要求是使用随机函数随机生成一个1到10以内的数字,然后再来猜测它,如果猜的结果比生成的数字大,系统提示“猜大了!”,如果猜的结果比生成的数字小,系统提示“猜小了!”,否则提示“猜对了”,最后猜对的时候系统反馈猜测的总次数。

提示:随机函数需要使用random模块,使用方法如下

选择语言
import random
target = random.randint(1,10)
#使用上面的代码可以生成1到10之间的随机数

答案:

选择语言
# 导入random模块
import random
# 生成随机数来猜测
target = random.randint(1,10)
# count用来统计猜测的总次数
count = 0
while True:
guess = int(input('请输入一个猜测的整数:'))
# 猜测一次count加一次
count = 1
# 猜大的情况
if guess > target:
print('猜大了!')
# 猜小的情况
elif guess < target:
print('猜小了!')
# 猜对的情况
else:
print('猜对了!')
# 猜对之后跳出循环
break
# 打印猜测的次数
print('猜测次数为:', count)

5、闪光图书馆新进了一批图书,想分一部分比较多的书籍给闪光小学,请完成以下两个任务:

1.筛选出图书本数大于5的书籍,并把书名打印出来。

2.将数量大于5的书籍的数量改为“分配”;数量小于等于5的书籍的数量改为“自留”

书籍已经存在字典中了:

选择语言
# 所有的书和数量都以字典的形式储存
books_dic = {'82年生的金智英': 3, '了不起的盖茨比': 6,
'乌合之众': 5, '活着': 8, '小王子': 6, '设计的意义': 2}

答案:

选择语言
# 所有的书和数量都以字典的形式储存
books_dic = {'82年生的金智英': 3, '了不起的盖茨比': 6,
'乌合之众': 5, '活着': 8, '小王子': 6, '设计的意义': 2}
# for循环遍历books_dic字典
for book in books_dic:
# 对比字典的值,大于5的就打印书名
if books_dic[book] > 5:
print(book)
# 修改该书值为“分配”
books_dic[book] = '分配'
# 数量小于等于5的书,修改值为“自留”
else:
books_dic[book] = '自留'

6、知枫要尝试编写一个程序,使其可以在终端打印出一个九九乘法表

提示:从上往下看,每一行最大的列值就是行值,如2X2=4与3x3=9,第2行只有2列,第3行只有3列。单独一行来看,列数是逐渐增加的,直到跟行数一致就换列,那么我们可以使用for循环结合range()来实行逐渐增加列数的操作。从整体来看,行数也是逐渐增加的,直到9为止,那么我们同样也开始用for循环来实现。

也就是说,我们可以使用一个for循环嵌套for循环来实现功能。外层和内层的循环分别用来管理行的输出和列的输出。





但是为了更美观,我们还需要控制式子的间隔以及上下的换行、输出。

print('字符串',end='\t')可以在字符串后面保持间隔的一致(原意是添加一个制表符,即是tab)。

print()函数会默认换行,可以单独使用,用于换行,让结果更美观。

答案:

选择语言
# 用来管理每一行内容的输出,这里的i表示乘法x*y=z中的y
for i in range(1, 10):
# 用来管理每一列内容的输出,表这里的j表示乘法x*y=z中x
for j in range(1, i 1):
# 打印出x*y=z,并且使用end='\t'表示制表符
print('{}*{}={}'.format(j, i, i*j), end='\t')
# 每一行的内容打印完之后换行
print()

7、计算出闪光小学一年1班各同学的总分,和班级的各科平均分。

各同学成绩存在字典中:

选择语言
# 分数以字典嵌套列表存储,列表中依次为语文、数学、英语的成绩
scores = {'小李': [95, 98, 90], '小花': [96, 90, 94],
'小华': [85, 80, 90], '小胖': [87, 94, 89],
'小红': [79, 85, 90]}

答案:

选择语言
# 分数以字典嵌套列表存储,列表中依次为语文、数学、英语的成绩
scores = {'小李': [95, 98, 90], '小花': [96, 90, 94],
'小华': [85, 80, 90], '小胖': [87, 94, 89],
'小红': [79, 85, 90]}
# 遍历字典取出每个人的名字
for name in scores:
# 初始化个人总分变量scores_sum=0
scores_sum = 0
# 遍历每个人自己的三科成绩并累加
for score in scores[name]:
scores_sum = score
# 打印每个人的总分
print('{}的总分为:{}'.format(name, scores_sum))

# 初始化班级人数计数器
count = 0
# 初始化各科成绩
chinese_sum = 0
math_sum = 0
english_sum = 0
# 遍历每个人的成绩并分别累加
for name in scores:
chinese_sum = scores[name][0]
math_sum = scores[name][1]
english_sum = scores[name][2]
# 每遍历一个人,人数计数器 1
count = 1
# 打印班级平均分,平均分为总分/人数
print('语文的平均分为{}分\n数学的平均分为{}分\n英语的平均分为{}分'.format(
chinese_sum/count, math_sum/count, english_sum/count))

8、知枫想给家里的门设置一个密码锁,输入198764就可以成功解锁,一共只有5次解锁机会,每输错一次就会提示你已经只剩下几次机会了,直到5次机会全部用完,例如





要求:用while和for循环两个知识点分别为小红家的密码锁设置一个程序。

while循环
选择语言
# 获取密码信息
a = input('请输入密码结束循环,你有5次机会:')
# 自定义5次回答机会
n = 5
while True:
# 如果密码正确,则输出“密码正确”,退出循环
if a == '198764':
print('密码正确')
break
# 如果密码不正确
else:
# 回答机会减1
n = n - 1
# 重新获取密码,次数减1
print('请输入密码结束循环,你有%d次机会:' % n, end='')
a = input()
# 5次之后,跳出循环
if n == 1 and a != '198764':
print('5次循环你都错过了,else语句生效了')
break
for循环
选择语言
# 获取密码信息
a = input('请输入密码结束循环,你有5次机会:')
# 设定5次循环
for i in range(5):
# 如果密码正确,则输出“密码正确”,退出循环
if a == '198764':
print('密码正确')
break
# 如果密码不正确
else:
# 重新获取密码
print('请输入密码结束循环,你有%d次机会:' % (4-i), end='')
a = input()
# 5次机会用完
if (4-i) == 1 and a != '198764':
print('5次循环你都错过了,else语句生效了')
break

9、不知道你有没有过用镜子看书的体验,是不是发现字的顺序和我们正常看书的顺序是不同的,那我们是不是可以通过代码实现镜子里面文字顺序的反转,变成正常看书的顺序呢?请思考下,如何实现吧。

提示:对于字符串的反转,可以使用len()函数来求得字符串的长度,再根据字符串长度,采用循环去倒序遍历;也可以使用反向切片来实现

答案:

选择语言
# 创建一个空字符串
newstring = ''
# input语句获取要进行反转的字符串内容
a = input('输入字符串:')
# 字符串求长度,用于确定for循环次数
n = len(a)
for i in range(n):
# 字符串拼接
newstring = newstring a[n-1-i]
print(newstring)
链接
文本 链接
查找 切换到替换 收起替换功能
替换为
查找 替换 全部替换
  • 复制图片

  • 剪切图片

  • 下载图片

×
无搜索结果
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
小学弟敲了一个晚上整理的Python初学者习题,我发出来给你们学习
[一定要掌握的基础语法]测试题答案及解析
关于Python3.9,你不可不知的4个新特性
python习题(1
python——函数
Python入门基础知识
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服