Jan 122021
 

这是刷的第二题,其实是easy程度的第二题,题目比较简单。

就是把数字反转,要考虑正负,0的处理。

https://leetcode.com/problems/reverse-integer/

就是把数字 321,转换c123,120,转换成 21。需要处理几个特殊的情况,正负和零。

解答1

这个最高效的解决办法,我反而看懂了。

class Solution:
    def reverse(self, x: int) -> int:
        y = abs(x)
        y = str(y)
        y = y.strip()
        y = y [::-1]
        y=int(y)


        if y >= 2**31-1 or y<= -2**31:
            return 0
        elif x < 0:
            return -y
        else:
            return y

说一下我的理解

  1. 设置一个变量,y,把x的绝对值
  2. 变成字符串
  3. 去掉末尾的0
  4. 字符串反转
  5. 变成整数
  6. 做一个边界的判断。
  7. 根据n的正负,确定返回值。

Jan 112021
 

其实我学过好几次Python,基本都中途报废,一个重要的原因,其实就是没做练习。很多东西,看起来,都能看懂,也都能理解,不动手,就很难深入的理解,更别谈使用。

以前老听国外的同行说刷题进大公司,也不清楚他们在说啥。这下总算明白了。Leetcode 是一个非常有名的刷题网站,一道题目,你可以用多种语言来实现。

昨晚注册了一个账号,开始了刷题的生涯。在油管上很多视频帮忙解题,关键还是你要理解,自己能写出来。

据说这道题,Two Sum是网站成立的第一道题目,日后python的水平高低,就看刷题的数量。

网站做的非常不错,帮你验证你的代码是否正确,是否可以满足不同的条件。也让你尝试多个方法来解决一个问题。

关于编程的题目,基本都在这里

https://leetcode.com/problemset/algorithms/

我就选第一题来开始

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] + nums[1] == 9,
we return [0, 1].

上面就是题目,现在至少看到有4种以上的解答,抄过来是没啥意思的,关键还是自己能理解。我就把我能理解的记录下来。

解答1:循环解决

这个应该是最简单直接的解答,不过我也费了半天,理解了,写下来,提交上去。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range (len(nums)-1):
            for j in range (i+1,len(nums)):
                if nums[i]+nums[j]==target:
                    return[i,j]

解答二:字典

理解真的比较费劲,这个应该也是我看到最简洁的答案, 我能理解,太过于巧妙,我是敲不出这样的代码。

为了加深我的理解,我把我的理解,也自己描述一遍。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dic={}   #key is diff, index as value
        for i,num in enumerate (nums):
            if num in dic:
                return (dic[num],i)
            else:
                diff=target-num
                dic[diff]=i

为了加深理解,我记录一下我的理解过程。

1:把nums的列表,加上索引。

2:dic,字典初始化的时候是空的。

3:当第一次运行,if 语句是False,直接运行else,把差值作为key,索引作为value。写入到字典里

4:第二次运行,检查当前的数字是否在字典里,如果存在,条件为True,就可以把相关数字的索引输出。因为字典里存放的是差值,如果当前数字等于差值,通过字典,获取到这个差值的索引,和当前数字的索引。

参考资料

http://icejoywoo.github.io/2019/03/19/python-iterate-list-and-dict.html

https://draapho.github.io/2017/01/03/1701-python-list-dict/

https://leetcode-cn.com/problems/two-sum/solution/liang-zhi-zhi-he-pythonjie-fa-shi-yong-zi-dian-by-/

Jan 032021
 

找出0到100的奇数和偶数

奇数列表
n=0
list=[]

for i in range (101):
    if i%2==0:
        continue
    list.append(i)

print (list)

如果是需要偶数

n=0
list=[]

for i in range (101):
    if i%2==0:
        list.append(i)

print (list)

求质数,对比一下

list=[2,]
for x in range (3,101):
    for y in range (2,x):
        if x%y==0:
            break
    else:
        list.append(x)

print(list)
下面这个例子
n=input('输入数字,看是否有整数平方根:')

n=int(n)

for i in range (n):
    if i*i==n:
        print('整数平方根是 ',i)
        break
else:
    print('没有找到正平方根')

如果break,就不会执行else,正常结束,会运行else区块。

你可以尝试去掉break,看看打印的结果,你就能深刻理解。

Dec 152020
 

把老师说的整理出来,慢慢就记住了。我就当给小孩做笔记。

数据类型

  1. 整数,
  2. 浮点数,
  3. 字符串,
  4. 布林值(True,False)
  5. 列表(list),
  6. 不可变的列表 Tuple,
  7. 集合(没有顺序的概念),set
  8. 字典(key value pair),
  9. 变量.

后面其实就是解析一下上面的数据类型是如何使用,有那些规则。

说明

列表是有顺序分可修改和不可修改两种。

[ ] 代表列表,[3,4,5]  [‘hello’,’world’],中括号

不能修改的列表 tuple,括号

(3,4,5) , (‘hello’, ‘world’)

集合 set,没有顺序的概念,大括号

{3,4,5}

字典

{‘apple’: ‘苹果’, ‘data’:’数据’}

变量,可以是任意字母,开头不能是数字

字符串

A='hello'
B='world'
C=A*3+B
print (C)

打印出来就是

hellohellohelloworld

x**y 次方

单引号,双引号,多行文字

整数除法  7//6 =1

小数除法  7/6

取余数 7%6  1

s=’hello’

print(s[1:4])

密码换位

A=input('请输入你的密码,可以数字,特殊符号和文字:')

L=len(A)

print (A[3:L]+A[0:3])
print (A[3:]+A[:3])

上面的写法,

A=[12,60,15,70,90]
A[0]=50
print (A)
A[1:4]=[]
print (A)

对列表的12,更新成50,删除内容

[50, 60, 15, 70, 90]
[50, 90]
Dec 152020
 

当你输入一个数字,确认他是否有整数的平方根。

n=input('输入数字,看是否有整数平方根:')

n=int(n)

for i in range (n):
    if i*i==n:
        print('整数平方根是 ',i)
        break
else:
    print('没有找到正平方根')

如果break,就不会执行else,正常结束,会运行else区块。

你可以尝试去掉break,看看打印的结果,你就能深刻理解。

Dec 152020
 

理解这个地方其实是有难度的,必须动手练习。

for i in 'hello':
    if i=='l':
        continue
    else:
        print(i,end='')

print()


for i in 'hello':
    if i=='l':
        break
    else:
        print (i,end='')

print()

print ('跳出循环时候的i的值',i)

说一下我自己的理解。break,就是跳出循环,往下走。continue,往上继续运行。

第一段代码,当i==l  是True, 触发continue,往上继续运行,而不会运行print, 最后你会发现输出的时候,少了2个l。

第二段代码,当 i==l,直接跳出循环,终止,

heo
he
跳出循环时候的i的值 l