python 学习之路 Day2

时间:2021-03-15 10:01:58

1.模块初识

Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持。

sys

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print(sys.argv)
#输出
$ python test.py helo world
['test.py', 'helo', 'world']  #把执行脚本时传递的参数获取到了

os 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
os.system("df -h") #调用系统命令
cmd_result=os.popen("dir").read() #调用系统命令并赋值
print(cmd_result) #打印

完全结合一下

import os,sys
os.system(''.join(sys.argv[1:])) #把用户的输入的参数当作一条命令交给os.system来执行

 

2.数据类型

  1.数字

     int(整型)在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647,在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

        long(长整型)#python3里都是int而没有long

        float(浮点数)

        complex(复数)    

  2、布尔值
    真或假
    1 或 0
  3、字符串
    字符串常用功能:移除空白,分割,长度,索引,切片
       4、列表
    name_list = ['alex', 'seven', 'eric']
    或
    name_list = list(['alex', 'seven', 'eric'])

      基本操作:索引、切片、追加、删除、长度、切片、循环、包含

names = ["zhangsan", "lisi", "wangwu", "liuer"]
print(names)
# 切片
print(names[0])
print(names[:2])
print(names[1:3])
print(names[-3:])
#0和-1都可以省约
print(names[0:-1:2]) #2表示步长
print(names[names.index("lisi")])

# 追加
names.append("wuerwa")
print(names)
# 插入
names.insert(1, "zhangerwa")
print(names)
# 修改
names[2] = "liusan"
print(names)
# 删除
#names.remove("wuerwa")
#del names[2]
names.pop() #默认删除列表中最后一个
print(names)
print(names.count("liusan")) #统计个数
#names.clear() #清空
names.reverse() #反转
print(names)
names.sort() #排序
print(names)
names2=[1,2,3]
names.extend(names2) #扩展
print("++++++++++++++++",names)
'''
#拷贝 浅拷贝,三种方式
names.copy()
names[:] #完全切片
list(names) #list工厂函数
'''
names_copy=names.copy()
print(names_copy)

import copy
name2=copy.deepcopy(names) #深拷贝
print(name2)
#循环
for item in names:
    print(item)

  

      5、元组(不可变列表)

         创建元组:

    ages = (11, 22, 33, 44, 55)
    或
    ages = tuple((11, 22, 33, 44, 55))

  6、字典(无序)

             创建字典:   

   person = {"name": "mr.wu", 'age': 18}
   或
   person = dict({"name": "mr.wu", 'age': 18})

       常用操作:索引、新增、删除、(键、值、键值对)、循环、长度

  7、数据类型转换      

int(x [,base])

将x转换为整数。如果x是字符串,则要base指定基数。

float(x)

将x转换为浮点数。

complex(real [,imag])

创建一个复数。

str(x)

将对象x转换为字符串表示形式。

repr(x)

将对象x转换为表达式字符串。

eval(str)

评估求值一个字符串并返回一个对象。

tuple(s)

将s转换为元组。

list(s)

将s转换为列表。

set(s)

将s转换为集合。

dict(d)

创建一个字典,d必须是(key,value)元组的序列

frozenset(s)

将s转换为冻结集

chr(x)

将整数x转换为字符

unichr(x)

将整数x转换为Unicode字符。

ord(x)

将单个字符x转换为其整数值。

hex(x)

将整数x转换为十六进制字符串。

oct(x)

将整数x转换为八进制字符串。

3.数据运算

      算术运算:

运算符

描述

示例

+

加法运算,将运算符两边的操作数增加。

a + b = 31

-

减法运算,将运算符左边的操作数减去右边的操作数。

a – b = -11

*

乘法运算,将运算符两边的操作数相乘

a * b = 210

/

除法运算,用右操作数除左操作数

b / a = 2.1

%

模运算,用右操作数除数左操作数并返回余数

b % a = 1

**

对运算符进行指数(幂)计算

a ** b,表示10的21次幂

//

地板除 - 操作数的除法,其结果是删除小数点后的商数。 但如果其中一个操作数为负数,则结果将被保留,即从零(向负无穷大)舍去

9//2 = 4 , 9.0//2.0 = 4.0, -11//3 = -4, -11.0//3 = -4.0

  比较运算: 

