Python基础

第一章:初识Python

1.三双引号“““”””可以包含换行符\n,和制表符\t,以及其他特殊字符。

para_str=""" 多行字符串可以使用制表符\t,也可使用换行符\n,甚至是代码#include<stdio.h>
 int main()
 {
 int a = 12;
 printf(a);
 }"""
print(para_str)
输出如下:

  

2. 字符串:有n个字符的字符串,从左到右编号为0,1,2,...,n-1;从右到左编号为-1,-2,...,-n。

字符串字符不可修改

用in,not in判断子串

a = "Hello"
b = "Python"

print('el' in a)
print('th' not in b)
输出如下:

  

3.字符串和数的转换

int(x):把字符串转换成整数

float(x):转换成小数

str(x):把x转换成字符串

eval(x):把字符串x看作一个表达式,求其值

 

   s = input()输入的均为字符串

4.初识列表

输入两个整数求和,默认空格、制表符、换行符

s = input()
numbers = s.split(',')
print(int(numbers[0])+int(numbers[1]))

第二章:基本运算

1.算术运算中 / 结果是小数

// 求商,结果是整数

**求幂

2.逻辑运算符

and or not

print(2.0 and True)

3.条件分支语句

if int(input()) == 5:
    print("a",end="")
    print("b")

4.字符串切片

若S是一个字符串,则S[x:y]是S的下标x到下标y的左边那个字符构成的子串

print("12345"[0:-1])

输出:1234

 5.输出格式控制

%s字符串、%d整数、%f小数、%.nf保留n位小数,注意四舍六入

格式控制符只能出现在字符串中

h = 1.768
print("My name is %s,I am %.2fm tall" % ("tom",h))

 第三章 循环语句

1.for

for <variable> in <sequence>:
    <statements 1>
    <statements 2>

sequence可以是range(),也可以是是字符串、列表、元组、字典、集合

for i in range(0,10,3):
print(i)
输出:
0
3
6
9

  

for i in range(26):
    print(chr(ord('a')+i),end='')
连续输出26个字符

2.while

 第四章 函数

这是判素函数

def IsPrime(n):
    if n<= 1 or n % 2==0 and n != 2:
        return False
    elif n == 2:
        return True
    else:
        for i in range(3,n,2):
            if n % i == 0:
                return False
            if i * i > n:
                break
    return True

for i in range(100):
    if(IsPrime(i)):
        print(i,end = " ")

  递归=概念的定义使用到了这个概念本身

 

台阶问题:
def ways(n):
    if n == 1:
        return 1
    elif n == 2:
        return 2
    else:
        return ways(n-1)+ways(n-2)

print(ways(4))

  

汉诺塔:
def Hanoi(n,src,mid,dest):
    #将src座上的n个盘子,以mid为中转,移动到dest座
    if n == 1:#只需移动一个盘子
        # 直接将盘子从src移动到dest即可
        print(src + "->" + dest)
        return
    Hanoi(n-1,src,dest,mid) #先将n-1个盘子从src移到mid
    print(src + "->" + dest)#再将一个盘子从src移到dest
    Hanoi(n-1,mid,src,dest) #最后将n-1个盘子从mid移到dest

n  = int(input())
Hanoi(n,'A','B','C')

第五章 字符串和元组

组合数据类型:字符串 str、元组 tuple、列表 list、字典 dict、集合 set

isinstance(x,y)函数查询数据x是否是类型y

print(len({'tom':2,'jack':3}))

 Python中的变量都是指针

a is b 为True 说明a和b指向同一个地方

a == b 说明指向地方放的值相同

a = b 将a和b指向同一个地方

 转义字符:

print("Hello\nworld\tok\"1\\2")

输出:
Hello
world	ok"1\2

 规定'\'不转义的字符串

print(r'ab\ncd')

输出:
ab\ncd

  

# 字符串切片
# a[x:y]表示字符串a里从下标x到下标y那一部分的子串
a = 'ABCD'
print(a[1:2])
print(a[0:-1])
print(a[2:])
print(a[:3])

# a[x:y:z]表示,从a[x]到a[y],每z个字符取一个,最后拼起来
print('abcde'[::-1])
#适用与元组和列表

  

'''
字符串的split函数详解
s.split(x)
用字符x做分隔符分割字符串s,得到分割后的列表
两个分隔符之间会被分割出一个空串
'''

a = '12..34.5346...a'
print(a.split('.'))

  

