python基础知识

基于Python3.5的Python知识

 

 

 

 

 1.1    变量

Python中的变量不需要先定义数据类型,直接使用,python会根据你的赋值情况判断变量数据类型。

name = “那小子”      #Python不需要定义数据类型name数据类型是string

age =  23                 #age的数据类型是int

1.2 输入输出

2.1输入

输入

name = input(“name:”)

age = input(“age:”)

 

 

注:input输入的数据类型默认为是string,如果需要改成整型

age = int(input(“age:”))   #数据类型被强制转换成整型

变量与字符串结合

 

2.2输出

输出Hello World

print(“HelloWorld”)

python执行文件不关注后缀名只关心内容,(.py是用来区分的)

2.2.1格式化输出:

mas = 

‘’’

name = “那小子”

age = 23

‘’’

print(mas)输出的是

 

 三引号除了可以注释多行以外,还可以打印多行

name  = input ("name:")
age  = int(input("age:"))
job = input("job:")
infor = '''

  info of %s
  name:%s
  age:%d
  job:%s
'''%(name,name,age,job) #这个%是关联把前面的字符串与括号里面的变量
#一个%s是一个占位符对应括号里面的值,s代表是string(字符串),还可以是%d(指定是int类型)对应的变量也应该是int,而%s的变量可以是int。

age%d强调age输入的必须是数字与前面的数据类型相对应



infor2 = '''

  info of {0}
  name:{0}
  age:{1}
  job:{2}
'''.format(name,age,job)

infor3 = '''

  info of {Name}
  name:{Name}
  age:{Age}
  job:{Job}
'''.format(Name=name,Age=age,Job=job)

 

3.数据类型

数据类型大致分为,int(整型),string(字符串),bool(布尔),list(列表),tuple(元祖),dict(字典),set(集合)

3.1int:不可变类型

在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647

在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

3.2str不可变类型

单引号或者双引号里面的内容,或者多引号(用于多行字符串)

字符串可以进行简单的加和乘

 

 

 

 

常用操作:
增:
由于字符串是不可变的,对他进行增的时候其实是生成了一个新的字符串。
s = "你好"
s2 =  "世界"
print(s + s2)

 

删:由于字符串是不可变的,对他进行删的时候其实是生成了一个新的字符串。
s = "你好世界"
s2 = s[1:2]
print(s2)
print(s.replace('你',''))
print(s)

 改:由于字符串是不可变的,对他进行替换的时候其实是生成了一个新的字符串,并不是在原字符串上改变。

s = "你好世界"
print(id(s))
s3 = s.replace('你','')
print(s)
print(s3)
print(id(s))
print(id(s3))

 查:

s = 'hello word'
print(s.find('l')) #如果不存在返回-1
切片:
s = "hello word"
print(s[1:2]) #切第2到第2位的数据
print(s[0:8:2]) #从第一位到第7中隔一位取一位
print(s[::-1]) #字符倒存

 

消除空格:
s = '  hello  world!  '
s.strip() #可以消除两边空格,中间的不行,还可按要求可以是其他字符(可以是字符串)
s.lstrip()
s.rstrip()
s2 = '***hello,world!***'
s2.strip('*')

count计数:

s = '  hello  world!  '
print(s.count('l'))  #可在字符后面制定起始位置和终止位置
def count(self, sub, start=None, end=None): # real signature unknown; restored from __doc__
        """
         从一个范围内的统计某str出现次数
        S.count(sub[, start[, end]]) -> int

        Return the number of non-overlapping occurrences of substring sub in
        string S[start:end].  Optional arguments start and end are
        interpreted as in slice notation.
        """
        return 0
 def encode(self, encoding='utf-8', errors='strict'): # real signature unknown; restored from __doc__
        """
        encode(encoding='utf-8',errors='strict')
        以encoding指定编码格式编码,如果出错默认报一个ValueError,除非errors指定的是
        ignore或replace

        S.encode(encoding='utf-8', errors='strict') -> bytes

        Encode S using the codec registered for encoding. Default encoding
        is 'utf-8'. errors may be given to set a different error
        handling scheme. Default is 'strict' meaning that encoding errors raise
        a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and
        'xmlcharrefreplace' as well as any other name registered with
        codecs.register_error that can handle UnicodeEncodeErrors.
        """
        return b""
def center(self, width, fillchar=None): # real signature unknown; restored from __doc__
        """
        原来字符居中,不够用空格补全
        S.center(width[, fillchar]) -> str

        Return S centered in a string of length width. Padding is
        done using the specified fill character (default is a space)
        """
        return ""