运算符 描述 示例
== 如果两个操作数的值相等,则条件为真。 (a == b)求值结果为 false
!= 如果两个操作数的值不相等,则条件为真。 (a != b)求值结果为 true
> 如果左操作数的值大于右操作数的值,则条件成为真。 (a > b)求值结果为 false
< 如果左操作数的值小于右操作数的值,则条件成为真。 (a < b)求值结果为 true
>= 如果左操作数的值大于或等于右操作数的值,则条件成为真。 (a >= b)求值结果为 false
<= 如果左操作数的值小于或等于右操作数的值,则条件成为真。 (a <= b)求值结果为 true

  赋值运算:  

运算符 描述 示例
= 将右侧操作数的值分配给左侧操作数 c = a + b表示将a + b的值分配给c
+= 将右操作数相加到左操作数,并将结果分配给左操作数 c + = a等价于c = c + a
-= 从左操作数中减去右操作数,并将结果分配给左操作数 c -= a 等价于 c = c - a
*= 将右操作数与左操作数相乘,并将结果分配给左操作数 c *= a 等价于 c = c * a
/= 将左操作数除以右操作数,并将结果分配给左操作数 c /= a 等价于 c = c / a
%= 将左操作数除以右操作数的模数,并将结果分配给左操作数 c %= a 等价于 c = c % a
**= 执行指数(幂)计算,并将值分配给左操作数 c **= a 等价于 c = c ** a
//= 运算符执行地板除运算,并将值分配给左操作数 c //= a 等价于 c = c // a

  逻辑运算:  

运算符 描述 示例
and 如果两个操作数都为真,则条件成立。 (a and b)的结果为False
or 如果两个操作数中的任何一个非零,则条件成为真。 (a or b)的结果为True
not 用于反转操作数的逻辑状态。 not(a and b) 的结果为True

  成员运算:  

运算符 描述 示例
in 如果在指定的序列中找到一个变量的值,则返回true,否则返回false -
not in 如果在指定序列中找不到变量的值,则返回true,否则返回false -

  身份运算:  

运算符 描述 示例
is 如果运算符任一侧的变量指向相同的对象,则返回True,否则返回False  
is not 如果运算符任一侧的变量指向相同的对象,则返回True,否则返回False -

  位运算:    

运算符 描述 示例
& 如果它存在于两个操作数中,则操作符复制位到结果中 (a & b) 结果表示为 0000 1100
python 学习之路 Day2 如果它存在于任一操作数,则复制位。 (apython 学习之路 Day2b) = 61 结果表示为 0011 1101
^ 二进制异或。如果它是一个操作数集合,但不是同时是两个操作数则将复制位。 (a ^ b) = 49 (结果表示为 0011 0001)
~ 二进制补码,它是一元的,具有“翻转”的效果。 (~a ) = -61有符号的二进制数,表示为1100 0011的补码形式。
<< 二进制左移,左操作数的值由右操作数指定的位数左移。 a << 2 = 240 (结果表示为 1111 0000)
>> 二进制右移,左操作数的值由右操作数指定的位数右移。 a >> 2 = 15(结果表示为0000 1111)

 

#!/usr/bin/env python
# -*- coding:utf-8 -*-

a = 60            # 60 = 0011 1100
b = 13            # 13 = 0000 1101
print ('a=',a,':',bin(a),'b=',b,':',bin(b))
c = 0

c = a & b;        # 12 = 0000 1100
print ("result of AND is ", c,':',bin(c))

c = a | b;        # 61 = 0011 1101
print ("result of OR is ", c,':',bin(c))

c = a ^ b;        # 49 = 0011 0001
print ("result of EXOR is ", c,':',bin(c))

c = ~a;           # -61 = 1100 0011
print ("result of COMPLEMENT is ", c,':',bin(c))

c = a << 2;       # 240 = 1111 0000
print ("result of LEFT SHIFT is ", c,':',bin(c))

c = a >> 2;       # 15 = 0000 1111
print ("result of RIGHT SHIFT is ", c,':',bin(c))

  

  运算符优先级:  

序号 运算符 描述
1 ** 指数(次幂)运算
2 ~ + - 补码,一元加减(最后两个的方法名称是+@-@)
3 * / % // 乘法,除法,模数和地板除
4 + -  
5 >> << 向右和向左位移
6 & 按位与
7 ^python 学习之路 Day2 按位异或和常规的“OR
8 <= < > >= 比较运算符
9 <> == != 等于运算符
10 = %= /= //= -= += *= **= 赋值运算符
11 is is not 身份运算符
12 in not in 成员运算符
13 not or and 逻辑运算符

 三元运算