'''
用多个分割串进行分割
'''
import re
a = 'Beautiful, is; better**than\nugly'
print(re.split(';| |,|\*\*|\n',a))

 字符串的函数

# 求子串出现次数
s = 'AAA'
print(s.count('AA'))

upper、lower转大小写
s = '1234abc567abc12'
print(s.find('ab')) #'ab'第一次出现的下标
print(s.rfind('ab')) #rfind从尾巴开始找
try:
s.index('afb') #找不到'afb',因此产生异常
except Exception as e:
print(e)
s = '1234abc567abc12'
print(s.index('ab',5)) #find函数还可以指定查找位置

  replace替换

s = "1234abd567abc12"
b = s.replace('abc','ABC')
print(b)

  

 

 

 

 元组

一个元组由数个逗号分隔的值组成,前后可加括号

元组不能修改、不可增删、不可对元素赋值、不可修改元素顺序

t = 1234,54321,'hello'
print(t[0])
print(t)
u = t,1
print(u)
print(u[0][1])
t[0][0]=8888

第六章 列表

列表可以增删元素、元素可以修改、元素可以是任何类型

对列表来说,a+=b和a=a+b不同

列表的每个元素都是指针

列表的切片返回新的列表

 列表的排序:

# a.sort()可以对列表a从小到大排序
# sorted(a)返回a经过从小到大排序后的新列表,a不变

a  = [5,7,6,3,4,1,2]
a.sort()
print(a)

a  = [5,7,6,3,4,1,2]
b = sorted(a)
print(a,'\n',b)
a.sort(reverse=True)
print(a)

  

#列表相关函数
'''
append() 添加元素x到尾部
exten() 添加列表x中的元素到尾部
insert(i,x) 将元素x插入到下标i处
remove(x) 删除元素x
reverse() 颠倒整个列表
index() 查找元素x,找到则返回第一次出现的下标,找不到则引发异常

map(function,sequence),可用于将一个序列(列表、元组、集合...)映射到另一个序列
返回一个延时求值对象,可以转换成list、tuple、set...

filter(function,sequence),抽取序列中令function(x)为True的元素x
返回一个延时求值对象,可以转换成list、tuple、set...
'''

'''
def f(x):
    print(x,end="")
    return x*x
a = map(f,[1,2,3])
print(tuple(a))
'''

def f(x):
    return x % 2 == 0

lst = tuple(filter(f,[1,2,3,4,5]))
print(lst)

  列表的拷贝和转换:

a = [1,2,3,4]
b = a[:]
print(b)
#不能深拷贝

#进行深拷贝

import copy

a = [1,[2]]
b  = copy.deepcopy(a)
b.append(4)
print(b)
a[1].append(3)
print(a)
print(b)

  元组、列表和字符串互转:

print(list("hello"))
print("".join(['a','44','c']))
print(tuple("hello"))
print("".join(('a','44','c')))

  第七章 字典和集合

 

scope = {}
scope['a'] = 3
scope['b'] = 4
print(scope)
print('b' in scope)
scope['k'] = scope.get('k',0) + 1
print(scope['k'])
scope['k'] = scope.get('k',0) + 1
print(scope['k'])

  字典的构造:

items = [('name','Gumby'),('age',42)]
d  = dict(items)
print(d)
d = dict(name='Gumby',age=42,height=1.76)
print(d)

  字典相关函数:

'''
clear()  清空字典
keys()   取字典的键的序列
items()  取字典的元素的序列,可用于遍历
values() 取字典的值的序列
pop()    删除键为x的元素,如果不存在,产生异常
copy()   浅拷贝
上述序列,不是list、tuple或set
'''

d = {'name':'Gumby','age':42,'GPA':3.5}
if 'age' in d.keys():
    print(d['age'])
for x in d.items():
    print(x,end=',')

  集合:

 

 

print(set([]))
a = {1,2,2,"ok",(1,3)} #集合的元素顺序不定
print(a)
'''
add(x) 添加元素x,如果已经存在,则不添加
clear() 清空集合
copy() 返回自身的浅拷贝
remove(x) 删除x,若无,则异常
update(x) 将序列x中的元素加入集合
| & - 并、交、差
a^b 对称差 (a|b)-(a&b)
a <= b a是否是b的子集
a < b  a是否是b的真子集
'''

第八章 文件读写、文件夹操作和数据库

