Python碎碎念(1):基础部分


转载请在文章起始处注明出处,谢谢。

文章转自本人之前博客


0. 写在前面

没有输出的输入,只能算是知识的囤积。

1. 基础

1.1 数学操作符

加:+      
减:-  
乘:*  
除:/
指数:**  
取余:%  
整除://

注意:'**'优先级最高,其次是'*'、'/'、'//'、'%',从左往右,最后是'+'、'-'。

1.2 数据类型

整型:int
浮点型:float
字符串:strs

1.3 字符串的连接和复制

连接:使用'+'      如:'hello' + 'world'
复制:使用'*'      如:'-' * 30

1.4 在变量中保存值

变量就像是计算机内存中的一个盒子。

赋值语句:变量名 赋值操作符('=') 储存的值
变量名:a.只能是一个词  b.包含数字、字母、下划线 c.不能以数字开头
驼峰:helloWorld

1.5 其他

单行注释:#
多行注释:''' '''
输入:input()
输出:print()
字符串中字符个数:len()
数据类型转换:str()  int()  float()

1.6 项目:简易计算器

'''
两位数加减乘除
首先是欢迎界面
'''
print('='*43)
print('Welcome!Please choose the function!')
print('1.ADD 2.SUBTRACT 3.MULTIPLY 4.DIVIDE 5.EXIT')
print('='*43)

while True:    #通过while循环实现多次计算
    choose = input('The number you choose is:')
    if choose.isdigit():#判断输入是否符合要求
        choose = int(choose)#若输入为数字,则将str转换成int

        if choose == 1:#add
            the_first_number = float(input('Please input the first number:'))
            the_second_number = float(input('Please input the second number:'))
            add_answer = the_first_number + the_second_number
            print('The answer is:%r'%add_answer)

        elif choose == 2:#subtract    
            the_first_number = float(input('Please input the first number:'))
            the_second_number = float(input('Please input the second number:'))
            subtract_answer = the_first_number - the_second_number
            print('The answer is:%r'%subtract_answer)

        elif choose == 3:#multiply        
            the_first_number = float(input('Please input the first number:'))
            the_second_number = float(input('Please input the second number:'))
            multiply_answer = the_first_number * the_second_number
            print('The answer is:%r'%multiply_answer)

        elif choose == 4:#divide    
            the_first_number = float(input('Please input the first number:'))
            the_second_number = float(input('Please input the second number:'))
            if the_second_number == 0:#0不能做被除数
                print('The second number should\'t be zero!')
            else:
                divide_answer = the_first_number / the_second_number
                print('The divide answer is:%r'%divide_answer)

        elif choose == 5:#exit
            print('EXIT!\nSee U next time!')
            break
        else:#Exceptions
            print('Your number is out of 1 to 5.\nPlease input the right number.')
    else:#Exceptions
        print('Someting is wrong!\nPlease input the right number!')
        continue 

2. 控制流

程序不仅仅是简单的执行一行代码,而是根据表达式求值结果,决定在什么条件下执行哪些Python命令。

2.1 布尔值

只有两种:True False

2.2 比较操作符

等于:==    注:和赋值操作符'='不同
不等于:!=
大于:>
小于:<
大于等于:>=
小于等于:<=

求值结果为:True False

2.3 布尔操作符

and  or  not

Python先求值not,然后是and,最后是or。

2.4 控制流元素

开始是一个判断语句(’条件’),接下来是一个代码块(’子块’)。

2.5 控制流语句

2.5.1 if、elif、else

if 条件:
    子块
elif 条件:
    子块
else:
    子块

2.5.2 while循环

while 条件:
    子块

2.5.3 break语句、continue语句

程序执行遇到break马上退出while语句。执行遇到continue语句,会马上跳到循环开始处,重新对循环条件求值。

例如:输入名字和口令

while True:                 #while循环
    yourName = 'lee'
    yourPassword = '12345'
    name = input('What is your name?')
    if name != yourName:
        print('Wrong,please input your right name.')
        continue            #continue语句
    print('Hello lee,please input your password.')
    password = input()
    if password == yourPassword:
        break               #break语句
print('Access granted.')

2.5.4 for循环、range()函数

for循环、range()函数可以让代码块执行固定次数。

例如:高斯算数

total = 0
for num in range(101):
    total += num
print(total)

range(起始值,终止值,步长)

2.5.5 等价的while循环

while循环也可以和for循环一样,执行固定次数。

i = 0
while i < 5:
    print('hello world')
    i += 1

注意:break、continue语句仅适用于while、for循环中。

2.5.6 导入模块

内建函数:如print()函数
标准库:每个模块都是一个程序,包含一组相关函数,使用import导入该模块。

import random

random.randint(1,5)

from import语句

from random import *

使用这种形式的import,调用random中的函数,不需要使用random.前缀。为了代码可读性,最好使用普通形式的import语句。