def format(self, *args, **kwargs): # known special case of str.format
        """
        格式化输出
        三种形式:
        形式一.
        >>> print('{0}{1}{0}'.format('a','b'))
        aba

        形式二:(必须一一对应)
        >>> print('{}{}{}'.format('a','b'))
        Traceback (most recent call last):
          File "<input>", line 1, in <module>
        IndexError: tuple index out of range
        >>> print('{}{}'.format('a','b'))
        ab

        形式三:
        >>> print('{name} {age}'.format(age=12,name='lhf'))
        lhf 12

        S.format(*args, **kwargs) -> str

        Return a formatted version of S, using substitutions from args and kwargs.
        The substitutions are identified by braces ('{' and '}').
        """
        pass

1.字符串的单引号和双引号都无法取消特殊字符的含义,如果想让引号内所有字符均取消特殊意义,在引号前面加r,如name=r'l\thf'
2.unicode字符串与r连用必需在r前面,如name=ur'l\thf'

字符串的其他函数参考:
https://blog.csdn.net/zhanh1218/article/details/21826239

 

3.3 布尔:

TRUE和FALSE主要用于判断对错(一个语句是否成立)

True/False的求值

Tip

尽可能使用隐式false

定义:

Python在布尔上下文中会将某些值求值为false. 按简单的直觉来讲, 就是所有的”空”值都被认为是false. 因此0, None, [], {}, “” 都被认为是false.

优点:

使用Python布尔值的条件语句更易读也更不易犯错. 大部分情况下, 也更快.

缺点:

对C/C++开发人员来说, 可能看起来有点怪.

结论:

尽可能使用隐式的false, 例如: 使用 if foo: 而不是 if foo != []: . 不过还是有一些注意事项需要你铭记在心:

  1. 永远不要用==或者!=来比较单件, 比如None. 使用is或者is not.
  2. 注意: 当你写下 if x: 时, 你其实表示的是 if x is not None . 例如: 当你要测试一个默认值是None的变量或参数是否被设为其它值. 这个值在布尔语义下可能是false!
  3. 永远不要用==将一个布尔量与false相比较. 使用 if not x: 代替. 如果你需要区分false和None, 你应该用像 if not x and x is not None: 这样的语句.
  4. 对于序列(字符串, 列表, 元组), 要注意空序列是false. 因此 if not seq: 或者 if seq: 比 if len(seq): 或 if not len(seq): 要更好.
  5. 处理整数时, 使用隐式false可能会得不偿失(即不小心将None当做0来处理). 你可以将一个已知是整型(且不是len()的返回结果)的值与0比较.
    1. Yes: if not users:
    2.          print 'no users'
    3.  
    4.      if foo == 0:
    5. 10.          self.handle_zero()
    6. 11.  
    7. 12.      if i % 10 == 0:
    8. 13.          self.handle_multiple_of_ten()

14. No:  if len(users) == 0:

    1. 15.          print 'no users'
    2. 16.  
    3. 17.      if foo is not None and not foo:
    4. 18.          self.handle_zero()
    5. 19.  
    6. 20.      if not i % 10:
    7. 21.          self.handle_multiple_of_ten()
    8. 注意‘0’(字符串)会被当做true.

 

3.4列表

是可变的

li = [1,2,3,4,5,6]
li.append(7)
print(li)
li.insert(1,10)
print(li)

 


li = [1,2,3,4,5,6,1,2,2,3]
print(li.pop(1)) #可指定索引值删除,默认是删除最后的,并返回被删掉的值,位置超出范围会报错
print(li)
li.remove(2) #只删除从左开始的第一个符合条件的元素,如果不存在会报错
print(li)

 


li = [1,2,3,4,5,6]
li[0] = 0
print(li)



li = [1,2,3,4,5,6]
print(li.index(1)) #索引值
print(2 in li) #使用in判断2是否在li表内

 

3.5元祖

 1.可存放多个值
  2.不可变
  3.
按照从左到右的顺序定义元组元素,下标从0开始顺序访问,有序

元组本身不可变,如果元组中还包含其他可变元素,这些可变元素可以改变

3.6字典

本身是可变的
1.key-value结构
2.key必须可hash、且必须为不可变数据类型、必须唯一;value是可变的
3.可存放任意多个值、可修改、可以不唯一
4.无序

dic = {"name":"ni","age":"23"}
print(dic)
dic["job"] = "IT"
print(dic)
dic.setdefault("addr", "ZJ")
print(dic)


dic = {"name": "ni", "age": "23"}
print(dic.pop("age"))  # 如果字典中存在key,删除并返回key对应的vuale;
# 如果key不存在,且没有给出default的值,则引发keyerror异常;
print(dic)
dic.clear() #删除字典中的所有项或元素;    
print(dic)