result = 1 if 条件 else 2

a,b,c=10,22,50
d=a if a>b else c;
print(d)

如果条件为真:result = 值1
如果条件为假:result = 值2  

 bytes 

a='€20'.encode('utf-8')
print(a)
b=a.decode('utf-8')
print(b)

  

 

程序练习 

程序:购物车程序

需求:

  1. 启动程序后,让用户输入工资,然后打印商品列表
  2. 允许用户根据商品编号购买商品
  3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 
  4. 可随时退出,退出时,打印已购买商品和余额
    product_list = [
        ('Iphone',5800),
        ('Mac Pro',9800),
        ('Bike',800),
        ('Watch',10600),
        ('Coffee',31),
        ('Alex Python',120),
    ]
    shopping_list = []
    salary = input("Input your salary:")
    if salary.isdigit():
        salary = int(salary)
        while True:
            for index,item in enumerate(product_list):
                #print(product_list.index(item),item)
                print(index,item)
            user_choice = input("选择要买嘛?>>>:")
            if user_choice.isdigit():
                user_choice = int(user_choice)
                if user_choice < len(product_list) and user_choice >=0:
                    p_item = product_list[user_choice]
                    if p_item[1] <= salary: #买的起
                        shopping_list.append(p_item)
                        salary -= p_item[1]
                        print("Added %s into shopping cart,your current balance is \033[31;1m%s\033[0m" %(p_item,salary) )
                    else:
                        print("\033[41;1m你的余额只剩[%s]啦,还买个毛线\033[0m" % salary)
                else:
                    print("product code [%s] is not exist!"% user_choice)
            elif user_choice == 'q':
                print("--------shopping list------")
                for p in shopping_list:
                    print(p)
                print("Your current balance:",salary)
                exit()
            else:
                print("invalid option")
    

       

字典操作

字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

语法:

info={"one":"dehua","two":"xueyou","three":"liming"}
print(info)
##{'one': 'dehua', 'two': 'xueyou', 'three': 'liming'}

  

字典的特性:

  • dict是无序的
  • key必须是唯一的,so 天生去重

增加

info["four"]="fucheng"
print(info)
##{'one': 'dehua', 'two': 'xueyou', 'three': 'liming', 'four': 'fucheng'} 

修改

info["four"]="富城"
print(info)
##{'one': 'dehua', 'two': 'xueyou', 'three': 'liming', 'four': '富城'}

删除

#info.pop("four") #第一种方式
del info["four"] #第二种方式
info.popitem() #随便删除
print(info) 

查找

print("one" in info) #判断是否存在
print(info.get("one"))
print(info["four"]) #如果一个key不存在,就报错,get不会,不存在只返回None

其它方法

print(info.values())
print(info.keys())
info.setdefault("five","linfeng")
info.setdefault("one","linfeng")
b={1:2,3:4,"one":"hehe"}
info.update(b)
print(info)
d=info.items()
print(d)

  

字典循环:

for i in info:
    print(i,info[i])

for k,v in info.items():
    print(k,v)

 

字符串转字典:

json越来越流行,通过python获取到json格式的字符串后,可以通过eval函数转换成dict格式:

a='{"name":"yct","age":10}'
eval(a)

 

字典转字符串:

import json
dict={"中国":"china"}
str=json.dumps(dict,ensure_ascii=False)
print(str)

 

文件IO:

w新建只写,w+新建读写,二者都会将文件内容清零

 

字符串内建函数

方法

示例

说明

capitalize()

str = "this is string example....wow!!!"
print ("str.capitalize() : ", str.capitalize())

把字符串的第一个字母转为大写

center(width, fillchar)

str = "this is string example....wow!!!"
print ("str.center(40, 'a') : ", str.center(40, 'a'))

返回使用fillchar填充的字符串,原始字符串以总共width列为中心。

count(str, beg = 0,end = len(string))

str = "this is string example....wow!!!"
sub = 'i'
print ("str.count('i') : ", str.count(sub))
sub =
'exam'
print ("str.count('exam', 10, 40) : ", str.count(sub,10,40))

计算字符串中出现有多少次str或字符串的子字符串(如果开始索引beg和结束索引end,则在beg~end范围匹配)

decode(encoding = UTF-8,errors = strict)

