Python教程

Python 基础语法

本文主要是介绍Python 基础语法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  • 一行可以写多个语句,但每一条后面得打 ;
  • 一个语句可以写多行,但除了最后一行每一行后面得打 \。如果语句中有 [](){} 就不用。
  • python 没有大括号,只有缩进,空格数量随意,但是整个代码中的缩进空格数量必须严格相同。
  • 在 python 中 ' '" "''' ''' 基本一样,都可用作字符串标识,唯一的区别在于 ''' ''' 可以分多行写,且可以当作多行注释。
  • python 单行注释以 # 开头。

数据类型

数字

整型(int):整数。

浮点型(float):小数。

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

字符串(str)

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

下标方式有两种:

\[\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[a:b:c] 截取 \(s\) 下标在 \([a,b)\) 范围内的部分且截取步长为 \(c\)。若 \(a\) 为空,则从头开始取;若 \(b\) 为空,则取到末尾;若 \(c\) 为空,则挨个取。

a+b 表示把 \(a\)、\(b\) 两个字符串连起来。

a*b 表示把 \(a\) 重复 \(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\)、\(y\)、\(z\) 可以是任意不同类型,这样访问 a[x] 返回的就是 y,访问 a[y] 返回的就是 z

集合(set)

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

基本操作:

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

类型转换

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

一些特殊的:

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

推导式

列表推导式

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

后面的 if 条件 可有可无。

字典推导式

同上。

集合推导式

同上。

元组推导式

同上。

运算符

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

赋值运算符也和 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\) 位右对齐,并在左边添加空格;str.ljust(x) 可将字符串按照 \(x\) 位左对齐,并在右边添加空格;str.center(x) 可将字符串按照 \(x\) 位居中,并在两边添加空格;str.zfill(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.read(size) 将读取 \(size\) 数目的字符。如果 \(size\) 为空,则读取该文件中的所有数据。

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

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

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

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

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

  • \(y=0\),默认值,文件指针从头开始往后移动 \(x\) 个字节。
  • \(y=1\),文件指针从当前位置开始往后移动 \(y\) 个字节。
  • \(y=2\)。文件指针从尾开始往前移动 \(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
else:
	print('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=\sum_{i=1}^ni! \]

其中 \(1\le n\le 50\)。

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

n=int(input())
fac=1
sum=0
for i in range(1,n+1):
    fac*=i
    sum+=fac
print(sum)
这篇关于Python 基础语法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!