第0关
练习1-打印皮卡丘-参考
请你使用**print()函数**和**'''**将下面的皮卡丘打印出来。皮卡丘字符画可以直接复制步骤1里的。
```
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
イ● 、 ● ⊂⊃〈 /
() へ | \〈
>ー 、_ ィ │ //
/ へ / ノ<| \\
ヽ_ノ (_/ │//
7 |/
>―r ̄ ̄`ー―_
```
题目讲解
1.复制题目要求打印的“皮卡丘”(直接复制下一步中的字符画即可)
2. 用print(''' ''')打印
**注意:标点符号都要用英文**
【参考】
print('''
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
イ● 、 ● ⊂⊃〈 /
() へ | \〈
>ー 、_ ィ │ //
/ へ / ノ<| \\
ヽ_ノ (_/ │//
7 |/
>―r ̄ ̄`ー―_
''')
练习2-听见无脸男的声音-参考
题目要求:
在千寻进入魔法世界的期间,有一位“无脸男”一直跟在她的身边。一开始,千寻对无脸男的跟踪感到害怕,直到她第一次听见了无脸男对她说的话后,才理解了他,并和他成为了朋友。
【讲解】
下面是无脸男对千寻说的话,请你把这段话打印出来,并且使用**转义字符**,把无脸男说的话按照正确格式打印:
千寻你好,人们叫我'无脸男'
这个世界的人都选择无视我
只有你看到了我并和我打招呼
我感到很孤单,很孤单
你愿意和我成为朋友吗?
题目讲解
1.复制下面这段无脸男对千寻说的话:
千寻你好,人们叫我'无脸男' 这个世界的人都选择无视我 只有你看到了我并和我打招呼 我感到很孤单,很孤单 你愿意和我成为朋友吗?
2.提示:文本中有引号的地方需要用到转义字符 \' ;需要换行的地方用 \n
【参考】
print('千寻你好,人们叫我'无脸男'\n这个世界的人都选择无视我\n只有你看到了我并和我打招呼\n我感到很孤单,很孤单\n你愿意和我成为朋友吗?')
第1关
练习1-程序员的一人饮酒醉-参考
题目要求
在Python的魔法世界,最常用的数据类型有三种:字符串(str)、整数(int)和浮点数(float)。
在**数据拼接**中,为了将不同的信息进行整合,可以使用**拼接符号**。但是,如果数据非字符串类型,则无法进行拼接。
此时,我们可以使用数据转换函数**str()**,将数据转换为字符串类型后,再进行拼接。
【讲解】
请运用下方变量,使用str()函数打印两句话。
第一句话:1人我编程累碎掉的节操满地堆
第二句话:2眼是bug相随我只求今日能早归
可使用变量:
number1 = 1,number2 = 2
unit1 = '人',unit2 = '眼'
line1 = '我编程累',line2 = '是bug相随'
sentence1 = '碎掉的节操满地堆',sentence2 = '我只求今日能早归'
题目讲解
1.将非字符串型变量转换为字符串类型
2.将字符串类变量拼接在一起
【讲解】
1.使用str()函数
2.使用拼接符号** **
3.使用print()函数
【参考】
number1 = 1
number2 = 2
unit1 = '人'
unit2 = '眼'
line1 = '我编程累'
line2 = '是bug相随'
sentence1 = '碎掉的节操满地堆'
sentence2 = '我只求今日能早归'
first = str(number1) unit1 line1 sentence1
second = str(number2) unit2 line2 sentence2
print(first)
print(second)
练习2-非酋的吐槽-参考
题目要求
在**数据拼接**中,为了将不同的信息进行整合,可以使用**拼接符号**。但是,如果数据非字符串类型,则无法进行拼接。此时,我们可以使用数据转换函数**str()**,将数据转换为字符串类型后,再进行拼接。但是有的时候,针对不同类型的数据,我们需要经历多次转换,最后才能转为字符串类型。
【讲解】
请使用**转换函数**str()、int()、float(),运用下方变量,使用数据转换及数据拼接,输出结果: 脸黑怪我咯7张蓝票一个SSR都没有
可使用变量:
slogan = '脸黑怪我咯',number = '7.8',unit = '张',sentence = '蓝票一个SSR都没有'
题目讲解
1.由于变量中与小数形式的字符串,所以需要使用转换函数将此变量转换为浮点型
2.转换后使用int()函数取整
3.由于数据拼接需要变量为字符串形式,所以需要将变量转化为字符串类型
4.最后数据拼接,得出结果
【讲解】
- 使用float()函数将小数形式的字符串变量转换
- 使用int()函数取整
- 使用str()函数将数据转换为字符串形式
- 使用** **进行数据拼接
【参考】
slogan = '脸黑怪我咯'
number = '7.8'
unit = '张'
sentence = '蓝票一个SSR都没有'
word = slogan str(int(float(number))) sentence
print(word)
第2关
练习1-偷回宝石-参考
题目要求
在灭霸打了一个响指,宇宙一半生物都灰飞烟灭后,剩下的复仇者联盟成员们在巨大的创伤之中,依旧没有放弃反击灭霸的机会,他们决定利用最后一次行动机会,去把灭霸手里的宝石偷回来。最终,他们因为实力相差太大,1颗宝石都没有偷回来。
【讲解】
请你写出一段代码:
如果偷回的宝石数是4颗及以上,输出结果“获得了打败灭霸的力量,反杀稳了”
如果偷回的宝石数是1-3颗,输出结果“可以全员出动,殊死一搏”
如果偷回的宝石数是0颗,输出结果“没办法了,只能尝试呼叫惊奇队长”
注意:标点符号都为英文格式
题目讲解
1.为变量【赋值】,写出“一个宝石都没偷回来”的情况
2.用【if】写第一个条件:如果偷回的宝石数是4颗及以上,输出结果:获得了打败灭霸的力量,反杀稳了
3.用【elif】写第二个条件:如果偷回的宝石数是1-3颗,输出结果:可以全员出动,殊死一搏
4.用【else】写第三个条件:如果偷回的宝石数是0颗,输出结果:没办法了,只能尝试呼叫惊奇队长
【参考】
#以下为答案示例(stonenumber=0/1/2/3/4/5/6都是对的)
stonenumber=5
#偷回宝石数量赋值
if stonenumber >= 4:
#条件:如果你拥有的宝石数量大于等于4个
print('获取打败灭霸的力量')
#结果:显示‘获取打败灭霸的力量’的结果
elif 1 < stonenumber <= 3:
#条件:如果想让宝石数量停留在4至5个
print('可以全员出动,殊死一搏')
#结果:显示‘可以全员出动,殊死一搏’的结果
else:
#条件:当赋值不满足if和elif条件时,执行else下的命令,宝石数量在3个以下
print('没办法了,只能尝试呼叫惊奇队长')
#结果:显示‘没办法了,只能尝试呼叫惊奇队长’的结果
练习2-美国队长的工资-参考
题目要求
复仇者联盟的成员也是有工资的,然而,由于美国队长一直被冰封在北极,错过了多次调薪机会,所以美国队长的工资一直是每月80美元。光荣挺进史塔克穷人榜前三名,并获封“美元队长”称号。
【讲解】
请你写出一段代码,判断美国队长的工资水平,代码需要满足如下条件:
如果月工资小于等于500美元,显示“欢迎进入史塔克穷人帮前三名”
如果月工资在100-500美元之间,显示“请找弗瑞队长加薪”
如果月工资小于等于100美元,显示“恭喜您荣获“美元队长”称号!”
如果月工资在500-1000美元之间(含1000美元),打印“祝贺您至少可以温饱了。”
其他情况下,如果工资大于1000美元,打印“经济危机都难不倒您!”
如果工资在1000-20000美元(含20000美元)之间,打印“您快比钢铁侠有钱了!”
如果月工资大于20000美元,打印“您是不是来自于瓦坎达国?”
不管赋值改变后输出结果如何,都需固定打印“程序结束”
题目讲解
1.根据题目,我们知道这里涉及嵌套条件,所以可以用扒洋葱法梳理代码逻辑
2.根据要求,先写最外层的**if……elif……else……**条件
3.根据题目的从属关系分析,最外层的**if**条件和**else**条件都有额外条件
4.依次在外层基础条件下添加额外条件
【讲解】
1.使用if条件嵌套
2.嵌套条件需要缩进
3.注意单双引号同时存在时的互相转换
4.通过钱数输出对应的结果
【参考】
#以下为答案示例(salary为多少都是对的)
salary = 200
#对美国队长的工资赋值
if salary <= 500:
#条件:如果工资小于等于500
print('欢迎进入史塔克穷人帮前三名')
#结果:显示‘欢迎进入史塔克穷人帮前三名’的结果
if salary <= 100:
#条件:如果工资小于等于100
print('恭喜您荣获“美元队长”称号!')
#结果:显示‘恭喜您荣获“美元队长”称号!’的结果
else:
#条件:当条件满足第4行if,不满足第8行if,执行这个命令
print('请找弗瑞队长加薪')
#结果:显示‘请找弗瑞队长加薪’的结果
elif 500 < salary <= 1000:
#条件:如果工资大于500,小于等于1000
print('祝贺您至少可以温饱了。')
#结果:显示‘祝贺您至少可以温饱了。’的结果
elif salary > 1000:
#条件:如果工资大于1000
print('经济危机都难不倒您!')
#结果:显示‘经济危机都难不倒您!’的结果
if 1000 < salary <= 20000:
#条件:如果工资大于1000,小于等于20000
print('您快比钢铁侠有钱了!')
#结果:显示‘您快比钢铁侠有钱了!’的结果
else:
#条件:满足第20行elif条件,不满足第24行if条件,则执行这个命令
print('您是不是来自于瓦坎达国?')
#结果:显示‘您是不是来自于瓦坎达国?’的结果
print('程序结束')
第3关
练习1-哈利波特的宠物-参考
题目要求
哈利·波特在对角巷购买宠物时犯难了,他不知道该给自己的猫头鹰起什么名字。现在请你帮助哈利·波特,为他的猫头鹰起一个名字。
【讲解】
请你写一段代码:
为哈利·波特的猫头鹰起个名字,并打印出结果【哈利·波特的猫头鹰叫做XX】(XX是你起的名字)。
题目讲解
1.搜集猫头鹰的名字(知识点:input(),赋值)
2.打印结果【哈利·波特的猫头鹰叫做XX】(XX是你取的名字)(知识点:数据拼接)
【参考】
name = input('为哈利·波特的猫头鹰起个名字:')
print('哈利·波特的猫头鹰叫做' name)
练习2-罗恩的减肥计划-参考
题目要求
为了三强争霸赛的舞会,罗恩想要减肥,所以他决定控制自己的饮食,少吃一点巧克力蛙。
哈利为了帮助好朋友罗恩,和他一起制定了一个饮食游戏。
游戏规则如下:
如果罗恩一天吃超过10个巧克力蛙,罗恩要给哈利100块;
如果罗恩一天吃小于等于10个的巧克力蛙,哈利就给罗恩100块。
【讲解】
请你写出一段代码:
当随机输入罗恩一天吃的巧克力蛙数量时,可以判断出这天,是罗恩给哈利钱,还是哈利给罗恩钱,并打印出来。
题目讲解
1.搜集罗恩吃的巧克力数量(知识点:input()、数据转换)
2.写第一个条件:如果罗恩一天吃超过10个巧克力蛙,罗恩要给哈利100块;
3.写第二个条件:如果罗恩一天吃小于等于10个的巧克力蛙,哈利就给罗恩100块。
(知识点:if...else...)
【参考】
number = int(input('请输入罗恩吃的巧克力数量:'))
#int将其转换为整数,之后好进行大小的比较
if number > 10:
print('罗恩要给哈利100块')
else:
print('哈利就给罗恩100块')
练习3-古灵阁金币兑换-参考
题目要求
接受了霍格沃茨来信的你,带着欣喜与好奇,跟着魔咒学老师吴枫教授,来到了巫师世界的对角巷。在这个相当于人类集市的对角巷,你立刻被魔法世界稀奇古怪的东西吸引,想掏手机刷花呗买买买。但是吴枫教授说,麻瓜(没有魔法的人)货币在魔法世界不流通,但是你可以去巫师世界的银行——古灵阁兑换货币。你立刻跟着吴枫老师跑到了古灵阁。当你进到巫师世界的银行时,就有银行的小精灵职员问好:
**注意:以下背景与题目要求相关**
小精灵:您好,欢迎古灵阁,请问您需要帮助吗?需要or不需要?
你:需要
小精灵:请问您需要什么帮助呢?1 存取款;2 货币兑换;3 咨询
你:2
小精灵:金加隆和人民币的兑换率为1:51.3,即一金加隆=51.3人民币
小精灵:请问您需要兑换多少金加隆呢?
(你说了一个数字)
小精灵:好的,我知道了,您需要兑换(你刚说的数字)金加隆。
小精灵:那么,您需要付给我(将你刚说的数字转换为金加隆的数字)人民币。
注1:如果选择不需要帮助,小精灵会礼貌地说'好的,再见。'
注2: 如果选择帮助【1 存取款】,小精灵会推荐你去存取款窗口;如果选择帮助【3 咨询】,小精灵会推荐你去咨询窗口。
题目讲解
和小精灵的对话可以被这么拆分:
1.最基础的条件判断:需要帮助;不需要帮助(if...else...)
2.在需要帮助的情况下,又分为1存取款;2货币兑换;3咨询;三种情况。(if...elif...else...)
3.在2-货币兑换的情况下,需要再提一个问题,收集答案,打印出小精灵回答的结果(input()、数据拼接、数据转换)。
【参考】
chioce = input('您好,欢迎古灵阁,请问需要帮助吗?需要or不需要?')
if chioce == '需要':
number = input('请问您需要什么帮助呢?1 存取款;2 货币兑换;3 咨询')
if number == '2':
print('金加隆和人民币的兑换率为1:51.3,即一金加隆=51.3人民币')
print('请问您需要兑换多少金加隆呢?')
money = input('请输入你需要兑换的金加隆')
print('好的,我知道了,您需要兑换' money '金加隆。')
print('那么,您需要付给我' str(int(money)*51.3) '人民币。')
elif number == '1':
print('请到存取款窗口办理')
elif number == '3':
print('请到咨询窗口咨询')
else:
print('输入错误,没有你需要的服务')
elif chioce == '不需要':
print('好的,再见')
else:
print('输入错误')
第4关
练习1-君子爱‘数’取之有道-参考
题目讲解
第一步:取出列表中的第三个元素(list1[2]),字典{'爱':'love'}
第二步:取出list1[2]中键'爱'所对应的值,即'love’(list1[2]['爱'])
【参考】
list1 = [{'嫉妒':'envy'},{'恨':'hatred'},{'爱':'love'}]
print(list1[2]['爱'])
题目讲解
第一步:取出字典中键为3对应的值(dict1[3]),即['love','hatred','envy']
第二步:再取出列表['love','hatred','envy']中的第一个元素(dict1[3][0])
【参考】
dict1 = {1:['cake','scone','puff'],2:['London','Bristol','Bath'],3:['love','hatred','envy']}
print(dict1[3][0])
题目讲解
第一步:元组和列表都是序列,提取的方式也是偏移量,如 tuple1[1]、tuple1[1:]。
第二步:先取出列表中的第二个元素中的(list2[1])
第三步:然后在第二个元素的基础上在去取值,即list2[1][1]
注:(元组和列表的取值方式是相同的)
【参考】
tuple1 = ('A','B')
list2 = [('A','B'),('C','D'),('E','F')]
print(tuple1[0])
print(list2[1][1])
第5关
练习1-数数字-参考
题目讲解
小美想知道你是怎么用 for循环 的,在下方写下你的代码吧~
小美还想知道你是怎么用 while循环 的,在下方写下你的代码吧~
【参考】
# while 循环
n = 0
while n < 7:
n = n 1
if n != 4: # 当num != 4,执行打印语句;等于4时不打印。
print(n)
# for 循环
for num in range(1,8): # 为同时能运行两个循环,新取参数 num。
if num != 4: # 当num != 4,执行打印语句;等于4时不打印。
print(num)
、
第6关
练习1-囚徒困境-参考
【讲解】
1.开启循环,两人分别选择
首先,我们需要知道两个囚徒各自的选择(input*2)。
2.循环当中,有判断和跳出
两个囚徒的选择,会有四种不同的结果。所以,可以用'if...elif...else'。
判决提示:
若两人都认罪,则两人各判10年;
若一个认罪一个抵赖,则认罪的人判1年,抵赖的人判20年;
若两人都抵赖,则各判3年——这种情况下跳出循环。
【参考】
while True:
a = input('A,你认罪吗?请回答认罪或者不认')
b = input('B,你认罪吗?请回答认罪或者不认')
while True:
a = input('A,你认罪吗?请回答认罪或者不认')
b = input('B,你认罪吗?请回答认罪或者不认')
if a == '认罪' and b == '认罪':
print('两人都得判10年,唉')
elif a == '不认' and b == '认罪':
print('A判20年,B判1年,唉')
elif a == '认罪' and b == '不认':
print('A判1年,B判20年')
else:
print('都判3年,太棒了')
break # 当满足开头提到的条件时,跳出循环。
第7关
练习1-再来一盘-参考
【讲解】
要达成目标,有两种方案:
1.while True break:
开启一个无限循环,设定跳出条件。
当得到肯定回复时,继续运行;当得到否定回复时,运行break,停止循环,退出游戏。
2.while 变量名 变量名的布尔值判断:
在开头设某变量的布尔值为True,input后开启判断变量的布尔值是否改变。
当得到肯定回复时,while True,继续运行;当得到否定回复时,while False,停止循环,退出游戏。下面,我们先用较简单的代码来体会一下这两种方案。
方案1:while True break
开启一个无限循环,设定跳出条件。
当得到肯定回复时,继续运行;当得到否定回复时,运行break,停止循环,退出游戏。
方案2:while 变量名 变量名的布尔值判断
在开头设某变量的布尔值为True,input后开启判断变量的布尔值是否改变。
当得到肯定回复时,while True,继续运行;当得到否定回复时,while False,停止循环,退出游戏。
# 方案1
while True:
a1 = input('要继续游戏吗,请输入n退出,输入其他继续:')
if a1 == 'n':
break
# 方案2
again = True
while again:
a2 = input('要继续游戏吗,请输入y继续,输入其他退出:')
if a2 == 'y':
again = True
else:
again = False
【参考】
#for循环
import time
import random
player_victory = 0
enemy_victory = 0
for i in range(1,4):
time.sleep(1.5)
print(' \n——————现在是第 %s 局——————' % i)
player_life = random.randint(100,150)
player_attack = random.randint(30,50)
enemy_life = random.randint(100,150)
enemy_attack = random.randint(30,50)
print('【玩家】\n血量:%s\n攻击:%s' % (player_life,player_attack))
print('------------------------')
time.sleep(1)
print('【敌人】\n血量:%s\n攻击:%s' % (enemy_life,enemy_attack))
print('-----------------------')
time.sleep(1)
while player_life > 0 and enemy_life > 0:
player_life = player_life - enemy_attack
enemy_life = enemy_life - player_attack
print('你发起了攻击,【玩家】剩余血量%s' % player_life)
print('敌人向你发起了攻击,【敌人】的血量剩余%s' % enemy_life)
print('-----------------------')
time.sleep(1.2)
if player_life > 0 and enemy_life <= 0:
player_victory = 1
print('敌人死翘翘了,你赢了!')
elif player_life <= 0 and enemy_life > 0:
enemy_victory = 1
print('悲催,敌人把你干掉了!')
else:
print('哎呀,你和敌人同归于尽了!')
if player_victory > enemy_victory :
time.sleep(1)
print('\n【最终结果:你赢了!】')
elif enemy_victory > player_victory:
print('\n【最终结果:你输了!】')
else:
print('\n【最终结果:平局!】')
#while 循环
import time
import random
player_victory = 0
enemy_victory = 0
while True:
for i in range(1,4):
time.sleep(1.5)
print(' \n——————现在是第 %s 局——————' % i)
player_life = random.randint(100,150)
player_attack = random.randint(30,50)
enemy_life = random.randint(100,150)
enemy_attack = random.randint(30,50)
print('【玩家】\n血量:%s\n攻击:%s' % (player_life,player_attack))
print('------------------------')
time.sleep(1)
print('【敌人】\n血量:%s\n攻击:%s' % (enemy_life,enemy_attack))
print('-----------------------')
time.sleep(1)
while player_life > 0 and enemy_life > 0:
player_life = player_life - enemy_attack
enemy_life = enemy_life - player_attack
print('你发起了攻击,【玩家】剩余血量%s' % player_life)
print('敌人向你发起了攻击,【敌人】的血量剩余%s' % enemy_life)
print('-----------------------')
time.sleep(1.2)
if player_life > 0 and enemy_life <= 0:
player_victory = 1
print('敌人死翘翘了,你赢了!')
elif player_life <= 0 and enemy_life > 0:
enemy_victory = 1
print('悲催,敌人把你干掉了!')
else:
print('哎呀,你和敌人同归于尽了!')
if player_victory > enemy_victory :
time.sleep(1)
print('\n【最终结果:你赢了!】')
elif enemy_victory > player_victory:
print('\n【最终结果:你输了!】')
else:
print('\n【最终结果:平局!】')
a1 = input('要继续游戏吗,请输入n退出,输入其他继续:')
if a1 == 'n':
break
第8关
练习1-老师我帮你-参考
1. 合并列表-1
分析问题,明确结果
我们的问题是:将两个列表合并起来,并按照从低到高的顺序排序,要得到问题的结果,我们还需要借助打印函数看看我们合并的是否正确。
思考要用到的知识&思考切入点
增加列表的内容与合并列表的含义相同,所以我们可以使用append作为解题的切入点,请你试试!
提示:假设要用已学过的知识来完成这道作业,需要用到列表的新增函数和循环。
list1 = [91, 95, 97, 99]
list2 = [92, 93, 96, 98]
for i in list2:
list1.append(i)
print(list1)
2.合并列表-2
上网搜索新知识&找到新的切入点
好了。你已经完成了第一个需求:合并列表。不过,有没有发现,这个代码还是比较冗余的。有没有更简单的方法呢?请你自己上网搜索一下
`python 合并两个列表`,看看是否有更简单的方法(提示:以字母e开头),学会后再回来继续做作业吧。
请你根据新学到的知识,简化代码。
注(如果你直接将 list2 合并到 list1 上,那就无法做到只看A组的成绩,所以,最好再建一个列表来合并两组的成绩)
list1 = [91, 95, 97, 99]
list2 = [92, 93, 96, 98]
# 把 A 组成绩赋值给一个新列表,用来存合并的成绩——这个细节要注意!
list3 =list1
list3.extend(list2)
print(list3)
3.列表排序
主动搜索,掌握新知
老师鼓励你自己去探寻解决问题的方法,上网搜索一下列表的排序方法吧,是不是发现了一个以字母s开头的方法?
list3= [91, 95, 97, 99, 92, 93, 96, 98]
list3.sort()
print(list3)
第9关
练习1-Hellokitty抽奖器-参考
练习目标:
我们会通过今天的项目练习,学习函数的封装和调用。
练习要求:
我们已经有一个hellokitty抽奖器,现在,请你把这个程序封装成一个新的函数。
运行抽奖器的代码参考
import random
import time
# 用random函数在列表中随机抽奖,列表中只有3位候选者。
luckylist = ['海绵宝宝','派大星','章鱼哥']
# random模块中有个随机选取一个元素的方法:random.choice()。
a = random.choice(luckylist) # 从3个人中随机选取1个人。
print('开奖倒计时',3)
time.sleep(1) # 调用time模块,控制打印内容出现的时间
print('开奖倒计时',2)
time.sleep(1)
print('开奖倒计时',1)
time.sleep(1)
# 使用三引号打印hellokitty的头像
image = '''
/\_)o<
| \\
| O . O|
\_____/
'''
print(image) # ……
print('恭喜' a '中奖!') # 使用print函数打印幸运者名单
import random
import time
运行代码,熟悉了解抽奖器抽奖的原理,请仔细查看注释讲解。
分析代码结构,完成函数封装
# 提示:将以下部分封装进函数
luckylist = ['海绵宝宝','派大星','章鱼哥']
a = random.choice(luckylist)
print('开奖倒计时',3)
time.sleep(1)
print('开奖倒计时',2)
time.sleep(1)
print('开奖倒计时',1)
time.sleep(1)
image = '''
/\_)o<
| \\
| O . O|
\_____/
'''
print(image)
print('恭喜' a '中奖!')
# 查看注释,运行代码。
import random
import time
抽奖程序分为两部分:
我们需要将第二部分用函数封装起来,并调用函数。提示:3个参与者即函数有3个参数。
import random
import time
# 将抽奖程序封装成函数
def choujiang(q,w,e): # 定义一个抽奖函数,带有3个参数,也就是3位候选人
luckylist = [q,w,e] # 定义一个中奖名单的列表
a = random.choice(luckylist) # 在中奖名单里面随机选择
print('开奖倒计时',3)
time.sleep(1)
print('开奖倒计时',2)
time.sleep(1)
print('开奖倒计时',1)
time.sleep(1)
image = '''
/\_)o<
| \\
| O . O|
\_____/
'''
print(image)
print('恭喜' a '中奖!')
choujiang('虚竹','萧峰','段誉') # 调用函数
第10关
练习1-剪刀石头布-参考
练习要求:
和电脑玩一个剪刀石头布的游戏:电脑随机出拳,我们可选择出什么。
练习目标:
我们会通过今天的作业,做出和电脑进行“石头剪刀布”的游戏。
练习要求:
和电脑玩一个剪刀石头布的游戏:电脑随机出拳,我们可选择出什么。
1.双方出拳
首先,我们要让双方选择出拳,才能判断胜负。
我们可以设置变量computer_choice代表电脑的出拳选择,设置变量user_choice代表你的出拳选择。
电脑的出拳,我们可以使用random.choice()来随机选择;我们的出拳,可以手动输入我们出拳的类型。
另外,判断下输入:当输入的内容不是石头剪刀布时,电脑会提醒'输入有误,请重新出拳',并重新出拳。
import random
# 出拳
punches = ['石头','剪刀','布']
computer_choice = random.choice(punches)
user_choice = ''
user_choice = input('请出拳:(石头、剪刀、布)') # 请用户输入选择
while user_choice not in punches: # 当用户输入错误,提示错误,重新输入
print('输入有误,请重新出拳')
user_choice = input()
2.双方亮拳
你和电脑已经对自己要出的拳进行了选择,接下来,我们需要知道双方的出拳类型。
请使用print()函数补充亮拳的结果。
import random
# 出拳
punches = ['石头','剪刀','布']
computer_choice = random.choice(punches)
user_choice = ''
user_choice = input('请出拳:(石头、剪刀、布)') # 请用户输入选择
while user_choice not in punches: # 当用户输入错误,提示错误,重新输入
print('输入有误,请重新出拳')
user_choice = input()
# 亮拳
print('————战斗过程————')
print('电脑出了:%s' %(computer_choice))
print('你出了:%s' %(user_choice))
3.判断胜负
在前面两步,电脑和你已经选择完出拳的类型并亮拳后,只差最后一步:根据结果判断胜负。
胜负分为三种情况:
两方出拳一致:平局;
你出石头,电脑出剪刀;你出剪刀,电脑出布;你出布,电脑出石头:你获胜;
其他情况:你输了。
根据上面的逻辑将代码补充完整,判断胜负,试试能否运行。
import random
# 出拳
punches = ['石头','剪刀','布']
computer_choice = random.choice(punches)
user_choice = ''
user_choice = input('请出拳:(石头、剪刀、布)') # 请用户输入选择
while user_choice not in punches: # 当用户输入错误,提示错误,重新输入
print('输入有误,请重新出拳')
user_choice = input()
# 亮拳
print('————战斗过程————')
print('电脑出了:%s' %(computer_choice))
print('你出了:%s' %(user_choice))
# 胜负
print('—————结果—————')
参考答案
punches = ['石头','剪刀','布']
computer_choice = random.choice(punches)
user_choice = ''
user_choice = input('请出拳:(石头、剪刀、布)') # 请用户输入选择
while user_choice not in punches: # 当用户输入错误,提示错误,重新输入
print('输入有误,请重新出拳')
user_choice = input()
# 亮拳
print('————战斗过程————')
print('电脑出了:%s' %(computer_choice))
print('你出了:%s' %(user_choice))
# 胜负
print('—————结果—————')
if user_choice == computer_choice: # 使用if进行条件判断
print('平局!')
elif (user_choice == '石头' and computer_choice == '剪刀') or (user_choice == '剪刀' and computer_choice == '布') or (user_choice == '布' and computer_choice == '石头'):
print('你赢了!')
else:
print('你输了!')
第11关
练习1-一起来捉虫-参考
1.知识点debug
【参考】
scores = {'语文':89, '数学':95, '英语':80}
def get_average(scores):
sum_score = 0
for subject, score in scores.items():
sum_score = score
print('现在的总分是%d'%sum_score)
ave_score = sum_score/len(scores)
print('平均分是%d'%ave_score)
get_average(scores)
2.思维不清debug
【参考】
not_bad_word = True
while not_bad_word:
x = input('请给旺财取个外号:')
if x == '小狗' or x =='汪汪': # 只要外号是两个中的一个,就会生气。
not_bad_word = False
print('我生气了,不想理你了!')
print('对不起,以后我不会这么叫你了')
3.被动掉坑debug
【参考】
deposit = [100,300,900,2000,5000,0,2000,4500]
for i in range(1, len(deposit)):
if deposit[i-1] == 0: # 判断被除数等于0时,特殊处理。
print('你上次存款为 0 哦!')
else:
times = deposit[i]/deposit[i-1]
print('你的存款涨了%f倍'%times)
第12关
练习1-员工管理系统-参考
1.新增业绩的类方法
【参考】
# 创建一个人事系统类
class hrSystem:
# 创建存储员工名字的变量 name
name = ''
# 创建存储员工工资的变量 salary
salary = 0
# 创建存储员工绩效的变量 kpi
kpi = 0
# 定义录入员工信息的类方法
@classmethod
def record(cls, name, salary, kpi):
cls.name = name
cls.salary = salary
cls.kpi = kpi
# 定义打印员工信息的类方法
@classmethod
def print_record(cls):
print(cls.name '的工作信息如下:')
print('本月工资:' str(cls.salary))
print('本年绩效:' str(cls.kpi))
# 定义根据 kpi 评奖的类方法
@classmethod
def kpi_reward(cls):
if cls.kpi > 95:
print('恭喜' cls.name '拿到明星员工奖杯!')
elif cls.kpi <= 95 and cls.kpi >= 80:
print('恭喜' cls.name '拿到优秀员工奖杯!')
else:
print('很遗憾' cls.name '这次没有评上奖杯,希望来年努力工作,勇创佳绩!')
# 验证结果的代码
hrSystem.record('bob', 13000, 98)
hrSystem.kpi_reward()
hrSystem.record('candy', 8000, 89)
hrSystem.kpi_reward()
hrSystem.record('jony', 8000, 75)
hrSystem.kpi_reward()
2.新增检测名字的类方法
【参考】
# 创建一个人事系统类
class hrSystem:
# 创建存储员工名字的变量 name
name = ''
# 创建存储员工工资的变量 salary
salary = 0
# 创建存储员工绩效的变量 kpi
kpi = 0
# 定义录入员工信息的类方法
@classmethod
def record(cls, name, salary, kpi):
cls.name = name
cls.salary = salary
cls.kpi = kpi
# 定义打印员工信息的类方法
@classmethod
def print_record(cls):
print(cls.name '的工作信息如下:')
print('本月工资:' str(cls.salary))
print('本年绩效:' str(cls.kpi))
# 定义根据 kpi 评奖的类方法
@classmethod
def kpi_reward(cls):
if cls.kpi > 95:
print('恭喜' cls.name '拿到明星员工奖杯!')
elif cls.kpi <= 95 and cls.kpi >= 80:
print('恭喜' cls.name '拿到优秀员工奖杯!')
else:
print('很遗憾' cls.name '这次没有评上奖杯,希望来年努力工作,勇创佳绩!')
# 检查录入名称是否正确的类方法
@classmethod
def check_name(cls):
if cls.name not in ['bob', 'candy', 'jony', 'kelly']:
print('录入错误!' cls.name '不是本公司员工!')
else:
print('录入正确~')
# 验证结果的代码
hrSystem.record('bob', 13000, 98)
hrSystem.check_name()
hrSystem.record('spy', 3000, 60)
hrSystem.check_name()
3.优化代码
【参考】
# 创建一个人事系统类
class hrSystem:
# 创建存储员工名字的变量 name
name = ''
# 创建存储员工工资的变量 salary
salary = 0
# 创建存储员工绩效的变量 kpi
kpi = 0
# 定义录入员工信息的类方法
@classmethod
def record(cls, name, salary, kpi):
cls.name = name
cls.salary = salary
cls.kpi = kpi
# 定义打印员工信息的类方法
@classmethod
def print_record(cls):
if cls.check_name(): # 以 cls.check_name() 的返回值(0或1)作为判断条件。
print(cls.name '的工作信息如下:')
print('本月工资:' str(cls.salary))
print('本年绩效:' str(cls.kpi))
# 定义根据 kpi 评奖的类方法
@classmethod
def kpi_reward(cls):
if cls.kpi > 95:
print('恭喜' cls.name '拿到明星员工奖杯!')
elif cls.kpi <= 95 and cls.kpi >= 80:
print('恭喜' cls.name '拿到优秀员工奖杯!')
else:
print('很遗憾' cls.name '这次没有评上奖杯,希望来年努力工作,勇创佳绩!')
# 检查录入名称是否正确的类方法
@classmethod
def check_name(cls):
if cls.name not in ['bob', 'candy', 'jony', 'kelly']:
print('录入错误!' cls.name '不是本公司员工!')
return 0 # 设置返回值为0
else:
print('录入正确~')
return 1 # 设置返回值为1
# 验证结果的代码
hrSystem.record('spy', 3000, 60)
hrSystem.print_record()
第13关
练习1-问卷搜集器-参考
1.问卷答案的储存
【参考】
# 不用运行,读懂即可。
class Survey():
# 收集调查问卷的答案
def __init__(self, question):
self.question = question
# 定义收集问卷问题答案的列表
self.response = []
# 显示调查问卷的题目
def show_question(self):
print(self.question)
# 存储问卷搜集的答案
def store_response(self, new_response):
self.response.append(new_response)
# 将答案添加到列表self.response(见第7行
2.搜集问题-最喜欢的美食
【参考】
class Survey():
# 收集调查问卷的答案
def __init__(self, question):
self.question = question
self.response = []
# 显示调查问卷的题目
def show_question(self):
print(self.question)
# 存储问卷搜集的答案
def store_response(self, new_response):
self.response.append(new_response)
# 请实例化Survey()类,并且显示出这次的调查问卷问题。
food_survey = Survey('你最喜欢的美食是什么?') # 类的实例化,同时为参数question赋值。
food_survey.show_question() # 调用类方法打印问题
# 存储问卷调查的答案
while True:
response = input('请回答问卷问题,按 q 键退出:')
if response == 'q':
break
food_survey.store_response(response) # 再次调用类方法,进行问答的收集。
# 输出测试
for food in food_survey.response:
print('美食:' food)
3.实名问卷:搜集名字和籍贯地
【参考】
class Survey():
# 收集调查问卷的答案
def __init__(self, question):
self.question = question
self.response = []
# 显示调查问卷的题目
def show_question(self):
print(self.question)
# 存储问卷搜集的答案
def store_response(self, new_response):
self.response.append(new_response)
# 请定义实名调查问卷的新类 RealNameSurvey,继承自 Survey 类
class RealNameSurvey(Survey):
def __init__(self, question):
Survey.__init__(self, question)
self.response = {} # 由于籍贯地和名字挂钩,所以用构成为“键值对”的字典来存放。
# 存储问卷搜集的答案(覆盖父类的类方法)
def store_response(self, name, new_response): # 除了 self,还需要两个参数。
self.response[name] = new_response # 键值对的新增
survey = RealNameSurvey('你的籍贯地是哪?')
survey.show_question()
while True:
response = input('请回答问卷问题,按 q 键退出:')
if response == 'q':
break
name = input('请输入回答者姓名:')
survey.store_response(name, response) # 调用类方法,将两次通过 input 的字符串存入字典。
# 输出测试
for name, value in survey.response.items():
print(name ':' value)
第14关
练习1-升级版游戏-参考
1.代码实验
【参考】
import random
player_list = ['【圣光骑士】','【暗影刺客】','【精灵弩手】']
players = []
for i in range(3):
player = random.choice(player_list)
players.append(player)
print(players)
# 判断方式1:比较运算符
# 角色类型都一样
if players[0] == players[1] == players[2]:
print('我们都一样!——方式1') # 在打印结果中加上“方式N”,验证不同的判断方式的有效性。
# 角色类型都不一样
if players[0] != players[1] and players[0] != players[2] and players[1] != players[2]:
print('我们都不一样!——方式1')
# 判断方式2:set()
# 集合(set)是一个无序的不重复元素序列,set()可以去重,然后生成一个集合。
players_set = set(players)
# 角色类型都一样&角色类型都不一样
if len(players_set) == 1:
print('我们都一样!——方式2')
elif len(players_set) == 3:
print('我们都不一样!——方式2')
# 其他判断方式
'''
除了上面两种方式外,还有很多方式可以考虑:
例如:类似判断方式2,可以新建一个列表,用 append 添加不重复的角色类型,然后看这个列表的长度是多少(类似判断方式2)。
再如:“角色类型完全不一样”,可先将players和player_list按相同的排序方式排一下,再判断两个排序后的列表是否相同。
总而言之:只要你愿意思考、尝试和搜索,就可以得出各种不同的判断方式。
'''
# 再举一个例子:
if sorted(players) == sorted(player_list):
print('我们都不一样!——方式3')
else:
pass
2.加新功能
【参考】
# 查看新增的代码和注释
import random
import time
# 创建一个类,可实例化成具体的游戏角色
class Role:
def __init__(self, name):
self.name = name
self.life = random.randint(100,150)
self.attack = random.randint(30,50)
# 创建3个子类,可实例化为3个不同的角色类型
class Knight(Role):
def __init__(self, name = '【圣光骑士】'):
Role.__init__(self,name)
self.life = int(self.life*1.5)
self.attack = int(self.attack*0.8)
def fight_buff(self, opponent,str1,str2):
if opponent.name == '【暗影刺客】':
self.attack = int(self.attack * 1.5)
print('『%s』【圣光骑士】对 『%s』【暗影刺客】说:“让无尽光芒制裁你的堕落!”'%(str1, str2))
class Assassin(Role):
def __init__(self, name = '【暗影刺客】'):
Role.__init__(self,name)
self.life = int(self.life*0.8)
self.attack = int(self.attack*1.5)
# 角色类型克制关系
def fight_buff(self, opponent,str1,str2):
if opponent.name == '【精灵弩手】':
self.attack = int(self.attack * 1.5)
print('『%s』【暗影刺客】对 『%s』【精灵弩手】说:“主动找死,就别怪我心狠手辣。”'%(str1, str2))
class Bowman(Role):
def __init__(self, name = '【精灵弩手】'):
Role.__init__(self,name)
self.life = int(self.life*1.2)
self.attack = int(self.attack*1.2)
def fight_buff(self, opponent,str1,str2):
if opponent.name == '【圣光骑士】':
self.attack = int(self.attack * 1.5)
print('『%s』【精灵弩手】对 『%s』【圣光骑士】说:“骑着倔驴又如何?你都碰不到我衣服。”'%(str1, str2))
# 创建一个类,可生成3V3并展示:可分为:欢迎语→随机生成→展示角色
class Game:
def __init__(self):
self.players = []
self.enemies = []
self.score = 0
self.i = 0
# 依次执行以下函数
self.game_start() # 欢迎语
self.born_role() # 随机生成6个角色
self.cooperat_role() # 角色类型引起的属性加成
self.show_role() # 展示角色
self.order_role() # 排序并展示
self.pk_role() # 让双方 Pk 并展示结果
self.show_result() # 展示最终结局
# 欢迎语
def game_start(self):
print('------------ 欢迎来到“炼狱角斗场” ------------')
print('在昔日的黄昏山脉,奥卢帝国的北境边界上,有传说中的“炼狱角斗场”。')
print('鲜血与战斗是角斗士的归宿,金钱与荣耀是角斗士的信仰!')
print('今日,只要你【你的队伍】能取得胜利,你将获得一笔够花500年的财富。')
time.sleep(2)
print('将随机生成【你的队伍】和【敌人队伍】!')
input('\n狭路相逢勇者胜,请按任意键继续。\n')
# 随机生成6个角色
def born_role(self):
for i in range(3):
self.players.append(random.choice([Knight(),Assassin(),Bowman()]))
self.enemies.append(random.choice([Knight(),Assassin(),Bowman()]))
# 判断是否满足角色类型配合的条件
def cooperat_role(self):
players_list = [self.players[0].name,self.players[1].name,self.players[2].name]
enemies_list = [self.enemies[0].name,self.enemies[1].name,self.enemies[2].name]
players_set = set(players_list)
enemies_set = set(enemies_list)
# print(players_list) # 这几行是验证代码,正式代码里会删掉。感兴趣的话,可取消注释后一起运行。
# print(players_set)
# print(enemies_list)
# print(enemies_set)
if len(players_set) == 1:
print('我方触发了“角色类型一致”的条件,每个角色的血量增加25%。')
for i in range(3):
self.players[i].life = int(self.players[i].life * 1.25)
if len(players_set) == 3:
print('我方触发了“角色类型兼备”的条件,每个角色的攻击增加25%。')
for i in range(3):
self.players[i].attack = int(self.players[i].attack * 1.25)
if len(enemies_set) == 1:
print('敌方触发了“角色类型一致”的条件,每个角色的血量增加25%。')
for i in range(3):
self.enemies[i].life = int(self.enemies[i].life * 1.25)
if len(enemies_set) == 3:
print('敌方触发了“角色类型兼备”的条件,每个角色的攻击增加25%。')
for i in range(3):
self.enemies[i].attack = int(self.enemies[i].attack * 1.25)
input('请按任意键,查看【你的队伍】和【敌人队伍】的角色信息:') # 缓一缓,再展示。
# 展示角色
def show_role(self):
print('----------------- 角色信息 -----------------')
print('你的队伍:')
for i in range(3):
print( '『我方』%s 血量:%s 攻击:%s'%
(self.players[i].name,self.players[i].life,self.players[i].attack))
print('--------------------------------------------')
print('敌人队伍:')
for i in range(3):
print('『敌方』%s 血量:%s 攻击:%s'%
(self.enemies[i].name,self.enemies[i].life,self.enemies[i].attack))
print('--------------------------------------------')
input('请按回车键继续。\n')
# 排序并展示
def order_role(self):
order_dict = {}
i=0
while i < 3:
order = int(input('你想将 %s 排在第几个上场?(输入数字1-3)'%(self.players[i].name)))
if order in [1,2,3]:
if order in order_dict:
print('你输入了重复的数字,请重新输入:')
else:
order_dict[order] = self.players[i]
i = 1
else:
print('输入有误,请输入1或2或3:')
self.players = []
for i in range(1,4):
self.players.append(order_dict[i])
print('\n你的队伍出场顺序是:%s、%s、%s'
%(self.players[0].name,self.players[1].name,self.players[2].name))
print('敌人队伍出场顺序是:%s、%s、%s'
%(self.enemies[0].name,self.enemies[1].name,self.enemies[2].name))
# 让双方 Pk 并展示结果
def pk_role(self):
for i in range(3):
print('\n----------------- 【第%s轮】 -----------------' % (i 1))
# 每一局开战前加buff
self.players[i].fight_buff(self.enemies[i],'我方','敌方')
self.enemies[i].fight_buff(self.players[i],'敌方','我方')
input('\n战斗双方准备完毕,请按回车键继续。')
print('--------------------------------------------')
while self.players[i].life >0 and self.enemies[i].life>0:
self.enemies[i].life -= self.players[i].attack
self.players[i].life -= self.enemies[i].attack
print('我方%s 发起了攻击,敌方%s 剩余血量 %s'%
(self.players[i].name,self.enemies[i].name,self.enemies[i].life))
print('敌方%s 发起了攻击,我方%s 剩余血量 %s'%
(self.enemies[i].name,self.players[i].name,self.players[i].life))
print('--------------------------------------------')
time.sleep(1)
if self.players[i].life <= 0 and self.enemies[i].life> 0:
print('\n很遗憾,我方%s 挂掉了!'% (self.players[i].name))
self.score -= 1
elif self.players[i].life >0 and self.enemies[i].life<= 0:
print('\n恭喜,我方%s 活下来了。'% (self.players[i].name))
self.score = 1
else:
print('\n我的天,他们俩都死了啊!')
# 展示最终结局
def show_result(self):
input('\n请按回车查看最终结果。\n')
if self.score >0:
print('【最终结果】\n你赢了,最终的财宝都归你了!')
elif self.score == 0:
print('【最终结果】\n你没有胜利,但也没有失败,在夜色中灰溜溜离开了奥卢帝国。')
else:
print('【最终结果】\n你输了。炼狱角斗场又多了几具枯骨。')
game = Game()
第15关
练习1-数据转移中的变化-参考
1.编码和解码
【参考】
# 1.分别使用gbk和utf-8编码自己的名字,并将其打印出来。
print('吴枫'.encode('gbk'))
print('吴枫'.encode('utf-8'))
# 2.复制上一步得到的结果,进行解码,打印出你的名字(两次)。
print(b'\xe5\x90\xb4\xe6\x9e\xab'.decode('utf-8'))
# 3.使用gbk解码b'\xb7\xe7\xb1\xe4\xbf\xc6\xbc\xbc\xd3\xd0\xd2\xe2\xcb\xbc',并打印出来。
print(b'\xb7\xe7\xb1\xe4\xbf\xc6\xbc\xbc\xd3\xd0\xd2\xe2\xcb\xbc'.decode('gbk'))
2.通过文件读写,复制图片
【参考】
# 先打开图片
with open('photo1.png','rb') as file: # 以“rb”模式打开图片
data = file.read()
with open('photo3.png','wb') as newfile: # 以“wb”模式写入
newfile.write(data)
2.在读写之间处理数据-2
【参考】
file1 = open('scores.txt','r',encoding='utf-8')
file_lines = file1.readlines()
file1.close()
final_scores = []
for i in file_lines:
data =i.split()
sum = 0 # 先把总成绩设为0
for score in data[1:]: # 遍历列表中第1个数据和之后的数据
sum = sum int(score) # 然后依次加起来,但分数是字符串,所以要转换
result = data[0] str(sum) '\n' # 结果就是学生姓名和总分
print(result)
final_scores.append(result)
print(final_scores)
sum1 = open('winner.txt','w',encoding='utf-8')
sum1.writelines(final_scores)
sum1.close()
2.在读写之间处理数据-2
【参考】
ile1 = open('winner.txt','r',encoding='utf-8')
file_lines = file1.readlines()
file1.close()
dict_scores = {}
list_scores = []
final_scores = []
# print(file_lines)
# print(len('\n'))
# 打印结果为:['罗恩102\n', '哈利383\n', '赫敏570\n', '马尔福275\n']
# 经过测试,发现'\n'的长度是1。所以,名字是“第0位-倒数第5位”,分数是“倒数第4位-倒数第二位”。
# 再根据“左取右不取”,可知:name-[:-4],score-[-4:-1]
for i in file_lines: # i是字符串。
print(i)
name = i[:-4] # 取出名字(注:字符串和列表一样,是通过偏移量来获取内部数据。)
score = int(i[-4:-1]) # 取出成绩
print(name)
print(score)
dict_scores[score] = name # 将名字和成绩对应存为字典的键值对(注意:这里的成绩是键)
list_scores.append(score)
# print(list_scores)
list_scores.sort(reverse=True) # reverse,逆行,所以这时列表降序排列,分数从高到低。
# print(list_scores)
for i in list_scores:
result = dict_scores[i] str(i) '\n'
# print(result)
final_scores.append(result)
print(final_scores) # 最终结果
winner_new = open('winner_new.txt','w',encoding='utf-8')
winner_new.writelines(final_scores)
winner_new.close()
第16关
练习1-时间记录器-参考
【参考】
import time
input('欢迎使用“时间管理器”!请按回车继续。')
while True:
task_name = input('请输入任务名:')
task_time = int(input('你觉得自己至少可以专注这个任务多少分钟?输入 N 分钟'))
input('此次任务信息:\n我要完成的任务:%s\n我至少要专注:%d分钟\n按回车开始计时:'%(task_name,task_time))
start = time.time() # 开始计时
start_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) # 格式化日期
# for t in range(task_time*60,0,-1): # 实际代码:分钟转成秒要乘60,用-1来倒计时。
for t in range(task_time,0,-1):
info = '请专注任务,还要保持专注 ' str(t) ' 秒哦!'
print(info,end='')
print('\b'*(len(info)*2),end='',flush=True)
time.sleep(1)
print('你已经专注了 %d 分钟,很棒~再加把劲,完成任务!'%task_time) # 倒计时后,才继续运行之后的代码。
# 询问任务是否完成
task_status = input('请在任务完成后按输入y:')
if task_status == 'y':
end = time.time() # 一定用户按了 y,就记下结束时间。
end_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) # 日期格式化
actual_time = int((end -start)/60) # 始末时间相减,从秒换算到分,除以60。
start_end = start_time '——' end_time '\n'
with open('timelog3.txt','a', encoding = 'utf-8') as f:
f.write(task_name ' 的预计时长为:' str(task_time) '分钟\n')
f.write(task_name ' 的实际时长为:' str(actual_time) '分钟,具体时间为:' start_end)
again = input('建立一个新任务请按 y, 退出时间日志记录器请按 q:')
if again == 'q':
break
else:
print('抱歉,你的输入有误。请重启时间记录器。')
print('愿被你善待的时光,予你美好的回赠。')
第17关
练习1-自制动态二维码-参考
【参考】
# 先导入模块
from MyQR import myqr
myqr.run(
words='http://weixin.qq.com/r/kzlje9TEE4lsrZAY92yB',
# 扫描二维码后,显示的内容,或是跳转的链接
version=5, # 设置容错率
level='H', # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
picture='she-3.gif', # 图片所在目录,可以是动图
colorized=True, # 黑白(False)还是彩色(True)
contrast=1.0, # 用以调节图片的对比度,1.0 表示原始图片。默认为1.0。
brightness=1.0, # 用来调节图片的亮度,用法同上。
save_name='Python.gif', # 控制输出文件名,格式可以是 .jpg, .png ,.bmp ,.gif
)
第17关
练习1-拯救选择困难症-参考
【参考】
# 帮你做选择之我要吃什么
import random
# 将需要用到的表格和变量放在开头
list_food = ['KFC', '蒸菜馆', '楼下快餐店', '桂林米粉', '东北饺子', '金牌猪脚饭', '三及第汤饭'] # 备选菜单,可自定义。
list_choice = []
# 由于两个原因都包含判断过程,所以,为了让代码更简洁,可将其封装成函数。
def choose(list):
while True:
food = random.choice(list)
judgement = input('去吃【%s】好不好啊?同意的话输入y,不想吃直接回车即可。'%(food))
if judgement == 'y':
print('去吃【%s】!就这么愉快地决定啦!'%(food))
break
# 判断环节
reason = int(input('你不知道吃什么的原因是:1.完全不知道吃什么;2.在几家店之间徘徊(请输入1或2):'))
if reason == 1:
choose(list_food)
elif reason == 2:
add = True
while add:
choice = input('请输入让你犹豫的店名(注:一家一家输,完成后输入y):')
if choice != 'y': # 这个判断语句,是为了不将 y 也添加到菜单里。
list_choice.append(choice)
if choice == 'y':
add = False
choose(list_choice)
else:
print('抱歉,目前还不支持第三种情况——不过,你可以加代码哦。')