task2学习笔记

文章开头,先写一下task1中的最后一个leetcode题的解法,我写的揭发太过复杂,在此写简单代码算作上一次作业的改正吧。
编写solution.py文件:
xlist=input("Please enter numbers of a list: ")
ylist=[]
list=xlist.split()
for num in list:
x=int(num)
ylist.append(x)
class Solution():

 def singleNumber(self,nums):
      result=0
      for item in nums:
          result^=item
      return result

my_solution=Solution()
print(“result:”+str(my_solution.singleNumber(ylist)))
运行,得到:
Please enter numbers of a list: 2 2 1
result:1
Please enter numbers of a list: 4 1 2 1 2
result:4
这个用到了a^ a=0,a^ 0=a,以及异或运算的交换律和结合率,整个列表中只有一个元素是单个的,别的元素都是成对的,将元素中的所有元素都放在异或运算中,经过交换和结合,成对的数异或运算就是0,单个的数再与0异或运算还是这个数,因此找出单个的数。

条件语句
1.条件语句有:
1)if 语句
2)if—else语句
3)if—elif—else语句(注意:这里的else可省略)
if语句支持嵌套,下面说一下if嵌套和if—elif—else语句的区别:
if嵌套语句的内层语句既可以嵌套在if的代码块中,也可以嵌套在else的 代码块中 每层嵌套都得先满足上一层次的if或else中的条件才能考虑 被if或else嵌入的if语句中的条件是否成立,嵌套是一种依托的关系;
但是if—elif—else语句中只用满足if或elif或else的条件是独立的,只要其中的一个条件满足,整个if—elif—else语句就可以执行。
(在我第一次理解的时候,理解错误,把两者的作用理解成一模一样的,后来再次思考意识到错误,因此把它写在这里)
2.若编写代码要独立测试多个条件,就用多个if语句;如果只测试一个条件,就使用”if—else语句“或“if—elif—else语句”。
3.注意if语句有”if object:“的结构,object可以是数值,字符串,列表,元组,字典等,当object非空时,”if object:“中的object相当于True,if下的代码块可以执行;反之则不能执行。

4.第一次了解:关键词assert
(以前见到的只有assertIn,assertNotIn,assertEqual,assertNotEqual,
assertTrue,assertFalse这些unittest.TestCase类中的断言方法)
当assert后面的条件为False时,系统崩溃,返回AssertionError
在这里插入图片描述
在这里插入图片描述
进行单元测试时,用于在程序中植入检查点,当条件为True时程序正常工作,否则就是AssertionError。

循环语句
一.while语句
1.while 布尔表达式:
代码块
(布尔表达式是一段代码声明,代码的结果只有True和False两个值)
while语句中的不二表达式若不含>,<,in等运算符,仅给出”while object:“,这里的用法和前面提到的”if object:“的用法是一样的。
task2学习笔记_第1张图片
task2学习笔记_第2张图片
这两个代码运行后没有条件制止它,所以它会无限循环,为了不让我的电脑崩溃,使用快捷键CTRL+C停止代码运行。

因此,就引出了一个问题,怎么让while语句执行完后能停止?
1)定义一个退出值:
eg:task2学习笔记_第3张图片
task2学习笔记_第4张图片
这里利用quit作为退出值,只要我输入的不是quit,他就能一直循环;相反,我一输入quit,回车即停止运行。
2)利用标志符退出:
eg:根据年龄不同而门票价格不同,本题输入你的年龄来确定你必须买哪个价位的门票,因为年龄不能小于等于0,因此当你输入的年龄小于等于0时,else语句下的代码块执行,标识符active=False,不满足while循环的条件,从而停止循环。
task2学习笔记_第5张图片
在这里插入图片描述
3)利用break和continue退出循环:
这两个关键词在很多编程语言中都有涉及,只要学过一种编程语言,就很容易理解它们的用法和区别,在此不提了。
4)利用快捷键CTRL+C停止代码运行
这是强制停止,通常用于停止无限循环,上面提到过这样的例子。

2.while—else循环:
这是第一次学到,它的用法也挺interesting的
只要while语句的代码块正常执行完一系列循环并退出后,就紧接着执行else语句的代码块,与“if—else语句”确实不太一样。
若while语句下的代码块非正常退出(即利用break和continue退出),则不执行else下的代码块。
task2学习笔记_第6张图片
task2学习笔记_第7张图片

