python学习

```第一天

思考题

  1. Python是怎么诞生的?Python之父是谁?
    #Python的创始人为吉多范罗苏姆(Gudio van Rossum)
    11989年的圣诞节期间,吉多
    范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的解释程序,作为ABC语言的一种继承。
    .ABC是由吉多参加设计的一种教学语言,就吉多本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,
    究其原因,吉多认为是非开发造成的。吉多决心在Python中避免这一错误,并获取了非常好的效果。之所以选中Python(蟒蛇)作为程序的名字,是因为他是BBC电视剧–蒙提*派森的飞行马戏团(Monty Python’s Flying Circus)的爱好者。1991年,第一个Python解释器诞生,它是用C语言实现的,并能够调用C语言的库文件。

  2. Python和C++(或者C)的区别在哪?即为什么要学习Python,C++不香吗?
    #C语言是编译型语言,经过编译后,生成机器码,然后再运行,执行速度快,不能跨平台,一般用于操作系统,驱动等底层开发。Python是编译型还是解释型这个界限并不明显,但大致上可以理解为解释型语言,执行速度慢,由于Python虚拟机,Python是可以跨平台的,Python高度集成适合于软件的快速开发。同一样问题,用不同的语言解决,代码量差距还是很多的,一般情况下Python是Java的1/5,所以说人生苦短,我用Python。 Python是完全面向对象的语言 函数、模块、数字、字符串都是对象,在 Python中一切皆对象。完全支持继承、重载、多重继承。支持重载运算符,也支持泛型设计。Python拥有一个强大的标准库,Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。 Python社区提供了大量的第三方模块,使用方式与标准库类似。它们的功能覆盖科学计算、人工智能、机器学习、Web开发、数据库接口、图形系统多个领域。总而言之:简单·易学·开源·免费。

  3. 相较于Python2,Python3做了哪些大的改进?
    类型注解(type hint)。帮助IDE实现类型检查(给变量添加类型提示,python2中动态语音没有类型声明的)。优化的super()方便直接调用父类函数。高级解包操作。a,b, *rest = range(10)。(0赋值给a,1赋值给b,剩下的元素全部赋值给test)。

练习题
4. 怎样对python中的代码进行注释?
# 表示注释,作用于整行。
''' ''' 或者 """ """ 表示区间注释,在三引号之间的所有内容被注释
例如:"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
这是多行注释,用三个双引号
“”"

  1. python有哪些运算符,这些运算符的优先级是怎样的?
    算术运算符(一元运算符 二元运算符) 比较运算符 逻辑运算符 位运算符 三元运算符 其他运算符。
    一元运算符优于二元运算符。例如3 ** -2等价于3 ** (-2)
  • 先算术运算,后移位运算,最后位运算。例如 1 << 3 + 2 & 7等价于 (1 << (3 + 2)) & 7。(移位运算属于位运算)
  • 逻辑运算最后结合。例如3 < 4 and 4 < 5等价于(3 < 4) and (4 < 5)
    位运算符详解
  1. python 中 is, is not==, != 的区别是什么?
    is, is not 对比的是两个变量的内存地址
  • ==, != 对比的是两个变量的值
  • 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
  • 对比的两个变量,指向的是地址可变的类型(list,dict等),则两者是有区别的。
  1. python 中包含哪些数据类型?这些数据类型之间如何转换?
    数据类型
    转换:例如:int(x,base=10)
    print int(‘123’) #123
    这里int函数默认了base参数值为10,也就是说把字符串’123’视为十进制数转换成十进制数;
    print int(‘12345’,8) # 5349
    这里int函数有了第二个参数base=8;说明要int函数把字符串’12345’视为八进制数转换成十进制数。
    x 默认 base = 10
    base = 0 表示根据自行给出的 x(**系统自己识别)**得出十进制的结果
    x 必须是字符串、字节或字节组
    int(x, base) -> integer 无论 base 等于几,得出来的都是十进制的整数,也就是base 中的几进制是限制 x 的,通过此运算得出对应的十进制。

int(‘0b100’, base=0)
0b 代表二进制的意思,base = 0,由于有 0b 系统自己可以识别出是二进制,故输出的是 4。

位运算:

n << 1 -> 计算 n2
n >> 1 -> 计算 n/2,负奇数的运算不可用
n << m -> 计算 n
(2^m),即乘以 2 的 m 次方
n >> m -> 计算 n/(2^m),即除以 2 的 m 次方
1 << n -> 2^n

5 ^ 0
5
也就是0和任何数异或的结果是这个任何数

3 ^ 3
0
任何相同的数异或的结果是0
又由于异或满足交换结合律,整合重复的数都有2个,所以可以抵消掉
链接:https://leetcode-cn.com/problems/single-number/solution/136-zhi-chu-xian-yi-ci-de-shu-zi-pythonjie-ti-si-l/
Python中bin一个负数(十进制表示),输出的是它的原码的二进制表示加上个负号,巨坑。
Python中的整型是补码形式存储的。
Python中整型是不限制长度的不会超范围溢出。
所以为了获得负数(十进制表示)的补码,需要手动将其和十六进制数0xffffffff进行按位与操作,再交给bin()进行输出,得到的才是负数的补码表示。

练习题:
leetcode 习题 136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
尝试使用位运算解决此题。
题目说明:
“”"
Input file
example1: [2,2,1]
example2: [4,1,2,1,2]
Output file
result1: 1
result2: 4
“”"
class Solution:
def singleNumber(self, nums: List[int]) -> int:
# your code here
由于还不是很会算python 我再查找了很多资料后找到了算法

这题应当运用异或运算中,AA=0,A0=A。

from typing import List
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        single_number = 0
        for num in nums:
            single_number ^= num
        return single_number
        

typing模块的作用:

类型检查,防止运行时出现参数和返回值类型不对的情况
作为开发文档附加说明,方便使用函数时传入和返回正确的参数,利于开发效率
该模块并不会实际影响到程序的运行,不会报错,但是会有提示。

第二天

条件语句if语句支持嵌套,即在一个if语句中嵌入另一个if语句,从而构成不同层次的选择结构。Python 使用缩进而不是大括号来标记代码块边界,因此要特别注意else的悬挂问题。

【例子】

hi = 6
if hi > 2:
    if hi > 7:
        print('好棒!好棒!')
else:
    print('切~')

【例子】

temp = input("不妨猜一下小哥哥现在心里想的是那个数字:")
guess = int(temp)
if guess > 8:
    print("大了,大了")
else:
    if guess == 8:
        print("你这么懂小哥哥的心思吗?")
        print("哼,猜对也没有奖励!")
    else:
        print("小了,小了")
print("游戏结束,不玩儿啦!

程序中出现中文,运行的时候出现如下错误:

SyntaxError: Non-UTF-8 code starting with ‘\xb2’ in file XXX.py on line 8, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for de

导致出错的根源就是编码问题。

解决方案是:

在程序最上面加上:# coding=gbk
")
3. if - elif - else 语句
if expression1:
expr1_true_suite
elif expression2:
expr2_true_suite
.
.
elif expressionN:
exprN_true_suite
else:
expr_false_suite
elif 语句即为 else if,用来检查多个表达式是否为真,并在为真时执行特定代码块中的代码。
【例子】

temp = input('请输入成绩:')
source = int(temp)
if 100 >= source >= 90:
    print('A')
elif 90 > source >= 80:
    print('B')
elif 80 > source >= 60:
    print('C')
elif 60 > source >= 0:
    print('D')
else:
    print('输入错误!')
  1. assert 关键词
    assert这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError的异常。
    【例子】
my_list = ['lsgogroup']
my_list.pop(0)
assert len(my_list) > 0

pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

list1 = ['Google', 'Runoob', 'Taobao']
list_pop=list1.pop(1)
print "删除的项为 :", list_pop
print "列表现在为 : ", list1

删除的项为 : Runoob
列表现在为 : [‘Google’, ‘Taobao’]
#AssertionError
在进行单元测试时,可以用来在程序中置入检查点,只有条件为 True 才能让程序正常工作。
【例子】

assert 3 > 7

AssertionError

# 循环语句
【例子】布尔表达式返回0,循环终止。

```python
string = 'abcd'
while string:
    print(string)
    string = string[1:]