2.5.7 用sys.exit()提前终止程序

import sys
while True:
    response = input()
    if response == 'exit':
        break               #print()还要执行

        #sys.exit()            #print()不执行

print(response)

3. 函数

函数就像是程序内的小程序。

3.1 def语句和参数

可以消除重复,使程序更短、更易读、更容易更新。

def 函数名(参数):
    子块

3.2 返回值和return语句

函数调用求值的结果,叫做返回值。

return 函数应该返回的值或表达式

3.3 None值

表示没有值,是NoneType数据类型的唯一值。

3.4 关键字参数和print()

print()函数可选的变元有end、sep,分别指定在参数末尾打印什么,和在参数之间打印什么来隔开他们。

例如:

print('hello',end='')
print('world')

运行结果为:

helloworld

例如:
print(‘a’,’b’,’c’,sep=’,’)

a,b,c

3.5 局部和全局作用域

在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”,称为“局部变量”。

在函数之外赋值的变量,属于“全局作用域”,称为“全局变量”。

注意:
a.局部变量不能在全局作用域内使用
b.局部作用域不能使用其他局部作用域内的变量
c.全局变量可以在局部作用域中读取
d.技术上来讲,局部变量可以和全局变量名称相同

3.6 global语句

如果需要在函数内修改全局变量,使用global语句。

global 变量名

3.7 异常处理

try:
    子块

except 错误:
    子块

3.8 项目1:猜数字

No.1

import random
number = random.randint(1,20)
i = 1

while True:    
    if i < 7:
        guessNumber = int(input('Guess a number between 1 to 20:'))
        if guessNumber == number:
            print('You take %d times to guess the right number.'%i)
            exit()
        elif guessNumber > number:
            print('Too big.Try again.')
        elif guessNumber < number:
            print('Too low.Try again.')

    else:
        print('Times out.')
        break
    i += 1

No.2

import random
number = random.randint(1,20)

for i in range(1,7):
    guessNumber = int(input('Guess a number between 1 to 20:'))
    if guessNumber > number:
        print('Too big.Try again.')
    elif guessNumber < number:
        print('Too low.Try again.')
    else:
        break

if guessNumber == number:
    print('Right in ' + str(i) +' times.')
else:
    print('The number is ' + str(number) +'.')

3.9 项目2:collatz序列

#coding = utf-8
def collatz():   #定义collatz函数
    global num   #num为全局变量,故在函数内修改全局变量,需使用global
    if num%2 == 0:
        num //= 2
        print(num)
        return num
    else:
        num = num*3 + 1
        print(num)
        return num

#输入
num = input('请输入一个正整数:')

#异常处理
try:              
    num = int(num)
    while num != 1:
        collatz()

    print('num=%d'%num)

except ValueError: 
    print('请输入正确的值。')

4. 列表

4.1 列表数据类型

列表是一个值,它包含多个字构成的序列,’[]’。

使用下标可以取得列表的值,如:egg[1]。第一个值下标为0,第二个为1,以此类推。

负数下标表示从后往前数,-1表示列表最后一个下标,以此类推。

可以利用切片取得子列表,从第一个下标开始,到第二个下标结束,不包括第二个下标的值,如egg[1,3],取得egg[1]、egg[2],但不包含egg[3]。

可以使用len()函数返回列表值的个数。

列表的增、删、改、查:

增:append()方法  insert()方法
删:del语句 pop()  如:del egg[1]
改:egg[1] = 2
查:index()方法  如:egg.index('1')

列表的连接和复制:

连接:'+'
复制:'*'

4.2 使用列表

列表可用于循环。

for i in [1,2,3]:
    print(i)

in和not in操作符:

'1' in ['1','2','3']

多重赋值:是一种快捷方式,可以在一行代码中,用列表中的值为多个变量赋值。

cat = ['fat','black','loud']
size,color,disposition = cat

4.3 增强的赋值操作

+=
-=
*=
/=

4.4 方法

方法和函数是一回事,只不过方法是调用在一个值上。如:egg.index(‘1’),方法部分跟在值后面,以一个句点(.)隔开。

如:

增:append()方法  insert()方法
删:remove()方法,第一次出现的值会被删除  
查:index()方法,返回值的下标  如:egg.index('1')
排序:sort()方法  如:egg.sort() egg.sort(reverse=True)逆序排序

4.5 类似列表的类型:字符串和元组

字符串和元组是不可变的,列表是可变的。

用list()、tuple()函数来转换类型。

4.6 引用

a = [1,2,3]
b = a
b[0] = 0
a
b

输出为:

[0,2,3]
[0,2,3]

变量不保存列表,它保存的是对列表的引用

b = a是指b复制了a的引用,a、b指向同一个列表,修改b,实际上是修改了a、b引用的列表。

传递引用:函数调用列表作为参数时,是对列表的引用。

copy模块的copy()和deepcopy()函数:

