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开发环境

django基础 python django pyc_django基础 python

  • 完全无需配置本地环境。利用AC Terminal直接在云端开发,使用工具:vimtmux等。不推荐在本地开发。
  • 本项目会涉及多台服务器间的网络通信,如果在本地开发,未来不方便调试和部署。
  • 在本地开发无法统一开发环境,部分Python包在Windows系统上安装困难。
  • 需要租一台具有公网IP的云服务器,并安装Docker
  • 服务器配置无要求。
  • 后期可以利用Docker随意迁移。
  • 在AC Terminal的/var/lib/acwing/docker/images/目录下给大家提供统一的课程Docker镜像。
  • 标准化开发环境,避免未来出现软件版本不兼容。
  • 省去配环境的环节。
  • 使用AC Git管理项目代码。
  • 方便回滚代码。

3. Python语法题

Python基础语法教程可以见:Python官方教程

3.1 AcWing 608. 差

【题目描述】
读取四个整数django基础 python django pyc_python_02,并计算django基础 python django pyc_学习_03的值。

【输入格式】
输入共四行,第一行包含整数django基础 python django pyc_后端_04,第二行包含整数django基础 python django pyc_后端_05,第三行包含整数django基础 python django pyc_学习_06,第四行包含整数django基础 python django pyc_后端_07

【输出格式】
输出格式为DIFERENCA = X,其中django基础 python django pyc_django_08django基础 python django pyc_学习_03的结果。

【数据范围】
django基础 python django pyc_django基础 python_10

【输入样例】

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. 倍数

【题目描述】
读取两个正整数值django基础 python django pyc_后端_04django基础 python django pyc_后端_05
如果其中一个是另一个的整数倍,则输出Sao Multiplos,否则输出Nao sao Multiplos

【输入格式】
共一行,两个整数django基础 python django pyc_后端_04django基础 python django pyc_后端_05

【输出格式】
按题目所述,输出结果。

【数据范围】
django基础 python django pyc_django基础 python_15

【输入样例】

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. 动物

【题目描述】
给定你三个葡萄牙语单词,这些词将根据下表从左到右定义一个动物。
请你确定并输出这个动物的名称。

django基础 python django pyc_python_16

【输入格式】
根据上表,输入包含三个单词,每行一个,用以识别动物,单词由小写字母构成。

【输出格式】
输出识别出的动物的名称。

【输入样例】

vertebrado
mamifero
onivoro

【输出样例】

homem

django基础 python django pyc_学习_17实现代码】

#! /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])

django基础 python django pyc_django_18实现代码】

#! /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. 零食

【题目描述】
某商店出售django基础 python django pyc_python_19种零食,零食编号为django基础 python django pyc_django基础 python_20
django基础 python django pyc_python_19种零食的价目表如下所示:

零食种类        价格
零食  1         R$ 4.00
零食  2         R$ 4.50
零食  3         R$ 5.00
零食  4         R$ 2.00
零食  5         R$ 1.50

现在给定某种零食的编号和数量,请你计算总价值是多少。

【输入格式】
输入包含两个整数django基础 python django pyc_django_22django基础 python django pyc_django基础 python_23,其中django基础 python django pyc_django_22为零食编号,django基础 python django pyc_django基础 python_23为零食数量。

【输出格式】
输出格式为Total: R$ X,其中django基础 python django pyc_django_08为总价值,保留两位小数。

【数据范围】
django基础 python django pyc_python_27
django基础 python django pyc_python_28

【输入样例】

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. 字符串长度

【题目描述】
给定一行长度不超过django基础 python django pyc_django_29的非空字符串(字符串末尾无回车),请你求出它的具体长度。

【输入格式】
输入一行,表示一个字符串。注意字符串中可能包含空格。

【输出格式】
输出一个整数,表示它的长度。

【数据范围】
django基础 python django pyc_学习_30

【输入样例】

I love Beijing.

【输出样例】

15

【代码】

#! /usr/bin/env python3
#! -*- coding: utf-8 -*-

