天津理工大学信息检索(数据分析)Python 期末考试复习

课程代码:0661283
环境:jupyter-notebook
主要总结一些菜鸟教程上的题或者课后题。
学习参考:https://www.515code.com/posts/aibyzrwu/
菜鸟教程例题:https://www.runoob.com/python3/python3-examples.html (看到合并字典之前)

部分知识点小结

打印字符串

以两数相加为例,下面列出常用的打印方法。

num1 = input('请输入第一个数字:')
num2 = input('请输入第二个数字:')
sum = float(num1) + float(num2)
print('数字{0}和{1}的结果为{2}'.format(num1, num2, sum))
print('数字 %s 和 %s 的结果为 %.2f' % (num1, num2, sum))
print(f'数组{num1}和{num2}的结果为{sum}')

可以看到,我们可以像C语言那样使用控制符格式化输出字符串,也能使用Python的f-string(只需在字符串前加一个字符f即可)。

这里要注意一个地方:input()函数输入的值默认为str类型。

考试题

考完试,发现最后一题全排列有点难,但是完全不用怕,可以投机取巧用“随机法”(性能极差),下面上代码。

import random
m = '1234'
length = len(m)
tag = 0
se = {''}
for j in range(0, 1000):
    ans = ''
    s = m+''
    for i in range(0,1000):
        r = random.randint(0, length-1)
        if s[r] in ans:
            continue
        elif s[r] == '-1':
            continue
    
        for a in s:
            if a!='-1':
                break
        else:
            tag = 1
        
        if tag==1:
            se.add(ans)
            break
    
        ans += s[r]
    else:
        se.add(ans)
se.remove('')
print(len(se))
se

查阅相关资料后,发现还有递归法。
这个方法的核心在于交换,下面是原理图。
全排列-递归法

a = '123'
l = list(a)

def allSort(l, start, end):
    if start == end:
        print(l)
        
    for i in range(start, end):
        # 交换
        l[i], l[start] = l[start], l[i]
        allSort(l, start+1, end)
        # 再换回来
        l[i], l[start] = l[start], l[i]

allSort(l, 0, len(l))

第三种方法:深搜

# 深搜
a = '123'
l = list(a)
num = [-1 for i in range(0,len(a))]
visited = [False for i in range(0,len(a))]

def dfs(index):
    if index == len(a):
        print(num)
        return
    for i in range(0, len(a)):
        if not visited[i]:
            visited[i] = True
            num[index]=l[i]
            dfs(index+1)
            visited[i] = False    # 回溯
dfs(0)

第二章课后题

2-5 精确计算 2除以6,要求结果输出 1/3(分数形式)

from fractions import Fraction
a = Fraction(2,6)
print(a)

2-8 字符串倒序

s1 = "map"
# 方法1
print(s1[::-1])
# 方法2
l = list(s1)
l.reverse()
s2 = ''.join(l)
print(s2)

2-9 用户输入一个单词,并显示单词长度

s = input()
len(s)

2-10 每个单词首字母大写

s = "Python is a widely used high-level, general-purpose, interpreted, dynamic programming language."
s1=""
for i in range(0,95):
    if i>0 and s[i-1]==' ':
        s1 = s1 + s[i].upper()
    else:
        s1 = s1 + s[i]
s1

2-11 切片取列表

list = ["python","java","c","c++","lisp"]
# 第一项
print(list[:1])
# 第三项
print(list[2:3])
# 第五项
print(list[-1:])

2-12 生成一个由100以内能被5整除的数组成的列表,然后将该列表的数字从大到小排序

ans=[]
for x in range(5,101):
    if(x%5==0):
        ans.append(x)
ans.sort(reverse=True)
# 注意 list 排序
ans

2-13 创建一个字典,以citys中元素为key,codes中元素为value

citys=["suzhou","shanghai","hangzhou","nanjing"]
codes=["0512","021","0571","025"]
d={}
i=0
for x in citys:
    d[x] = codes[i]
    i+=1
d

第二章总结:无非是Python几种数据类型的基本操作,建议多看一下这些类型的内建函数,可以简化很多代码。

第三章课后题

3-1 在0~9间随机选择一个整数,操作100次,统计共有几种数字,并用字典的方式输出每个数字的出现次数,键是出现的整数,值是出现的次数。

import random

d = {0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0}
for i in range(0,101):
    a = random.randint(0,9)
    d[a]+=1
d

或者

import random

d = {}
for i in range(0,101):
    a = random.randint(0,9)
    if a in d:
        d[a]+=1
    else:
        d[a]=1
d

3-2 将整数2016的每个数字分离出来,依次打印输出。

a = 2016
s = str(a)
for i in s:
    print(i)

或者

a = 2016
ans = 0
while(a):
    temp = a % 10
    a //= 10 # 注意这里要用双斜杠除法
    print(temp)

3-3 已知字典{“name”:“python”,“book”:“python”,“lang”:“english”},要求将该字典的键和值对换。(注意有值重复)

d = {"name":"python","book":"python","lang":"english"}
ans = {}
for i in d.keys():
    temp = d[i]
    ans[temp] = i
ans
# 由于有值重复,所以对换后结果如下:
# {'python': 'book', 'english': 'lang'}

3-4 已知一段程序中,用列表保存几个用户名,例如[‘xiaoxifeng’, ‘cangcang’, ‘tom’],要求通过终端输入新的用户名,判断所输入的用户名是否为已经设置好的用户名,并且对判断结果给出友好的提示。如果不是,允许用户多次尝试输入,直到正确为止。

user = ['xiaoxifeng', 'cangcang', 'tom']
while(1):
    s = input()
    if s in user:
        print("正确,程序结束")
        break
    else:
        print("用户名有误,请重新输入")

