目录
前言
点亮技能树的过程中针对这个题,个人提出了自己的看法,如有不对的地方,望指正~
一、题目及个人解答
1.题目
原题链接:https://edu.csdn.net/skill/practice/python-3-10/167?typeId=17359&language=python
下面的类封装了一组 set
/get
/keys
接口
# -*- coding: UTF-8 -*-
class KeyValueSet:
def __init__(self) -> None:
self.dict = {}
def set(self, key, value):
self.dict[key] = value
def get(self, key):
return self.dict.get(key)
def keys(self):
return self.dict.keys()
请你使用类 KeyValueSet
完成一个交互式命令行你想我猜
游戏。支持:
- 装载N个句子对
你猜我想
闯关,输出上半句,等待用户猜测下半句- 如果猜中就累加10分,否则扣2分
- 全部结束输出用户本次得分
我们编写一个新的class,内部通过组合KeyValueSet
来支持上述功能,程序框架如下:
# -*- coding: UTF-8 -*-
class GuessSentenceGame:
def __init__(self):
self.kv = KeyValueSet()
self.score = 0
def setup(self, sentences):
# TODO(You): 请在此编写装载逻辑
def guess(self, first_word):
# TODO(You): 请在此编写猜测结果,返回 err, value
def run(self):
self.score = 0
for first_word in self.kv.keys():
ret = input("猜一猜下半句是什么? {} -> :".format(first_word))
err, value = self.guess(first_word)
if err==0:
print('你太厉害了,这都能猜得到!+10分!')
self.score += 10
else:
self.score -= 2
print('哈哈,肯定猜不到得啦:{}->{},扣除2分!'.format(first_word, value))
print('游戏结束,你本次游戏得分:', self.score)
if __name__ == '__main__':
sentences = [
"hello world",
'monkey king',
'tomorrow is another day',
"good bye"
]
game = GuessSentenceGame()
game.setup(sentences)
game.run()
一个示例输出是:
猜一猜下半句是什么? hello -> :world
你太厉害了,这都能猜得到!+10分!
猜一猜下半句是什么? monkey -> :king
你太厉害了,这都能猜得到!+10分!
猜一猜下半句是什么? tomorrow -> :is another day
你太厉害了,这都能猜得到!+10分!
猜一猜下半句是什么? good -> :a
哈哈,肯定猜不到得啦:good->bye,扣除2分!
游戏结束,你本次游戏得分: 28
2.个人解答
我主要认为 err 有点多余,而且要将 ret 和 value 进行对比才能知道答案是否正确
代码如下(示例):
# -*- coding: UTF-8 -*- class KeyValueSet: def __init__(self) -> None: self.dict = {} def set(self, key, value): self.dict[key] = value def get(self, key): return self.dict.get(key) def keys(self): return self.dict.keys() class GuessSentenceGame: def __init__(self): self.kv = KeyValueSet() self.score = 0 def setup(self, sentences): for i in sentences: # 遍历句子字符串列表 sens = i.split(' ', 1) # 以空格分割字符串,最大分割次数为1 self.kv.set(sens[0], sens[1]) # 调用self.kv对象的set方法,生成字典 def guess(self, first_word): value = self.kv.get(first_word) # 调用self.kv.get()方法,获取对应的值 return value def run(self): self.score = 0 # 初始得分为0 for first_word in self.kv.keys(): # 遍历字典键对象 ret = input("猜一猜下半句是什么? {} -> :".format(first_word)) # 输出提示语和键 value = self.guess(first_word) # 调用self.guess方法,获取正确答案 if ret == value: # 判断输入的答案是否与正确答案相同 self.score += 10 # 得分加十分 print('你太厉害了,这都能猜得到!+10分!') # 相同则输出正确提示语 else: self.score -= 2 # 不相同,得分减两分 print('哈哈,肯定猜不到得啦:{}->{},扣除2分!'.format(first_word, value)) # 输出错误提示语 print('游戏结束,你本次游戏得分:', self.score) # 输出结束提示语 if __name__ == '__main__': sentences = [ "hello world", 'monkey king', 'tomorrow is another day', "good bye" ] game = GuessSentenceGame() x = game.setup(sentences) game.run()
运行结果如下:
总结
主要是对句子对的分割,对字典的生成和键值对的运用,以及条件语句和循环的使用。