Python 基础语法

  • 一行可以写多个语句,但每一条后面得打 ;
  • 一个语句可以写多行,但除了最后一行每一行后面得打 \。如果语句中有 [](){} 就不用。
  • python 没有大括号,只有缩进,空格数量随意,但是整个代码中的缩进空格数量必须严格相同。
  • 在 python 中 ' '" "''' ''' 基本一样,都可用作字符串标识,唯一的区别在于 ''' ''' 可以分多行写,且可以当作多行注释。
  • python 单行注释以 # 开头。

数据类型

数字

整型(int):整数。

浮点型(float):小数。

复数(complex):以 a+bj 的形式来表示,其中 a a a 为实部, b b b 为虚部,皆为 float。

字符串(str)

由数字、字母、下划线组成的一串字符。在 python 中,字符串是只读的。

下标方式有两种:

s =   a b c d e f s 0 s 1 s 2 s 3 s 4 s 5 s − 6 s − 5 s − 4 s − 3 s − 2 s − 1 \begin{aligned}s=\ &\texttt a&\texttt b&&\texttt c&&\texttt d&&\texttt e&&\texttt f\\&s_0&s_1&&s_2&&s_3&&s_4&&s_5\\&s_{-6}&s_{-5}&&s_{-4}&&s_{-3}&&s_{-2}&&s_{-1}\end{aligned} s= as0s6bs1s5cs2s4ds3s3es4s2fs5s1

为方便叙述,默认使用非负下标。

s[a:b:c] 截取 s s s 下标在 [ a , b ) [a,b) [a,b) 范围内的部分且截取步长为 c c c。若 a a a 为空,则从头开始取;若 b b b 为空,则取到末尾;若 c c c 为空,则挨个取。

a+b 表示把 a a a b b b 两个字符串连起来。

a*b 表示把 a a a 重复 b b b 遍。

跨行字符串需要用三引号括起来。

r'\n\t\v\f' 不处理转义字符,直接按照原始字符串处理。

转义字符:

  • \ 在行尾为续行符。
  • \\ ⇒ \Rightarrow \
  • \' ⇒ \Rightarrow '
  • \" ⇒ \Rightarrow "
  • \a ⇒ \Rightarrow 响铃,输出后电脑会响铃。
  • \b ⇒ \Rightarrow Backspace
  • \000 ⇒ \Rightarrow 空字符
  • \n ⇒ \Rightarrow Enter
  • \v ⇒ \Rightarrow 竖向 Tab
  • \t ⇒ \Rightarrow 横向 Tab
  • \r 将光标移到行首。
  • \f 换页
  • \八进制数\x十六进制数 代表其对应的字符。
  • 其他的按照原字符处理。

列表(list)

[] 括起来的一堆有序元素,可以为数字、字符、字符串甚至是列表。内部对象类型可以不一致。

下标、切割、连接、重复同字符串。

元组(tuple)

() 括起来的一堆有序元素,除了只读以外和列表用法一样。

字典(dict)

{} 括起来的一堆无序元素,类似 C++ 中的 map,定义方式:

a={}
a[x]=y
a[y]=z

或是

a={x:y,y:z}

x x x y y y z z z 可以是任意不同类型,这样访问 a[x] 返回的就是 y,访问 a[y] 返回的就是 z

集合(set)

一堆无序元素,由 {} 括起来的 非空集set() 定义的任意集。内部元素不可重。只读集合为 frozenset

基本操作:

  • 差集:a-b
  • 并集:a|b
  • 交集:a&b
  • 不同时存在的元素:a^b

类型转换

一般格式:转换类型(转换对象)

一些特殊的:

  • int(x,base) x x x 转换为 b a s e base base 进制下的整数, b a s e base base 默认为 10 10 10,若不是 10 10 10,则 x x x 需要以字符串的形式输入;
  • complex(x[,y]) 创建复数 ( x + y i ) (x+yi) (x+yi)
  • repr(x) 将对象 x x x 转化为一个字符串。
  • eval(x)repr(x) 的反函数,即将字符串 x x x 转化为一个对象。
  • chr(x) 将整数 x x x 转为字符。
  • ord(x) 将字符 x x x 转为整数。
  • hex(x)oct(x) 将整数 x x x 分别转化为十六进制、八进制的字符串。

推导式

列表推导式

[表达式 for 变量 in 列表 if 条件]

后面的 if 条件 可有可无。

字典推导式

同上。

集合推导式

同上。

元组推导式

同上。

运算符

加减乘除模、比较运算符、位运算符和 C++ 都一样,x**y 返回 x y x^y xyx//y 返回 ⌊ x y ⌋ \lfloor\frac x y\rfloor yx

赋值运算符也和 C++ 一样,在算术运算符后面加个 = 就完事了,还有一个海象运算符 := 在表达式内部给变量赋值。

逻辑运算符就是 andornot

成员运算符即 innot in,判断元素是否在序列中。

身份运算符即 isis not,判断两个标识符是不是引用自同一对象。

优先级如下:

  1. **
  2. ~+-(注意这里是正负号)
  3. */%//
  4. +-(这里才是加减号)
  5. >><<
  6. &
  7. |^
  8. <=<>=>
  9. ==!=
  10. 赋值运算符
  11. 身份运算符
  12. 成员运算符
  13. 逻辑运算符

可添加括号打破优先级。

输入输出

输入

a=input()

即可,但注意默认输入进来的会处理成字符串类型。

如果想要提示信息,就是:

