输⼊n输出n个星号python_python基础教程难点
本⽂对于菜鸟联盟python3教程中的⼀些难点和易错点进⾏了总结。
Python3 教程 | 菜鸟教程w ww.runoob
(⼀)基础语法
1.标识符
标识符由字母、数字、下划线组成,但不能以数字开头;区分⼤⼩写;
以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接⼝进⾏访问,不能⽤from xxx import * ⽽导⼊;
以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 __foo__ 代表 Python ⾥特殊⽅法专⽤的标识:如 __init__() 代表类的构造函数。
2.字符串
三引号( ''' 或 """ ) 来表⽰字符串,也可⽤来多⾏注释;
反斜杠可以⽤来转义,使⽤r可以让反斜杠不发⽣转义,如 r"this is a line with n" 则n会显⽰,并不是换⾏;
Python中的字符串本⾝不能改变,但可以重新赋值,⽐如word[0] = 'm'会导致错误。
3.输出
print 默认输出是换⾏的,如果要实现不换⾏需要在变量末尾加上 end=""。
4.导⼊
将整个模块导⼊,例如:import time,在引⽤时格式为:time.sleep(1);
将整个模块中全部函数导⼊,例如:from time import *,在引⽤时格式为:sleep(1);
将模块中特定函数导⼊,例如:from time import sleep,在引⽤时格式为:sleep(1);
将模块换个别名,例如:import time as t,在引⽤时格式为:t.sleep(1)。
导⼊包的⼦模块,例如:import ho/from sound.effects import echo(⼆者引⽤时的格式不同)
(⼆)基本数据类型
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
1.数值计算
数值的除法包含两个运算符:/ 返回⼀个浮点数,// 返回⼀个整数;
在混合计算时,Python会把整型转换成为浮点数。
2.列表
列表截取可以接收第三个参数,参数作⽤是截取的步长,如果第三个参数为负数表⽰逆向读取。
例:反转字符串
def reverseWords(input):
# 通过空格将字符串分隔符,把各个单词分隔为列表
inputWords=input.split(" ")
inputWords=inputWords[-1::-1]
# 重新组合字符串
output=' '.join(inputWords)
return output
3.元组
元组的元素不可改变,但它可以包含可变的对象,⽐如list列表;
构造包含 0 个或 1 个元素的元组⽐较特殊,所以有⼀些额外的语法规则:
tup1 = () # 空元组
tup2 = (20,) # ⼀个元素,需要在元素后添加逗号
⼀般函数的返回值为⼀个,⽽函数返回多个值的时候,是以元组的⽅式返回的;
def example(a,b):
return (a,b) #返回元组
def example(a,b):
return [a,b] #返回列表,此时返回值只有⼀个
python中的函数还可以接收可变长参数,⽐如以 "*" 开头的的参数名,会将所有的参数收集到⼀个元组上:
def test(*args):
return args
>>>test(1,2,3,4) #会返回⼀个元组
4.集合
可以使⽤⼤括号 { } 或者 set() 函数创建集合,注意:创建⼀个空集合必须⽤ set() ⽽不是 { },因为 { } 是⽤来创建⼀个空字典;
集合是⽆重复元素的序列,会⾃动去除重复元素;
集合是⽆序的,所以不⽀持索引。
5.类型转换
chr(x) 将⼀个整数转换为⼀个字符
ord(x) 将⼀个字符转换为它的整数值
type() 是⽤于求⼀个未知数据类型对象,⽽ isinstance()是⽤于判断⼀个对象是否是已知类型;
**type() 不认为⼦类是⽗类的⼀种类型,⽽isinstance()会认为⼦类是⽗类的⼀种类型,因此type 主要⽤于判断未知数据类
型,isinstance()主要⽤于判断A类是否继承于B类。
>>> isinstance(B(), A)
True
>>> type(B()) == A
False
(三)运算符
1.成员运算符 in/not in
2.⾝份运算符
is ⽤于判断两个变量引⽤对象是否为同⼀个, == ⽤于判断引⽤变量的值是否相等。
*python 没有⾃增运算符,正确的⾃增操作应该 a = a + 1 或者 a += 1。
(四)数据类型详解
1.随机数
菜鸟教程python函数
头⽂件:import random
choice(seq) 从序列的元素中随机挑选⼀个元素,⽐如random.choice(range(10)),从0到9中随机挑选⼀个整数。
shuffle(lst) 将序列的所有元素随机排序
2.字符串
join() ⽅法⽤于将序列中的元素以指定的字符连接⽣成⼀个新的字符串:
s1 = "-"
s2 = ""
seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
print (s1.join( seq ))
print (s2.join( seq ))
结果:
r-u-n-o-o-b
runoob
3.列表
append()每次只能添加⼀个值,extend() 函数⽤于在列表末尾⼀次性追加另⼀个序列中的多个值(⽤新列表扩展原来的列表)。
4.元组
zip() 函数⽤于将可迭代的对象作为参数,将对象中对应的元素打包成⼀个个元组,然后返回由这些元组组成的对象:
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 返回⼀个对象
>>> zipped
<zip object at 0x103abc288>
>>> list(zipped) # list() 转换为列表
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(a,c)) # 元素个数与最短的列表⼀致
[(1, 4), (2, 5), (3, 6)]
>>> a1, a2 = zip(*zip(a,b)) # 与 zip 相反,zip(*) 可理解为解压,返回⼆维矩阵式
>>> list(a1)
[1, 2, 3]
>>> list(a2)
[4, 5, 6]
5.集合
s.discard( x )也是移除集合中的元素,且如果元素不存在,不会发⽣错误。格式如下所⽰:
在交互模式中,pop 是删除集合的第⼀个元素(排序后的集合的第⼀个元素);在脚本模式,则随机删除集合中的⼀个元素。(五)基本语句
1.循环
while … else 在条件语句为 false 时执⾏ else 的语句块;
break 语句可以跳出循环体,如果从循环中终⽌,任何对应的循环 else 块将不执⾏。
2.迭代器与⽣成器
迭代器对象从集合的第⼀个元素开始访问,直到所有的元素被访问完结束,迭代器只能往前不会后退;
迭代器有两个基本的⽅法:iter() 和 next():
>>>list=[1,2,3,4]
>>> it = iter(list) # 创建迭代器对象
>>> print (next(it)) # 输出迭代器的下⼀个元素
1
>>> print (next(it))
2
把⼀个类作为⼀个迭代器使⽤需要在类中实现两个⽅法 __iter__() 与 __next__() ;
StopIteration 异常⽤于标识迭代的完成,防⽌出现⽆限循环的情况,在 __next__() ⽅法中我们可以设置在完成指定循环次数后触发StopIteration 异常来结束迭代:
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
在调⽤⽣成器运⾏的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运⾏信息,返回 yield 的值, 并在下⼀次执⾏ next() ⽅法时从当前位置继续运⾏;
调⽤⼀个⽣成器函数,返回的是⼀个迭代器对象;
例:使⽤ yield 实现斐波那契数列
import sys
def fibonacci(n): # ⽣成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10)  # f是⼀个迭代器,由⽣成器返回⽣成
while True:
try:
print (next(f), end=" ")
except StopIteration:
3.函数
加了两个星号 ** 的参数会以字典的形式导⼊;
加了星号 * 的参数会以元组的形式导⼊,存放所有未命名的变量参数;
声明函数时,参数中星号 * 可以单独出现;如果单独出现星号 ,* 后的参数必须⽤关键字传⼊:
>>> def f(a,b,*,c):
... return a+b+c
...
>>> f(1,2,3) # 报错
>>> f(1,2,c=3) # 正常
6
如果要修改嵌套作⽤域(enclosing 作⽤域,外层⾮全局作⽤域)中的变量则需要 nonlocal 关键字;
*匿名函数 lambda:
x = lambda arg1, arg2: arg1 + arg2
·lambda 只是⼀个表达式,函数体⽐ def 简单很多;
·lambda的主体是⼀个表达式,⽽不是⼀个代码块。仅仅能在lambda表达式中封装有限的逻辑进去;
·lambda 函数拥有⾃⼰的命名空间,且不能访问⾃⼰参数列表之外或全局命名空间⾥的参数;
·虽然lambda函数看起来只能写⼀⾏,却不等同于C或C++的内联函数,后者的⽬的是调⽤⼩函数时不占⽤栈内存从⽽增加运⾏效率。*map()函数:
·map() 会根据提供的函数对指定序列做映射;
·
第⼀个参数 function 以参数序列中的每⼀个元素调⽤ function 函数,返回包含每次 function 函数返回值的新列表。
>>>def square(x) : # 计算平⽅数
... return x ** 2
...
>>> map(square, [1,2,3,4,5])
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])
[1, 4, 9, 16, 25]
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。