结果:
abcd
bcd
cd
d

 for i in 'ILoveLSGO':
    print(i, end=' ')  # 不换行输出

I L o v e L S G O
【例子】

member = ['张三', '李四', '刘德华', '刘六', '周润发']
for each in member:
    print(each)

 张三
 李四
 刘德华
 刘六
 周润发

for i in range(len(member)):
    print(member[i])

张三
李四
刘德华
刘六
周润发
【例子】

dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

for key, value in dic.items():
    print(key, value, sep=':', end=' ')
    

a:1 b:2 c:3 d:4

python学习_第1张图片
解释print(menble[i]):
x = ‘iplaypython’
for i in x:
print i,

i p l a y p y t h o n
range(len(x))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
len(x)
11
for i in range(len(x)):
print x[i],

i p l a y p y t h o n

#for else循环
当for循环正常执行完的情况下,执行else输出,如果for循环中执行了跳出循环的语句,比如 break,将不执行else代码块的内容,与while - else语句一样。

for num in range(10, 20):  # 迭代 10 到 20 之间的数字
    for i in range(2, num):  # 根据因子迭代
        if num % i == 0:  # 确定第一个因子
            j = num / i  # 计算第二个因子
            print('%d 等于 %d * %d' % (num, i, j))
            break  # 跳出当前循环
    else:  # 循环的 else 部分
        print(num, '是一个质数')