str = "this is string example....wow!!!";
str = str.encode(
'utf-8','strict');
print("Encoded String: " , str)
print("Decoded String: " , str.decode('utf-8','strict'))

使用编码encoding解码该字符串。 编码默认为默认字符串encoding

encode(encoding = UTF-8,errors = strict)

import base64
str =
"this is string example....wow!!!"
str = base64.b64encode(str.encode('utf-8',errors = 'strict'))
print ("Encoded String: " , str)

返回字符串的编码字符串版本在错误的情况下,默认是抛出ValueError,除非使用’ignore‘或’replace‘给出错误。

endswith(suffix, beg = 0, end = len(string))

str = "this is string example....wow!!!";
suffix =
"wow!!!";
print(str.endswith(suffix));
print(str.endswith(suffix,20));
suffix =
"is";
print(str.endswith(suffix, 2, 4));
print(str.endswith(suffix, 2, 6));

确定字符串或字符串的子字符串(如果启动索引结束和结束索引结束)都以后缀结尾如果是则返回true,否则返回false

expandtabs(tabsize = 8)

str = "Welcome\tto\tyiibai python toturitals!"
print ("Original string: " ,str)
print ("Defualt exapanded tab: " ,  str.expandtabs())
print ("Double exapanded tab: " ,  str.expandtabs(16))

将字符串中的制表符扩展到多个空格如果没有提供tabize,则默认为每个制表符为8个空格。

find(str, beg = 0 end = len(string))

str1 = "this is string example....wow!!!"
str2 = "exam";
print (str1.find(str2))
print (str1.find(str2, 10))
print (str1.find(str2, 40))

如果索引beg和结束索引end给定,则确定str是否在字符串或字符串的子字符串中,如果找到则返回索引,否则为-1

 

string.format()

 

print("{} {}".format("hello", "world"))  # 不设置指定位置,按默认顺序

print("{0} {1}".format("hello", "world"))  # 设置指定位置
print("{1} {0} {1}".format("hello", "world"))  # 设置指定位置
print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
# 通过字典设置参数
site = {"name": "菜鸟教程", "url": "www.runoob.com"}
print("网站名:{name}, 地址 {url}".format(**site))
# 通过列表索引设置参数
my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的

 

格式化字符串

index(str, beg = 0, end = len(string))

str1 = "this is string example....wow!!!"
str2 = "exam";
print (str1.index(str2))
print (str1.index(str2, 10))
print (str1.index(str2, 40))

find()相同,但如果没有找到str,则引发异常。

isalnum()

str = "this2009"# 字符中没有空格
print(str.isalnum());
str =
"this is string example....wow!!!";
print(str.isalnum());

如果字符串至少包含1个字符,并且所有字符均为数字,则返回true,否则返回false

isalpha()

str = "this"# No space & digit in this string
print (str.isalpha())
str =
"this is string example....wow!!!"
print (str.isalpha())

如果字符串至少包含1个字符,并且所有字符均为字母,则返回true,否则返回false

isdigit()

str = "1231234"# Only digit in this string
print (str.isdigit())
str =
"this is string example....wow!!!"
print (str.isdigit())

如果字符串只包含数字则返回true,否则返回false

islower()

str = "Welcom to yiibai python tutorials!"
print (str.islower())
str =
"welcom to yiibai python tutorials!"
print (str.islower())

如果字符串至少包含1个字母,并且所有字符均为小写,则返回true,否则返回false

isnumeric()

str = "this2018"
print (str.isnumeric())
str =
"121323"
print (str.isnumeric())

如果unicode字符串只包含数字字符,则返回true,否则返回false

isspace()

str = "       "
print (str.isspace())
str =
"Welcom to yiibai python tutorials!"
print (str.isspace())

如果字符串只包含空格字符,则返回true,否则返回false

istitle()

str = "This Is String Example...Wow!!!"
print (str.istitle())
str =
"This is string example....wow!!!"
print (str.istitle())

如果字符串正确“标题大小写”,则返回true,否则返回false

isupper()

str = "THIS IS STRING EXAMPLE....WOW!!!"
print (str.isupper())
str =
"THIS is string example....wow!!!"
print (str.isupper())

如果字符串至少包含一个可变大小写字符,并且所有可变大小写字符均为大写,则返回true,否则返回false

join(seq)

s = "-"
seq = ("a", "b", "c") # This is sequence of strings.
print (s.join( seq ))