print(len(input()))

3.6 AcWing 721. 递增序列

【题目描述】
读取一系列的整数django基础 python django pyc_django_08,对于每个django基础 python django pyc_django_08,输出一个django基础 python django pyc_后端_33的序列。

【输入格式】
输入文件中包含若干个整数,其中最后一个为django基础 python django pyc_学习_34,其他的均为正整数。
每个整数占一行。
对于输入的正整数,按题目要求作输出处理。
对于最后一行的整数django基础 python django pyc_学习_34,不作任何处理。

【输出格式】
对于每个输入的正整数django基础 python django pyc_django_08,输出一个从django基础 python django pyc_django_37的递增序列,每个序列占一行。

【数据范围】
django基础 python django pyc_django基础 python_38

【输入样例】

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. 质数

【题目描述】
一个大于django基础 python django pyc_学习_39的自然数,如果除了django基础 python django pyc_学习_39和它自身外,不能被其他自然数整除则称该数为质数。
例如django基础 python django pyc_学习_41就是一个质数,因为它只能被django基础 python django pyc_学习_39django基础 python django pyc_学习_41整除。
现在,给定你django基础 python django pyc_django_44个大于django基础 python django pyc_学习_39的自然数,请你依次判断这些数是否是质数。

【输入格式】
第一行包含整数django基础 python django pyc_django_44,表示共有django基础 python django pyc_django_44个测试数据。
接下来django基础 python django pyc_django_44行,每行包含一个自然数django基础 python django pyc_django_08

【输出格式】
每个测试用例输出一个结果,每个结果占一行。
如果测试数据是质数,则输出X is prime,其中django基础 python django pyc_django_08是测试数据。
如果测试数据不是质数,则输出X is not prime,其中django基础 python django pyc_django_08是测试数据。

【数据范围】
django基础 python django pyc_django基础 python_52
django基础 python django pyc_django基础 python_53

【输入样例】

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. 数组的右上半部分

【题目描述】
输入一个二维数组django基础 python django pyc_python_54,根据输入的要求,求出二维数组的右上半部分元素的平均值或元素的和。
右上半部分是指主对角线上方的部分,如下图所示,黄色部分为对角线,绿色部分为右上半部分:

django基础 python django pyc_学习_55

【输入格式】
第一行输入一个大写字母,若为S,则表示需要求出右上半部分的元素的和,若为M,则表示需要求出右上半部分的元素的平均值。
接下来django基础 python django pyc_python_56行,每行包含django基础 python django pyc_python_56个用空格隔开的浮点数,表示这个二维数组,其中第django基础 python django pyc_django基础 python_58行的第django基础 python django pyc_学习_59个数表示数组元素django基础 python django pyc_学习_60

【输出格式】
输出一个数,表示所求的平均数或元素的和的值,保留一位小数。

【数据范围】
django基础 python django pyc_学习_61

【输入样例】

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. 蛇形矩阵

【题目描述】
输入两个整数django基础 python django pyc_学习_62django基础 python django pyc_django_63,输出一个django基础 python django pyc_学习_62django基础 python django pyc_django_63列的矩阵,将数字django基础 python django pyc_学习_39django基础 python django pyc_django基础 python_67按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。

【输入格式】
输入共一行,包含两个整数django基础 python django pyc_学习_62django基础 python django pyc_django_63

【输出格式】
输出满足要求的矩阵。
矩阵占django基础 python django pyc_学习_62行,每行包含django基础 python django pyc_django_63个空格隔开的整数。

【数据范围】
django基础 python django pyc_django_72

【输入样例】

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. 排列

【题目描述】
给定一个整数django基础 python django pyc_学习_62,将数字django基础 python django pyc_python_74排成一排,将会有很多种排列方法。
现在,请你按照字典序将所有的排列方法输出。

【输入格式】
共一行,包含一个整数django基础 python django pyc_学习_62

【输出格式】
按字典序输出所有排列方案,每个方案占一行。

【数据范围】
django基础 python django pyc_后端_76

【输入样例】

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)