蓝桥杯python语法速通

Python 语法

python代码有严格的缩进限制,不同的缩进代表了不同的含义,请不要随意缩进!!!

变量类型

python不需要 预先声明变量,并且没有显式的类型声明,python 代码最后不需要加分号

a = b = c = 1 
# 把 a , b , c 都赋值为1

d,e,f = 777 , 3.14159 , "eeee" 
# 把d赋值为777, e赋值为小数3.14159 , f赋值为字符串“eee"

数字

​ 数字类型的变量理论上可以存储无限大的数,但是会受限于计算机的运算速度。

str(字符串类型)

​ 不论双引号"ABC",还是单引号 ‘ABC’ ,代表的都是字符串(即使是'a' ,也是长度为一的字符串,而不是字符)

列表(list)

​ 列表使用中括号表示。

​ 类似于C中的数组,能够存储一些数据,支持按下标找值。列表中可以存放任何类型,并且单个列表可以存放多种类型

a = [0,[1,2,2,5],[[1]] ]
# a[0] = 0
# a[1] = [1,2,2,5]
### a[1][0] = 1 , a[1][3] = 5
# a[2] = [[1]]
# a[2][0][0] = 1
### a[2][0][1] 下标越界!!! 

元组(tuple)

​ 元组用小括号()表示

​ 和列表类似,常用来函数返回多个值

tup = (111,222,"abc") # tup是一个元组
print(type(tup))# <class 'tuple'>
print(tup[1]) # 222
def func():
    name = 'ttt'
    age = 114
    score = 514
    return name,age,score
print(func())#('ttt', 114, 514)

元组同样可以使用下标来访问

集合(set)

​ 集合中的元素无序,不重复。

a = {-1,3,-5,3,2,4,4,4}
print(a)#{2, 3, 4, -5, -1}

字典(dict)

​ 字典,顾名思义,就是用来查找值的,每一项是一个键值对,我们通过键可以找到对应的值,每个键值对表示为 key : value .即一个冒号,左边是键,右边是值。

dic = {"mike" : 1000, "Lisa" : 111 , 114 : 514}

其中"mike", “Lisa”,114是键, 1000,111,514 是对应的值。

假设dic是一个字典,使用dic.pop(“mike”) 来清除mike这个键值对。 使用dic[“aaa”] = “ttt” 来加入一个键值对。

如果我们要判断一个键值对是否存在,应该使用

dic = {"mike" : 1000, "Lisa" : 111 , 114 : 514}
dic[222] = 456
print(dic[222])
print(dic.get(222))
dic.pop(114)
if(not dic.get(114)):
    print("No!")

输入输出

输入input

输入使用input() 函数,input函数有以下几个特性:

  1. 会直接读取完一整行
  2. 读入后的数据以字符串的形式表示
a = input()
print(type(a))
# 输入
## 123 456
# 输出
## <class 'str'>

我们经常需要使用强制类型转换来变成其他形式的值

inum = int(input())

如果一行有多个整数需要输入怎么办???

# 输入
# 1 2 3 4 5 6 7 8 99
## 1.使用input输入一整行
lst = input()# lst = '1 2 3 4 5 6 7 8 99'
## 2.使用字符串的split()函数来将一个字符串分隔开(默认是遇到空格分隔)
lst = input().split() # lst= ['1', '2', '3', '4', '5', '6', '7', '8', '99']
## 3.使用map函数对列表的每一项进行int操作,此时lst是一个map类型
lst = map(int,input().split()) #此时只可以对lst进行遍历,不可以进行下标访问
## 4. 使用list强制转换为列表
lst = list(map(int,input().split()))# list = [1, 2, 3, 4, 5, 6, 7, 8, 99]

输出

格式化输出:

在字符串前加f,然后字符串内加大括号,{}

a = 55
b = "bbb"
print(f"a is {a}, b is {b}")

确定小数位数用:

a = 55.00
print("{:.5f}".format(a))# 保留5位小数

不想让print之后换行

print("abc",end=" ")

print("bcd",end="")

判断

判断和C中的判断基本一样,区别在于 C中的else if 要换成elif

//C code
int a = 77;
if(a < 60){
    printf("Bad!\n");
}else if(a < 80){
    printf("Good!\n");
}else{
    printf("Perfect!");
}
#python code
a = 77
if a < 60 :
   print("Bad")#这里必须要缩进