3-5 找一段英文的文本,统计该文本中单词的出现次数。比如 “How are you.How are you.” 的统计结果是 {“how”:2, “are”:2, “you”:2}。

s = "How are you.How are you."
s = s.lower() # 变小写
d = {}
temp = ""
for i in range(0, len(s)):
    if s[i] != ' ' and s[i] != '.':
        temp += s[i]
    else:
        print(temp)
        if temp in d:
            d[temp] += 1
        else:
            d[temp] = 1
        temp = ""
d

3-6 已知字符串 ‘aAsmr3idd4bgs7Dlsf9eAF’,要求编写程序,完成如下任务。

① 将字符串中的数字取出,并输出成一个新的字符串。

s = 'aAsmr3idd4bgs7Dlsf9eAF'
s1 = ''
for i in s:
    if i in '0123456789':
        s1 += i
s1

也可以用ascii码方式来写,python中使用ord('a')方式打印a的ascii码,使用chr(97)方式打印字符。

② 统计字符串中每个字母的出现次数(忽略大小写),并输出成一个字典。

s = 'aAsmr3idd4bgs7Dlsf9eAF'
s = s.lower()
d = {}
# a-z 97-122
for i in s:
    if ord(i) >= 97 and ord(i) <= 122:
        if i in d:
            d[i] += 1
        else:
            d[i] = 1
d

③ 去除字符串多次出现的字母,不区分大小写,如 ‘aAsmr3idd4bgs7Dlsf9eAF’ 去除后,输出 ‘asmr3id4bg7lf9e’。

s = 'aAsmr3idd4bgs7Dlsf9eAF'
s = s.lower()
ans = ''
# a-z 97-122
for i in s:
    if i in ans:
        continue
    else:
        ans += i
ans

3-7 有一百个瓶子,分别编号为1~100。现在有人拿枪从第一个开始射击,每枪击破一个,跳过一个,一直到一轮完成。接着在剩下的瓶子里面再次击破第一个,间隔一个再击破一个。问最后剩下完整的瓶子是这一百个瓶子里的第几个?

l = []
for i in range(0, 100):
    l.append(i)
while len(l)>1:
    m = 0
    for r1 in l:
        if m==0:
            l.remove(r1)
            m=1
        if m==1:
            m=0
            continue
print(l[0]+1) # 因为之前用的编号为0~99,因此加1为正确答案:64

3-8 写一段程序,能够实现如下功能。
① 输入英文的姓名
② 按照字典顺序将所有姓名排序
③ 输入完毕,将排序结果打印出来

num = input("请输入姓名个数:")
l = []
for i in range (0, int(num)):
    name = input("姓名" + str(i+1) + ":")
    l.append(name)
l.sort() # 按字典序升序排列
l

3-16 创建PayCalculator类,拥有pay_rate属性,以每小时人民币数量为单位。该类拥有compute_pay(hours)方法,计算给给定工作时间的报酬,并返回。

class PayCalculator:
    pay_rate = 20 # 每小时20元
    def compute_pay(self, hours):
        return hours*self.pay_rate
# 实例化
x = PayCalculator()
x.compute_pay(2)
# 输出 40

3-17 创建SchoolKid类,初始化小孩的姓名,年龄。也有访问每个属性的方法和修改属性的方法。然后创建ExaggeratingKid类,继承SchoolKid类,在子类中覆盖访问年龄的方法,并将实际年龄加2。

class SchoolKid(object):
    def __init__(self, name, age):
        self.__name = name # 前面两个下划线代表name为私有成员变量
        self.__age = age
    def setName(self, name):
        self.__name = name
    def setAge(self, age):
        self.__age = age
    def getName(self):
        return self.__name
    def getAge(self):
        return self.__age
    
class ExaggeratingKid(SchoolKid):
    def __init__(self, name, age):
        super(ExaggeratingKid, self).__init__(name, age)
    def getAge(self):
        return SchoolKid.getAge(self) + 2 # 子类调用父类必须传self

s = ExaggeratingKid("banana", 20)
print(s.getAge())

更多内容,欢迎访问https://www.515code.com/

  • 16
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我会尽力回答你的问题。以下是一些可能有用的内容: 1. 什么是 NoSQL? NoSQL 是指“非关系型数据库”,这种数据库不使用传统的表格关系来组织数据,而是使用其他方式来存储和检索数据。NoSQL 数据库通常具有高可扩展性、高性能、灵活的数据模型等特点。 2. NoSQL 数据库有哪些类型? NoSQL 数据库通常分为四种类型:键值存储、文档数据库、列存储数据库和图形数据库。 3. 键值存储数据库是什么? 键值存储数据库是 NoSQL 数据库的一种,它使用简单的键值对来存储和检索数据。这种数据库通常非常快速,但不适合存储复杂的数据结构。 4. 文档数据库是什么? 文档数据库是 NoSQL 数据库的一种,它使用类似 JSON 的文档来存储和检索数据。这种数据库通常适合存储多层嵌套的数据结构。 5. 列存储数据库是什么? 列存储数据库是 NoSQL 数据库的一种,它将数据存储在列中而不是行中,这样可以更快地检索数据。这种数据库通常适合存储大量的结构化数据。 6. 图形数据库是什么? 图形数据库是 NoSQL 数据库的一种,它使用图形来存储和检索数据。这种数据库通常适合存储关系型数据,例如社交网络中的人物之间的关系。 7. NoSQL 数据库的优点是什么? NoSQL 数据库通常具有高可扩展性、高性能、灵活的数据模型等优点。它们还可以处理大量的非结构化数据,例如文本、图像和视频。 希望这些内容能够对你的期末考试复习有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值