copy.copy()可以复制列表或字典这样的可变值,而不是复制引用。

例如:

import copy
a = [1,2,3]
b = copy.copy(a)
b[0] = 0
a
b

输出:

[1,2,3]
[0,2,3]

若要复制的列表中包含了列表,那就要用copy.deepcopy()函数来代替。

4.7 项目1:逗号代码

对于任意的列表,可改成一行字符串,最后一位值为’and+变量’

a = ['2','4','d',1]
a[-1] = 'and ' +str(a[-1])  #修改最后一位为'and+变量''
i = 0
while i < len(a)-1:
    print(a[i],end=',')
    i += 1
print(a[-1]) #最后一位后无','

4.8 项目2:字符图网格

grid = [['1','2','3','4'],
        ['1','2','3','4'],
        ['1','2','3','4'],
        ['1','2','3','4']]

#grid[i][j]
#循环嵌套
for j in range(0,4):
    for i in range(0,4):
        if i == 3:
            print(grid[i][j])
        else:
            print(grid[i][j],end = '')

5. 字典和结构化数据

5.1 字典数据类型

字典的索引被称为’键’,键及其关联的值称为’键-值’对。 ‘key-value’

例如:

myCat = {'size':'fat','color':'black','disposition':'loud'}

myCat[size]

输出:

fat

字典是不排序的,所以无法像列表一样切片。若访问不存在的值,就会导致KeyError错误。

字典的三个方法:key()、value()、item(),分别对应键、值、键-值对。这些方法返回的数据类型不是列表,分别是dict_keys、dict_values、dict_items。但这些返回值可用于for循环。注意:item()返回的是包含键值的元组。

若需要检查字典中是否存在键或值,用in和not in。

get()方法:get(键,备用值)。若字典中不存在该键,则返回备用值。

setdefault()方法:为字典中某一键设置默认值,当该键没有任何值时使用。

5.2 漂亮打印

import pprint
pprint.pprint()

若想得到漂亮打印的文本,而不是显示在屏幕上,可用pprint.pformat()。

6. 字符串操作

6.1 处理字符串

如何在字符串中输入单引号、制表符或换行?

a)用双引号开始和结束;

b)使用转移字符'\'

c)原始字符串'r':在字符串前加r

d)用三重引号的多行字符串

字符串和列表一样,都可以使用下标和切片。

和列表一样,字符串可以使用in和not in操作符。

6.2 有用的字符串方法

6.2.1 字符串方法upper()、lower()、isupper()、islower()

upper()、lower()方法返回一个新的字符串,原字符串中所有字母都相应转换成大写或小写,非字母字符保持不变。请注意,此方法并没有改变原有字符串,而是返回一个新的字符串。

6.2.2 isX字符串方法:用来验证用户输入

isalpha():返回True,表示只包含字母,且非空;

isalnum():返回True,表示只包含字母和数字,且非空;

isdecimal():返回True,表示只包含数字字符,且非空;

isspace():返回True,表示只包含空格、制表符和换行,且非空;

istitle():返回True,表示字符串仅包含以大写字母开头,口面都是小写字母的单词。

6.2.3 字符串方法startswith()和endswith()

startswith()和endswith()方法返回True,若所调用的字符串以该方法传入的字符串开始或结束。

6.2.4 字符串方法join()和split()

join()方法在一个字符串上调用,参数是一个字符串列表,返回一个字符串,返回的字符串由输入的列表中每个字符串连接而成。

' '.join(['My','name','is','xxlee'])

'调用方法的字符串'.方法(参数列表)

输出:

'My name is xxlee'

split()方法针对一个字符串调用,返回一个字符串列表。

6.2.5 用rjust()、ljust()和center()方法对齐文本

rjust()、ljust()字符串方法返回调用它们的字符串的填充版本,通过插入空格来对齐文本。第一个参数是一个整数长度,第二个参数是填充字符。

center()字符串方法类似,让文本居中。

'hello'.rjust(20,'#')

输出:

'###############hello'

例:

def printPicnic(item,left,right):
    print('PICNIC ITEMS'.center(left + right,'-'))
    for k,v in item.items():
        print(k.ljust(left,'.')+str(v).rjust(right))

a = {'s':3,'b':4333}

printPicnic(a,12,4)

输出:

--PICNIC ITEMS--
s...........   3
b...........4333

6.2.6 用strip()、rstrip()和lstrip()删除空白字符

strip()字符串方法将返回一个新的字符串,它开头或末尾都没有空白字符。lstrip()和rstrip()方法将相应删除左边或右边的空白字符。

也可向strip()、rstrip()和lstrip()传入可选的字符串参数,可删除相应的字符,传入的字符顺序并不重要。

6.2.7 用pyperclip模块拷贝粘贴字符串

pyperclip模块中有copy()和paste()函数,可以向计算机的剪贴板发送文本,或接收文本。

6.3 项目:口令保管箱

基础部分结束

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351