将序列seq中的元素以字符串表示合并(并入)到具有分隔符字符串的字符串中。

len(string)

str = "Welcom to yiibai python tutorials!"
print ("Length of the string: ", len(str))

返回字符串的长度

ljust(width[, fillchar])

str = "this is string example....wow!!!"
print(str.ljust(50, '*'))

返回一个空格填充的字符串,原始字符串左对齐到总共width列。

lower()

str = "THIS IS STRING EXAMPLE....WOW!!!"
print (str.lower())

将字符串中的所有大写字母转换为小写。

lstrip()

## 删除左侧字符串:空格
str = "     this is string example....wow!!!"
print (str.lstrip())
## 删除左侧字符串:*****
str = "*****this is string example....wow!!!*****"
print (str.lstrip('*'))

删除字符串中的所有前导空格

maketrans()

intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)
str =
"this is string example....wow!!!"
print (str.translate(trantab))

返回在translate函数中使用的转换表。

max(str)

str = "this is a string example....really!!!"
print ("Max character: " , min(str))

从字符串str返回最大字母字符。

 

min(str)

 

 
str = "this is a string example....really!!!"
print ("Max character: " , max(str))
 从字符串str返回最小字母字符。

string.partition(str)

str = "www.runoob.com"

print(str.partition("."))

有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.

replace(old, new [, max])

str = "this is string example....wow!!! this is really string"
print (str.replace("is", "was"))
print (str.replace("is", "was", 3))

如果给定max值,则用new或最多最大出现替换字符串中所有出现的旧字符(old)

rindex( str, beg = 0, end = len(string))

str1 = "this is really a string example....wow!!!"
str2 = "is"
print (str1.rindex(str2))
print (str1.rindex(str2,10))

index()相同,但在字符串中向后搜索。

rjust(width,[, fillchar])

str = "this is string example....wow!!!"
print (str.rjust(50, '*'))

返回一个空格填充字符串,原始字符串右对齐到总共宽度(width)列。

rstrip()

str = "     this is string example....wow!!!     "
print (str.rstrip())
str =
"*****this is string example....wow!!!*****"
print (str.rstrip('*'))

删除字符串的所有尾随空格。

split(str=

str = "this is string example....wow!!!"
print (str.split( ))
print (str.split('i',1))
print (str.split('w'))

根据分隔符str(空格,如果没有提供)拆分字符串并返回子字符串列表如果给定,最多分割为num子串。

splitlines( num=string.count(\n))))

str1 = 'ab c\n\nde fg\rkl\r\n'
print(str1.splitlines());
str2 =
'ab c\n\nde fg\rkl\r\n'
print(str2.splitlines(True))

全部拆分字符串(num)新行符,并返回每行的列表,并删除新行符。

startswith(str, beg=0,end=len(string))

str = "this is string example....wow!!!"
print (str.startswith( 'this' ))
print (str.startswith( 'string', 8 ))
print (str.startswith( 'this', 2, 4 ))

确定字符串或字符串的子字符串(如果给定起始索引beg和结束索引end)str开头如果是则返回true,否则返回false

strip([chars])

str = "*****this is string example....wow!!!*****"
print (str.strip( '*' ))

对字符串执行lstrip()rstrip()

swapcase()

str = "this is string example....wow!!!"
print (str.swapcase())
str =
"This Is String Example....WOW!!!"
print (str.swapcase())

反转在字符串中的所有字母大小写,即小写转大写,大写转小写。

title()

str = "this is string example....wow!!!"
print(str.title())

返回字符串的标题版本,即所有单词第一个字母都以大写开头,其余的都是小写的。

translate(table, deletechars=

intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)
str =
"this is string example....wow!!!";
print (str.translate(trantab))

根据转换表STR(256个字符),除去那些在del字符串转换字符串。

upper()

str = "this is string example....wow!!!"
print ("str.upper : ",str.upper())

将字符串中的小写字母转换为大写。

zfill(width)

str = "this is string example....wow!!!"
print ("str.zfill : ",str.zfill(40))
print ("str.zfill : ",str.zfill(50))

返回原始字符串,左边填充为零,总共有宽度(width)字符对于数字zfill()保留给定的任何符号(少于一个零)

isdecimal()

str = "this2018"
print (str.isdecimal())
str = "123434"
print (str.isdecimal())

如果unicode字符串只包含十进制字符,则返回true,否则返回false