'''
open函数打开文件,将返回值放入一个变量,例如f
用f.write()函数写入文件
用f.readlines()函数读取全部文件内容
用f.readline()函数读取文件一行
用f.close()函数关闭文件
用f.read()读取文件全部内容,返回一个字符串
'''
# 创建文件并写入内容
a = open("D:\\code\\pythonl2\\t.txt",'w')
# 用'w'写文件,若文件本来就存在就会被覆盖
a.write('good\n')
a.write('好啊\n')
a.close()

  readlines读:

f  = open('D:\\code\\pythonl2\\t.txt','r')
lines = f.readlines() #每一行都带结尾的换行符 "\n"
f.close()
for x in lines:
    print(x,end="")

  readline读:

try:
infile = open('D:\\code\\pythonl2\\t.txt', 'r')
while True:
data1 = infile.readline() # data1带结尾的换行符"\n",空行也有换行符
if data1 == "": # 此条件满足代表文件结束
break
data1 = data1.strip() # 去掉两头空格,包括结尾的"\n"
print(data1)
infile.close()
except Exception as e:
print(e)

  文件路径:

#获取当前文件夹
import os
print(os.getcwd())
#改变当前文件夹
os.chdir("D:/program")
print(os.getcwd())

  文件夹操作函数:

'''
os.chdir(x) 将当前的文件夹设置成x
os.getcwd() 求程序的当前文件夹
os.listdir(x) 返回一个列表,里面是文件夹x中的所有文件和子文件夹的名字
os.mkdir(x) 创建文件夹
os.path.getsize(x) 获取文件夹x的大小(字节)
os.path.isfile(x) 判断x是不是文件
os.remove(x) 删除文件x
os.rmdir(x) 删除空文件夹x
os.rename(x,y) 将文件或文件夹x改名为y,还可以移动文件或文件夹
shutil.copyfile(x,y) 拷贝文件x到y,若y本来就存在,会被覆盖
'''

  命令行参数:

 统计单个文件单词频率:

import sys
import re

def countFile(filename,words):
    #对filename文件进行词频分析,分析结果记在词典wrods里
    try:
        f = open(filename,"r",encoding="gbk")
    except Exception as e:
        print(e)
        return 0
    txt = f.read()
    f.close()
    splitChars = set([])
    for c in txt:
        if not (c >= 'a' and c <='z' or c >= 'A' and c<= 'Z'):
            splitChars.add(c)
    splitsStr = ""
    for c in splitChars:
        if c in ['.','?','!','"',"'",'(',')','|','*','$','\\','[',']','^','{','}']:
            splitsStr += "\\"+c+"|"
        else:
            splitsStr += c +"|"
    splitsStr += " "
    lst = re.split(splitsStr,txt)
    for x in lst:
        if x == "":
            continue
        lx = x.lower()
        if lx in words:
            words[lx] += 1
        else:
            words[lx] = 1
    return 1

result = {}
if countFile(sys.argv[1],result) == 0:
    exit()
lst = list(result.items())
lst.sort()
f = open(sys.argv[2],"w")
for x in lst:
    f.write("%s\t%d\n"%(x[0],x[1]))
f.close()

  统计多个文件累计单词频率:

import sys
import re
import os

def countFile(filename,words):
    #对filename文件进行词频分析,分析结果记在词典wrods里
    try:
        f = open(filename,"r",encoding="gbk")
    except Exception as e:
        print(e)
        return 0
    txt = f.read()
    f.close()
    splitChars = set([])
    for c in txt:
        if not (c >= 'a' and c <='z' or c >= 'A' and c<= 'Z'):
            splitChars.add(c)
    splitsStr = ""
    for c in splitChars:
        if c in ['.','?','!','"',"'",'(',')','|','*','$','\\','[',']','^','{','}']:
            splitsStr += "\\"+c+"|"
        else:
            splitsStr += c +"|"
    splitsStr += " "
    lst = re.split(splitsStr,txt)
    for x in lst:
        if x == "":
            continue
        lx = x.lower()
        if lx in words:
            words[lx] += 1
        else:
            words[lx] = 1
    return 1

result = {}
lst = os.listdir()
for x in lst:
    if os.path.isfile(x):
        if x.lower().endswith(".txt"):
            countFile(x,result)
lst = list(result.items())
lst.sort(key= lambda x:(-x[1],x[0]))
f = open(sys.argv[1],"w")
for x in lst:
    f.write("%s\t%d\n" % (x[0],x[1]))
f.close()

  

posted @ 2022-09-29 16:15  kangobs  阅读(3)  评论(0编辑  收藏  举报