elif (a < 80):
    print("Good!")
else:
    print("Perfect!")
#Tab键就是缩进

循环

循环一般使用for和while循环:

for循环

for循环用来遍历某个可枚举的类型(集合,列表,元组,字典,range等等)

先来看看range

#只有一个参数时range(n)表示从0 ~ n-1
range(5) # 0 1 2 3 4
# 有两个参数时range(l,r)表示区间[l,r)
# 区间是左闭右开的
range(5,12) # 5 6 7 8 9 10 11
# 有三个参数时range(l,r,step),表示从l到r(取不到r),步长为step
range(3,8,1) # 3, 4 5 6 7
range(3,8,2) # 3 5 7
range(9,3,-2) # 9 7 5 

因此我们的for循环应该这么用:

for i in range(8):
    print(i)# 0 ~ 7
lst = [5,7,"bcc",123,677.001]
for i in lst:
	print(i) #依次输出每一项

while循环

while循环和C中的用法一样,不再赘述

特殊性质

Python中的循环可以加else,表示循环正常结束时进行的操作:(如果使用break中断循环就不会进行else中的操作)

for i in range(5):
    print(i)
else :
    print(777)

运算

和C相同的运算就不说了,下面说一下不同:

  1. 整数除法//

    a,b = 5,2
    print(a//b) #5 // 2 = 2
    
  2. 求次方 **

    a,b = 5,3
    print(a**b)#5 * 5 * 5 = 125
    
  3. 合并数据类型 + *

    # str
    str1,str2 = "AB","CD"
    print(str1+str2)#ABCD
    print(str1 * 3) #ABABAB
    # list
    lst1 = [1,2,3]
    lst2 = [3,4,5]
    print(lst1+lst2)#[1, 2, 3, 3, 4, 5]
    print(lst1*3)#[1, 2, 3, 1, 2, 3, 1, 2, 3]
    

一些小技巧(注意点)

快读

  1. 使用input输入数据比较慢,有时候可能会导致超时,需要换成sys.stdin.readline()

    import sys #引入sys库
    num = int(sys.stdin.readline())
    

    B2056 求整数的和与均值 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

    使用input耗时85ms

    n = int(input())
    sum = 0
    for i in range(n):
        num = int(input())
        sum += num
    print('{} {:.5f}'.format(sum,sum/n))
    

    使用readline耗时58ms

    import sys
    n = int(sys.stdin.readline())
    sum = 0
    for i in range(n):
        num = int(sys.stdin.readline())
        sum += num
    print('{} {:.5f}'.format(sum,sum/n))
    

二维数组的定义:

错误样例:

 arr = [[0] * 100] * 50

此时当我们使用 a r r [ 5 ] [ 2 ] arr[5][2] arr[5][2], 修改第6行第3列这个元素时,会导致整个第3列都变成这个值(我也搞不懂为什么)

正确示范:

append函数用来向列表的末尾插入一个元素

arr = []
for i in range(50):
    arr.append([0] * 100)

快速幂

python的pow函数内置了快速幂

P1226 【模板】快速幂 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

C代码如下:

#include<stdio.h>
#define int long long
int quickpow(int x,int n,int p){
    int ans = 1;
    while(n){
        if(n & 1) 
            ans = ans * x % p;
        x = x * x % p;
        n >>= 1;
    }
    return ans;
}
signed main(){
    int a,b,p;
    scanf("%lld %lld %lld",&a,&b,&p);
    printf("%lld^%lld mod %lld=%lld",a,b,p,quickpow(a,b,p));
}

python代码如下:

a,b,p = list(map(int,input().split()))
print(f"{a}^{b} mod {p}={pow(a,b,p)}")

高精度

​ python内置了高精度运算

P1601 A+B Problem(高精) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

a,b = int(input()),int(input())
print(a+b)

P1480 A/B Problem - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

a,b = int(input()),int(input())
print(a//b)

数据结构

常用的数据结构

队列queue

import queue
q = queue.Queue()

提取队头元素(可能导致下标越界,所以使用前要确保(或者判断一下)队列的大小)

print(q.queue[0])
## 同理可以通过queue[1]来获取或更改队列的第二项元素,等等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值