a=input('Please input a:')

一口气输多几个就可以:

a,b,c=(input().split())

输出

print(x)

相当于

cout<<x<<endl;
print(x,y)

相当于

cout<<x<<' '<<y<<endl;
print(x,end=',')

相当于

cout<<x<<',';

str.rjust(x) 可将字符串按照 x x x 位右对齐,并在左边添加空格;str.ljust(x) 可将字符串按照 x x x 位左对齐,并在右边添加空格;str.center(x) 可将字符串按照 x x x 位居中,并在两边添加空格;str.zfill(x) 可将字符串按照 x x x 位右对齐,并在左边添 0

answer=0
print(f'The answer is {answer}')

的输出为 The answer is 0。花括号内会计算表达式结果并替换到字符串的相应位置。

如果想保留三位小数点,可以这样:

import math
print('{0:.3f}'.format(math.pi))

文件

f=open('in.txt',mode)

以 mode 模式打开 in.txt。其中,mode 的取值如下:

  • 't' 文本模式,默认。
  • 'x' 写模式且新建一个文件。
  • 'b' 二进制模式打开。
  • '+' 更新文件,可读可写。
  • 'r' 只读。
  • 'rb' 二进制格式只读。
  • 'r+' 读写。
  • 'rb+' 二进制格式读写。
  • 'w' 只写。
  • 'wb' 二进制格式只写。
  • 'w+' 读写。
  • 'wb+' 二进制格式读写。
  • 'a' 追加(只写)。
  • 'ab' 二进制格式追加(只写)。
  • 'a+' 追加(读写)。
  • 'ab+' 二进制格式追加(读写)。

其中,除了以 r 开头的,都会在找不到文件的情况下在当前目录创建对应的新文件进行读写。以 w 开头的打开文件时会清空文件,以 a 开头的打开文件时会保留文件原内容并将指针置于文件尾。

open 函数将返回一个文件对象。

freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);

相当于

open('in.txt');
open('out.txt','w');

假如我们把 open 函数返回的文件对象存储在 f f f 中,则 f.read(size) 将读取 s i z e size size 数目的字符。如果 s i z e size size 为空,则读取该文件中的所有数据。

f.readline() 读取文件中单独一行。

f.readlines() 读取文件中所有行。

f.write(str) 向文件中写入字符串 s t r str str,并返回写入的字符数。

f.tell() 返回当前文件指针在文件中所处的位置,即文件的第几个字节。

f.seek(x,y) 移动当前文件指针的位置。

  • y = 0 y=0 y=0,默认值,文件指针从头开始往后移动 x x x 个字节。
  • y = 1 y=1 y=1,文件指针从当前位置开始往后移动 y y y 个字节。
  • y = 2 y=2 y=2。文件指针从尾开始往前移动 y y y 个字节。

f.close() 关闭文件。

语句

条件语句

if x>0:
	print('正数')
elif x<0:
	print('负数')
else:
	print('0')

相当于

if(x>0) puts("正数");
else if(x<0) puts("负数");
else puts("0");

循环语句

while i<=n:
	i+=1

相当于

while(i<=n) i++;
while i<=n:
	i+=1
elseprint('i>n')

中,while 中的语句会正常执行,当循环正常退出(即非 break 强制退出)后会执行。for...else 同。

a=[1,2,3,4,5]
for i in a
	print(i)

相当于

for(auto i:a) printf("%d\n",i);
for i in range(1,10,3)
	print(i)

相当于

for(int i=1;i<10;i+=3) printf("%d\n",i);

breakcontinue 用法同 C++。

迭代器

同 C++,用于遍历容器。

iter(list) 用于创建一个 list 的迭代器。

可以用在 for 循环中遍历整个容器:

it=iter(list)
for i in it
	print(i)

也可以使用 next() 函数:

import sys
it=iter(list)
while True:
	try:
		print(next(it))
	except StopIteration:
		sys.exit()

函数

一个 C++ 的求斐波那契数列的函数:

int fib(int n)
{
	if(n<3) return 1;
	else return fib(n-1)+fib(n-2);
}

写成 Python 就是:

def fib(n):
	if n<3:
		return 1
	else
		return fib(n-1)+fib(n-2)

不定长函数的写法:

def func(arg,*args)

前面数个 arg 是固定参数,args 是不固定参数,会以元组的形式传入。如果是两个星号,就会以字典的形式传入。

λ \lambda λ 表达式是 Python 一个重要的特点,

sum=lambda a,b:a+b

调用时直接像普通函数一样 sum(a,b) 调用就行了。

class node:
	x=0
	y=0
	def sum(self,x,y):# self 为必须的一个参数
		return x+y
	def __sum(self,x,y):# 两个下划线开始的为私有方法
		return x+y
	def __sum__(self,other):# 两边都是两个下划线为重载运算符
		return node(self.x+other.x,self.y+other.y)
	def __init__(self,x,y):# 构造函数
		self.x=x
		self.y=y
class edge(node):# 继承
	...

说了这么多,还是拿个高精度的题来试试水吧。

P1009 【NOIP1998 普及组】 阶乘之和

计算

S = ∑ i = 1 n i ! S=\sum_{i=1}^ni! S=i=1ni!

其中 1 ≤ n ≤ 50 1\le n\le 50 1n50

这用 Python 岂不是简简单单、有手就行?

n=int(input())
fac=1
sum=0
for i in range(1,n+1):
    fac*=i
    sum+=fac
print(sum)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值