dic = {"name":"ni","age":"23"}
dic["name"] = "na" #对key的value进行更改
print(dic)
dic2 = {"name":"ni","job":"IT"}
dic.update(dic2) #会对两个字典拼接,存在key相同的,对应的value取新的那个value
print(dic)

dic = {"name":"ni","age":"23"}
print(dic["name"]) #返回字典中key对应的值,若key不存在字典中,则报错;
print(dic.get("name")) #返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None)

get()函数取val比较好,不会出现不存在key会报错的情况,不存在返回默认值None。
 1、dic.keys() 返回一个包含字典所有KEY的列表;
 2、dic.values() 返回一个包含字典所有value的列表;
 3、dic.items() 返回一个包含所有(键,值)元祖的列表;
 4、dic.iteritems()、dic.iterkeys()、dic.itervalues() 与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表;

 

3.7集合

1.确定性(元素必须可hash)

2.互异性(去重)

3.无序性(集合中的元素没有先后之分),如集合{3,4,5}和{3,5,4}算作同一个集合。

注意:集合存在的意义就在于去重和关系运算

 
set1 = {1,2,3,4,5}
set2 = {3,4,5,6,7,8,9}
print(set1&set2)
print(set1.intersection(set2)) #交集

print(set1 | set2)
print(set1.union(set2)) #并集

print(set1.difference(set2))
print(set1-set2) #集合1与集合2的差集

print(set1.symmetric_difference(set2))
print(set1^set2) #对称差集

包含关系

in,not in:判断某元素是否在集合内
==,!=:判断两个集合是否相等

两个集合之间一般有三种关系,相交、包含、不相交。在Python中分别用下面的方法判断:

  • set.isdisjoint(s):判断两个集合是不是不相交
  • set.issuperset(s):判断集合是不是包含其他集合,等同于a>=b
  • set.issubset(s):判断集合是不是被其他集合包含,等同于a<=b

增加:

元素的删除

set.discard(x)不会抛出异常

set.remove(x)会抛出KeyError错误

 

4.流程控制:

4.1 if判断语句

#!/usr/bin/env python
import getpass
_name = "naxiaozi"
_password = "123"
name = input("name:")
password = getpass.getpass("password:")
if name == _name and _password == password:
    print("welcome")
else:
    print("name or password is wrong")

 

if   :
else:
if    :
elif     :
注:Python通过缩进的方式来体现语句的关系
if条件满足的语句要缩进,else是和if并列的所以不必缩进。
4.2while
while Ture:
while 条件:

else:

whileelse只在中间不执行break才执行。

break 结束当前所在的循环

continue结束本次循环,进行下次循环

 

4.3for
for i in range(10): #rang从1到10每次加一,rang(1:10:2)从1到10每次加2
print("loop:",i)

 

 

命名规则:

模块名,包名 :小写字母, 单词之间用户_分割。
类名:首字母大写。
全局变量: 大写字母, 单词之间用户_分割。
普通变量: 小写字母, 单词之间用户_分割。
函数: 小写字母, 单词之间用户_分割。
实例变量: 以_开头,其他和普通变量一样 。
私有实例变量(外部访问会报错): 以__开头(2个下划线),其他和普通变量一样 。
专有变量: __开头,__结尾,一般为python的自有变量(不要以这种变量命名)。


练习1:猜年龄游戏 (10分钟)

要求:

  1. 允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出


#!/usr/bin/env python

count = 0
old_of_boy = 23
while count < 3:
    count +=1
    guss_old = int(input("guss old:"))
    if old_of_boy == guss_old :
        print("yes,you get it")
        break
    elif old_of_boy > guss_old:
        print("think bigger")
    elif old_of_boy < guss_old:
        print("think smaller")

else :
    print("you have tried too many time ")



 

练习2:猜年龄游戏升级版 (10分钟)

要求:

  1. 允许用户最多尝试3次
  2. 每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序
  3. 如何猜对了,就直接退出

#!/usr/bin/env python
count = 0
old_of_boy = 23
while count < 3:
    count +=1
    guss_old = int(input("guss old:"))
    if old_of_boy == guss_old :
        print("yes,you get it")
        break
    elif old_of_boy > guss_old:
        print("think bigger")
    elif old_of_boy < guss_old:
        print("think smaller")
    if count == 3:
        print("是否还想猜:")
        k = input("想就输入‘是’,否则输入‘否’")
        if k == '是':
            count = 0
        elif k == 'N'or k == 'n':
            exit()
else :
    print("you have tried too many time ")








 




 



posted @ 2018-05-04 23:08  那小子1229  阅读(220)  评论(0)    收藏  举报