10 等于 2 * 5
11 是一个质数
12 等于 2 * 6
13 是一个质数
14 等于 2 * 7
15 等于 3 * 5
16 等于 2 * 8
17 是一个质数
18 等于 2 * 9
19 是一个质数

range()函数补充

range()函数内只有一个参数,则表示会产生从0开始计数的整数列表:

range(4)
[0, 1, 2, 3] #python 返回值
1
2
python range中,当传入两个参数时,则将第一个参数做为起始位,第二个参数为结束位:

range(0,5)
[0, 1, 2, 3, 4]
1
2
range()函数内可以填入三个参数,第三个参数是步进值(步进值默认为1):

range(0,10,3)
[0, 3, 6, 9]
1
2
range函数的参数和结果也并非一定要是正数或是递增的,好比下面两个例子:

range(-4,4)
[-4, -3, -2, -1, 0, 1, 2, 3]

range(4,-4,-1)
[4, 3, 2, 1, 0, -1, -2, -3]

#enumerate()函数
enumerate(sequence, [start=0])
sequence – 一个序列、迭代器或其他支持迭代对象。
start – 下标起始位置。
返回 enumerate(枚举) 对象
【例子】

seasons = ['Spring', 'Summer', 'Fall', 'Winter']
lst = list(enumerate(seasons))
print(lst)
#[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
lst = list(enumerate(seasons, start=1))  # 下标从 1 开始
print(lst)

[(1, ‘Spring’), (2, ‘Summer’), (3, ‘Fall’), (4, ‘Winter’)]

languages = ['Python', 'R', 'Matlab', 'C++']
for language in languages:
    print('I love', language)
print('Done!')

‘’’
I love Python
I love R
I love Matlab
I love C++
Done!
‘’’

for i, language in enumerate(languages, 2):
    print(i, 'I love', language)
print('Done!')

‘’’
2 I love Python
3 I love R
4 I love Matlab
5 I love C++
Done!
‘’’
推导:

x = [[i, j] for i in range(0, 3) for j in range(0, 3)]
print(x)
# [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]

x[0][0] = 10
print(x)
# [[10, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]

[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}
print(b)

{0: True, 3: False, 6: True, 9: False}

c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
print(c)

神奇
{1, 2, 3, 4, 5, 6}

 s = sum([i for i in range(101)])
print(s)  # 5050
s = sum((i for i in range(101)))
print(s)  # 5050

我的疑问:

什么鬼呀

a = (x for x in range(10))
print(a)

#  at 0x0000025BE511CC48>

print(tuple(a))

# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

1、编写一个Python程序来查找那些既可以被7整除又可以被5整除的数字,介于1500和2700之间。

a=[i for i in range(1500,2700) if (i%5) ==0 and (i%7) ==0]
print(a)

2、龟兔赛跑游戏

题目描述:

话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔 子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以 上,它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。

然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1(表示每秒兔子能跑v1 米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找 到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。

输入:

输入只有一行,包含用空格隔开的五个正整数v1,v2,t,s,l,其中(v1,v2< =100;t< =300;s< =10;l< =10000且为v1,v2的公倍数)

输出:

输出包含两行,第一行输出比赛结果——一个大写字母“T”或“R”或“D”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。

第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。

样例输入:

10 5 5 2 20

样例输出

D 4

coding=gbk

from typing import List

argstr = input(‘请输入五个正整数v1(兔速),v2(龟速),t(兔领),s(兔停),l(赛道长),
请用空格隔开:’)

coding=gbk

from typing import List

argstr = input(‘请输入五个正整数v1(兔速),v2(龟速),t(兔领),s(兔停),l(赛道长),
请用空格隔开:’)

argulist = argstr.split(' ')
'''
v1 = int(argulist[0])   #兔速度
v2 = int(argulist[1])   #龟速度
t = int(argulist[2])    #兔子领先休息阈值
s = int(argulist[3])    #停止时间
l = int(argulist[4])    #赛道长度
'''
v1, v2, t, s, l = (int(i) for i in argulist)
i_t = i_s = 0  # 初始时间
count_s = s + 1  # 兔子休息时长计数,初值大于停止时间,停止2s那么第3s时才算动
distance_t = distance_r = 0  # 兔子及乌龟跑的距离

while distance_t < l and distance_r < l:  # 只要没跑到终点就继续跑
    distance_t = v2 * i_t  # 乌龟已跑距离
    if count_s > s:  # 停止触发条件,默认运动状态
        distance_r = v1 * i_s  # 兔子已跑距离
        i_s += 1  # 兔子运动时间累加
    if distance_r - distance_t >= t:  # 如果>t兔子休息s秒
        count_s = 0  # 计时器清0

    i_t += 1  # 乌龟运动时间累加
    count_s += 1  # 兔子休息时间计数

if distance_t == distance_r:
    print('D', '%d' % (i_t - 1))

elif distance_t > distance_r:
    print('T', '%d' % (i_t - 1))
else:
    print('R', '%d' % (i_t - 1))

你可能感兴趣的:(python)