##第一问
class teacher(object):
school = '广州软件学院'
def __init__(self,job_number,name,age,department,phone,entry_time):
self.job_number = job_number
self.name = name
self.age = age
self.department = department
self.phone = phone
self.entry_time = entry_time
def output(self):
print(''' %s的个人信息如下:
*********************
工号:%s
年龄:%s
部门:%s
电话:%s
入职时间:%s
*********************''' % (self.name,self.job_number,self.age,self.department,self.phone,self.entry_time) )
def __del__(self):
## 析构函数
print('{}成员空间释放了'.format(self.name))
def getsalary(self,base_salary):
# 基本薪金 = 基础薪金 + 年功薪金(每满1年增长100元,10年封顶)
import time
current_date = time.strftime('%Y.%m',time.localtime())
t1 = self.entry_time.split('.') #入职时间
t2 = current_date.split('.') #当前时间
if int(t2[0]) >= int(t1[0]):
year = int( t2[0] ) - int( t1[0] )
else:
year = int(t2[0]) - int(t1[0]) - 1
current_salary = base_salary + year * 100
print( '{} 的基本薪金是:{} 元'.format(self.name,current_salary) )
obj =teacher('1001','张三',26,'软件工程系','13925348721','2019.06')
obj.output()
## 第二问
zhangsan =teacher('1001','张三',26,'软件工程系','13925348721','2019.06')
lisi =teacher('1201','李四',29,'网络技术系','13926172345','2017.10')
wangwu =teacher('1154','王五',30,'数码媒体系','13921783471','2021.05')
zhangsan.output()
lisi.output()
wangwu.output()
## 第三问
zhaoliu = teacher('1157','赵六',34,'软件工程系','13811073452','2015.04')
zhaoliu.getsalary(base_salary=5250)
11.执行以下程序,输入”93python22”,输出结果是:
w = input('请输入数字和字母构成的字符串:')
for x in w:
if '0'<= x <= '9':
continue
else:
w.replace(x,'')
print(w)
A python9322
B python
C 93python22
D 9322
正确答案: C
这题的关键点在于replace替换字符串之后需要用w来接收,不能用别的字母来接收,
因为他还在循环内,还需要接着替换别的。所以这个没有接收的就相当于什么操作都
没有进行,自然输入的是什么输出的也就是什么啦。
针对Python基础和类的设计的学习资源推荐:
1.官方文档:Python官方文档详细且完整地介绍了Python语言的基础知识和面向对象编程的基本概念,是入门学习的不错选择。
2.《Python入门指南》:陈儒的这本书不仅涵盖了Python基础知识(语法、数据类型、函数等),还介绍了Python面向对象设计的概念和实现方式。
3.《Fluent Python》:对于有一定基础的Python开发者来说,这本书非常实用。它介绍了Python高级特性、面向对象设计、元编程等内容,并提供了大量代码示例和实用技巧。
针对第一问和第二问的解答:
第一问:该程序是一个猜姓名的小游戏,用户输入一个姓名,程序通过构造一个查找表(即字典)来判断输入是否为某个名人的姓名。如果是,则提示用户猜对了并询问是否继续游戏;如果不是,则根据输入的字符与字典进行比对,提示用户还差几个字符猜中该名人的姓名。具体的实现涉及到倒计时、构造字典、字符串遍历与比对等操作。
第二问:该程序是一个猜单词游戏,程序根据一个字符串构造一个英语单词字典,用户输入一个单词,程序通过比对字典来判断用户输入是否为英文单词。如果是,则提示用户猜对了并询问是否继续游戏;如果不是,则根据输入的字符与字典进行比对,提示用户还差几个字符猜中该单词。具体的实现涉及到字符串的分词、构造字典、遍历字典树等操作。
针对第一问和第二问的具体解决方案:
a. 构造包含所有名人姓名的set对象(例如:stars)
b. 定义构造字典的函数build_lookup_table,利用循环嵌套构造字典(用字典实现一个又称为字典树的数据结构),其中字典的键为字符,字典的值为下一级字典的引用。具体实现方法是,对于字典中的每个字符,检查其是否在lookup_table_中,如果不在,则添加该字符为新的键和一个新的空字典作为新的值,否则停留在该字符下一级的字典中继续匹配。
c. 定义用户提示信息的字典messages,包含不同等级的提示信息,以及猜中名人姓名时的特殊提示信息。
d. 定义倒计时函数countdown,循环输出指定秒数并暂停1秒。
e. 使用以上函数和变量编写主函数guess_name,在其中设置一个输入循环,提示用户输入姓名,然后依次检查输入的每个字符,从字典中检索是否存在该字符对应的字典。如果存在,则继续向下检索,匹配下一级字典中的字符,否则退出循环并输出相应等级的提示信息。
f. 对于输入正确的情况,输出特殊提示信息以及继续游戏/退出游戏的提示信息。
a. 定义分词函数cut,以一个需要被分词的字符串作为参数,将其拆分成单词,并将结果保存在一个集合类型的变量中返回。
b. 定义构造字典树的函数build_trie,依次遍历分词结果,匹配每个单词中的每个字符,对于字典中的每个字符,检查其是否在trie中,如果不在,则添加该字符为新的键和一个新的空字典作为新的值,否则停留在该字符下一级的字典中继续匹配。
c. 定义用户提示信息的字典messages,与猜姓名游戏的实现方案相同。
d. 编写主函数guess_words,在其中设置一个输入循环,提示用户输入单词,然后依次检查输入的每个字符,从字典中检索是否存在该字符对应的字典。如果存在,则继续向下检索,匹配下一级字典中的字符,否则退出循环并输出相应等级的提示信息。
e. 对于输入正确的情况,输出特殊提示信息以及继续游戏/退出游戏的提示信息。
参考代码如下: