CONTENTS
- 1. Django概述
- 2. Django开发环境
- 3. Python语法题
- 3.1 AcWing 608. 差
- 3.2 AcWing 665. 倍数
- 3.3 AcWing 670. 动物
- 3.4 AcWing 660. 零食
- 3.5 AcWing 760. 字符串长度
- 3.6 AcWing 721. 递增序列
- 3.7 AcWing 726. 质数
- 3.8 AcWing 745. 数组的右上半部分
- 3.9 AcWing 756. 蛇形矩阵
- 3.10 AcWing 823. 排列
1. Django概述
Django是后起之秀,近些年越来越流行,Youtube(月活20亿+)、Instagram(月活10亿+)等公司采用了Django框架。可以作为Web、App、小程序、AcWing云端App(AC APP)等各种项目的后端。
Django优势:
- 开发效率高,生态完善,有官方社区长期支持。
- 运行效率高(常见误区:Python运行效率低,所以Python写的应用运行效率低)。
- 项目运行效率瓶颈有很多,比如:数据库查询、网络带宽/延迟、硬盘读写速度等,这些与框架关系不大。
- 计算密集型的模块可以用C/C++实现,然后编译成动态链接库再
import
进来。 - 计算密集型的微服务可以通过
thrift
等工具对接,微服务的Server
端代码可以用C/C++语言实现。 - 有很多工具可以将Python代码翻译成C/C++,比如Cython、Pypy。AcWing题库中的不少题目,会发现Python3比Java还快一些。
- 既适合大公司,也适合个人开发者,平均开发一个Web/AC App只需要半个月至一个月。
2. Django开发环境
- 完全无需配置本地环境。利用AC Terminal直接在云端开发,使用工具:
vim
、tmux
等。不推荐在本地开发。
- 本项目会涉及多台服务器间的网络通信,如果在本地开发,未来不方便调试和部署。
- 在本地开发无法统一开发环境,部分Python包在Windows系统上安装困难。
- 需要租一台具有公网IP的云服务器,并安装Docker。
- 服务器配置无要求。
- 后期可以利用
Docker
随意迁移。
- 在AC Terminal的
/var/lib/acwing/docker/images/
目录下给大家提供统一的课程Docker
镜像。
- 标准化开发环境,避免未来出现软件版本不兼容。
- 省去配环境的环节。
- 使用AC Git管理项目代码。
- 方便回滚代码。
3. Python语法题
Python基础语法教程可以见:Python官方教程。
3.1 AcWing 608. 差
【题目描述】
读取四个整数,并计算的值。
【输入格式】
输入共四行,第一行包含整数,第二行包含整数,第三行包含整数,第四行包含整数。
【输出格式】
输出格式为DIFERENCA = X
,其中为的结果。
【数据范围】
【输入样例】
5
6
7
8
【输出样例】
DIFERENCA = -26
【代码】
#! /usr/bin/env python3
#! -*- coding: utf-8 -*-
a = int(input())
b = int(input())
c = int(input())
d = int(input())
print("DIFERENCA = %d" % (a * b - c * d))
3.2 AcWing 665. 倍数
【题目描述】
读取两个正整数值和。
如果其中一个是另一个的整数倍,则输出Sao Multiplos
,否则输出Nao sao Multiplos
。
【输入格式】
共一行,两个整数和。
【输出格式】
按题目所述,输出结果。
【数据范围】
【输入样例】
6 24
【输出样例】
Sao Multiplos
【代码】
#! /usr/bin/env python3
#! -*- coding: utf-8 -*-
a, b = map(int, input().split(' '))
if not a % b or not b % a:
print("Sao Multiplos")
else:
print("Nao sao Multiplos")
3.3 AcWing 670. 动物
【题目描述】
给定你三个葡萄牙语单词,这些词将根据下表从左到右定义一个动物。
请你确定并输出这个动物的名称。
【输入格式】
根据上表,输入包含三个单词,每行一个,用以识别动物,单词由小写字母构成。
【输出格式】
输出识别出的动物的名称。
【输入样例】
vertebrado
mamifero
onivoro
【输出样例】
homem
【实现代码】
#! /usr/bin/env python3
#! -*- coding: utf-8 -*-
name = {
'vertebrado' : {
'ave' : {
'carnivoro' : 'aguia',
'onivoro' : 'pomba'
},
'mamifero' : {
'onivoro' : 'homem',
'herbivoro' : 'vaca'
}
},
'invertebrado' : {
'inseto' : {
'hematofago' : 'pulga',
'herbivoro' : 'lagarta'
},
'anelideo' : {
'hematofago' : 'sanguessuga',
'onivoro' : 'minhoca'
}
}
}
a = input()
b = input()
c = input()
print(name[a][b][c])
【实现代码】
#! /usr/bin/env python3
#! -*- coding: utf-8 -*-
a = input()
b = input()
c = input()
if a == 'vertebrado':
if b == 'ave':
if c == 'carnivoro':
print('aguia')
else:
print('pomba')
else:
if c == 'onivoro':
print('homem')
else:
print('vaca')
else:
if b == 'inseto':
if c == 'hematofago':
print('pulga')
else:
print('lagarta')
else:
if c == 'hematofago':
print('sanguessuga')
else:
print('minhoca')
3.4 AcWing 660. 零食
【题目描述】
某商店出售种零食,零食编号为。
种零食的价目表如下所示:
零食种类 价格
零食 1 R$ 4.00
零食 2 R$ 4.50
零食 3 R$ 5.00
零食 4 R$ 2.00
零食 5 R$ 1.50
现在给定某种零食的编号和数量,请你计算总价值是多少。
【输入格式】
输入包含两个整数和,其中为零食编号,为零食数量。
【输出格式】
输出格式为Total: R$ X
,其中为总价值,保留两位小数。
【数据范围】
【输入样例】
3 2
【输出样例】
Total: R$ 10.00
【代码】
#! /usr/bin/env python3
#! -*- coding: utf-8 -*-
price = [4, 4.5, 5, 2, 1.5]
x, y = map(int, input().split(' '))
print("Total: R$ %.2f" % (price[x - 1] * y))
3.5 AcWing 760. 字符串长度
【题目描述】
给定一行长度不超过的非空字符串(字符串末尾无回车),请你求出它的具体长度。
【输入格式】
输入一行,表示一个字符串。注意字符串中可能包含空格。
【输出格式】
输出一个整数,表示它的长度。
【数据范围】
【输入样例】
I love Beijing.
【输出样例】
15
【代码】
#! /usr/bin/env python3
#! -*- coding: utf-8 -*-
print(len(input()))
3.6 AcWing 721. 递增序列
【题目描述】
读取一系列的整数,对于每个,输出一个的序列。
【输入格式】
输入文件中包含若干个整数,其中最后一个为,其他的均为正整数。
每个整数占一行。
对于输入的正整数,按题目要求作输出处理。
对于最后一行的整数,不作任何处理。
【输出格式】
对于每个输入的正整数,输出一个从的递增序列,每个序列占一行。
【数据范围】
【输入样例】
5
10
3
0
【输出样例】
1 2 3 4 5
1 2 3 4 5 6 7 8 9 10
1 2 3
【代码】
#! /usr/bin/env python3
#! -*- coding: utf-8 -*-
while True:
x = int(input())
if not x:
break
for i in range(1, x + 1):
print(i, end = ' ')
print()
3.7 AcWing 726. 质数
【题目描述】
一个大于的自然数,如果除了和它自身外,不能被其他自然数整除则称该数为质数。
例如就是一个质数,因为它只能被和整除。
现在,给定你个大于的自然数,请你依次判断这些数是否是质数。
【输入格式】
第一行包含整数,表示共有个测试数据。
接下来行,每行包含一个自然数。
【输出格式】
每个测试用例输出一个结果,每个结果占一行。
如果测试数据是质数,则输出X is prime
,其中是测试数据。
如果测试数据不是质数,则输出X is not prime
,其中是测试数据。
【数据范围】
【输入样例】
3
8
51
7
【输出样例】
8 is not prime
51 is not prime
7 is prime
【代码】
#! /usr/bin/env python3
#! -*- coding: utf-8 -*-
import math
n = int(input())
for i in range(n):
x = int(input())
for j in range(2, int(math.sqrt(x)) + 1):
if not x % j:
print("%d is not prime" % (x))
break
else:
print("%d is prime" % (x))
3.8 AcWing 745. 数组的右上半部分
【题目描述】
输入一个二维数组,根据输入的要求,求出二维数组的右上半部分元素的平均值或元素的和。
右上半部分是指主对角线上方的部分,如下图所示,黄色部分为对角线,绿色部分为右上半部分:
【输入格式】
第一行输入一个大写字母,若为S
,则表示需要求出右上半部分的元素的和,若为M
,则表示需要求出右上半部分的元素的平均值。
接下来行,每行包含个用空格隔开的浮点数,表示这个二维数组,其中第行的第个数表示数组元素。
【输出格式】
输出一个数,表示所求的平均数或元素的和的值,保留一位小数。
【数据范围】
【输入样例】
M
-6.5 8.2 0.7 9.0 0.8 -4.3 0.9 -0.0 -7.9 7.1 -1.6 4.6
-9.4 -9.0 1.5 -9.0 -5.1 -0.5 -2.8 -9.1 8.0 -6.9 -5.5 -6.6
-6.8 0.3 3.8 6.1 -9.9 -9.3 8.5 8.6 5.0 6.9 -3.6 -3.0
-0.8 -1.6 -7.3 -6.7 4.4 -9.1 -9.0 1.6 0.3 -6.0 6.0 -0.8
-0.8 -6.0 -4.9 -3.9 6.4 6.2 -4.2 -0.9 7.9 1.6 -8.2 -9.2
7.8 -5.8 -5.8 -5.8 7.2 0.5 -7.9 1.2 -6.8 -9.1 0.3 -1.4
4.3 -7.2 3.5 -6.4 -9.1 -6.0 3.5 -5.1 -5.6 -6.9 -9.1 -2.1
-7.6 -7.1 0.7 -1.7 5.0 -9.0 1.4 -6.2 7.6 4.8 -7.5 4.0
-0.2 0.3 -4.2 8.4 0.7 -6.4 -2.7 3.5 -0.9 3.7 0.9 -2.7
7.1 0.1 8.4 -5.1 -7.9 -0.5 -5.3 -5.7 -4.6 9.6 -8.3 7.0
9.6 -9.8 3.3 -9.9 -6.8 6.7 3.1 1.2 -9.5 -4.3 -1.7 -9.7
1.8 5.0 8.3 -0.7 -0.9 3.2 2.5 0.5 7.3 8.3 0.3 0.9
【输出样例】
-1.2
【代码】
#! /usr/bin/env python3
#! -*- coding: utf-8 -*-
t = input()
sum, cnt = 0, 0
for i in range(12):
row = list(map(float, input().split(' ')))
for j in range(12):
if j > i:
sum += row[j]
cnt += 1
if t == 'M':
sum /= cnt
print("%.1f" % (sum))
3.9 AcWing 756. 蛇形矩阵
【题目描述】
输入两个整数和,输出一个行列的矩阵,将数字到按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
【输入格式】
输入共一行,包含两个整数和。
【输出格式】
输出满足要求的矩阵。
矩阵占行,每行包含个空格隔开的整数。
【数据范围】
【输入样例】
3 3
【输出样例】
1 2 3
8 9 4
7 6 5
【代码】
#! /usr/bin/env python3
#! -*- coding: utf-8 -*-
n, m = map(int, input().split())
res = [[0 for j in range(m)] for i in range(n)]
dx, dy = [-1, 0, 1, 0], [0, 1, 0, -1]
x, y, d = 0, 0, 1
for i in range(1, n * m + 1):
res[x][y] = i
nx, ny = x + dx[d], y + dy[d]
if nx < 0 or nx >= n or ny < 0 or ny >= m or res[nx][ny]:
d = (d + 1) % 4
nx, ny = x + dx[d], y + dy[d]
x, y = nx, ny
for i in range(n):
for j in range(m):
print(res[i][j], end = ' ')
print()
3.10 AcWing 823. 排列
【题目描述】
给定一个整数,将数字排成一排,将会有很多种排列方法。
现在,请你按照字典序将所有的排列方法输出。
【输入格式】
共一行,包含一个整数。
【输出格式】
按字典序输出所有排列方案,每个方案占一行。
【数据范围】
【输入样例】
3
【输出样例】
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
【代码】
#! /usr/bin/env python3
#! -*- coding: utf-8 -*-
n = int(input())
res = [0 for i in range(n)]
st = [False for i in range(n + 1)]
def dfs(u):
if u == n:
for i in range(n):
print(res[i], end = ' ')
print()
else:
for i in range(1, n + 1):
if not st[i]:
res[u] = i
st[i] = True
dfs(u + 1)
st[i] = False
dfs(0)