task2学习笔记_第8张图片
在这里插入图片描述
在这里我也了解到了一些代”%d“的用法:
%s:格式化一个对象为字符
%d:格式化一个对象为整数

二.for循环
用于遍历一个可迭代对象(str,list,dict,tuple,range()等)
1.for 迭代变量 in 可迭代对象:
代码块
若可迭代对象为str类的,则遍历它的每一个字符;
若可迭代对象为list或range(),
for list(range())中的每一个元素 in list(range()):
代码块
若可迭代对象为dict,则有三种遍历语法,
for key,value in dict.items():
代码块
遍历字典的键—值对
for key in dict.keys():
代码块
遍历字典的键
for value in dict.values():
代码块
遍历字典的值
2.for—else循环语句,与while—else循环语句用法一致。
task2学习笔记_第9张图片
task2学习笔记_第10张图片
这里又提到了%d,只不过这次%d代表了三个数,这三个数最后用了%(num,i,j),这个例子给我们提了醒,当%d代表多个数时应该怎么表示。
三.range()函数
通俗讲,range()函数有三种情况:
1)range(first,last)从first开始,到last结尾,不包括last但包括first
2)range(first,last,步长)
3)range(n)相当于range(0,n)
四.新学习到的函数
1.iter()----将iterable转换为iterator
其中,iterable为可迭代对象,eg:list,tuple,dict,set,str,或generator,包含生成器和带yield的generator function;
iterator为迭代器,即可以被函数next()不断返回下一值得对象
2.next(iterator[,default])
其中,[,default]是可选的,若使用next()时不写这个参数,迭代完后返回StopIteration错误;若使用next()时写这个参数,迭代完后输出这个参数。
eg
task2学习笔记_第11张图片
task2学习笔记_第12张图片
3.函数sum()—用于求列表或元组中的所有元素得和
4.enumerate(sequence[,start=0])
eg。
在这里插入图片描述
在这里插入图片描述
enumerate()也可与for语句结合使用 ,语法为:
for i,a in enumerate(A):
do something with a
或for i,a in enumerate(A,j):
do something with a(j为索引起始值,若不写则默认为0)
5.在上一个函数得例子中,用到了新函数list()—将括号内的object输出时是一个列表
五.pass 语句
空语句,不执行操作,只占位,保持句子完整性。
eg。在这里插入图片描述
task2学习笔记_第13张图片

在这里插入图片描述
可运行,没有操作结果。
六。推导式
1)列表推导式:
[expr for value in collection [if condition]]
2)元组推导式:
(expr for value in collection [if condition])
3)字典推导式:
{expr for value in collection [if condition]}
4)集合推导式
{expr for value in collection [if condition]}
这几个推导式结构类似,唯一的区别就是最外面那层括号,列表为中括号,元组为小括号,字典和集合都是大括号
task2学习笔记_第14张图片
在这里插入图片描述
第三个元组推导式在输出时必须用函数tuple(),否则就会出现下面的结果:
在这里插入图片描述
第四个是集合推导式,它将一个列表里的重复项剔除,返回一个集合;除了这个方法,还可以使用函数set():
在这里插入图片描述
在这里插入图片描述
5)其它,eg.
在这里插入图片描述
在这里插入图片描述输出的是整个字符串。
练习题
1.编写文件shuzi.py:
it=1500
while 2700>=it>=1500:
if it%50 and it%70:
print(it,end=" “,sep=” ")
it+=1
运行得出:
在这里插入图片描述
2.龟兔赛跑
m = input("Please enter your data: ") # 从左往右依次是v1,v2,t,s,l
x = list(map(int, m.split()))
a=int(x[0])
b=int(x[1])
c=int(x[2])
d=int(x[3])
e=int(x[4])
if a<=100 and b<=100 and c<=300 and d<=10 and e<=10000 and e%a0 and e%b0:

active = True
t1 = 1
t2 = 1
s1 = 0
s2 = 0
while active:
    s1 += a * 1
    s2 += b * 1
    if s1 - s2 == c:
        s2 += d * b
        t2 += d
        t1 += d
    else:
        t2 = t2 + 1
        t1 = t1 + 1
    if s1 == e or s2 == e:
        if t1 < t2:
            print("R")
            print(str(t1))
        elif t1 == t2:
            print("D")
            print(str(t1))
        else:
            print("T")
            print(str(t2))
        active = False

在这里插入图片描述

你可能感兴趣的:(笔记,python)