第8次全天课笔记-20180902

今早练习1:将字符串:"k:1|k1:2|k2:3|k3:4",处理成 python 字典:{'k':'1', 'k1':'2', 'k2':'3','k3':'4' }

s = "k:1|k1:2|k2:3|k3:4"
result = {}
a = s.split("|")
print(a)
for i in a:
    key,value = i.split(":")
    result[key] = value

print (result)

出一个题:{'k': '1', 'k1': '2', 'k2': '3', 'k3': '4'}  拼回:"k:1|k1:2|k2:3|k3:4"
字典的key取出来,然后用sort或者sorted均可
>>> sorted(d.keys())
['k', 'k1', 'k2', 'k3']

算法:
1 先把字典的key排序
2 然后按照排序后的key,依次取value,然后使用:,
把key和value做拼接,然后把拼接后的结果存到一个列表里面
3 使用join,使用|将列表的所有元素做拼接

d = {'k': '1', 'k1': '2', 'k2': '3', 'k3': '4'}
result = []

for key in sorted(d.keys()):
    s= key+":"+d[key]
    result.append(s)

print (result)
print ("|".join(result))

 

练习题2:题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

  1. 程序分析:在10万以内判断
import math

def pingfang(x):
    for i in range(1,int(math.sqrt(x))+1):
        if i*i == x:
            return True
    return False

for j in range(1,100000):
    if pingfang(j+100) and pingfang(j+100+168):
        print(j)

 

练习题3:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

def get_weekday_word():
    s = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"] #如果是list,换行不用加斜杠
    first_letter = input("请输入一个字母:")
    result = []
    for i in s:
        if first_letter.lower() == i[0].lower():
            result.append(i)
    if len(result) == 0:
        return ""
    if len(result) == 1:
        return result[0]
    if len(result) == 2:
        second_letter = input("请输入第二个字母:")
        for j in result:
            if j[1] .lower()== second_letter.lower():
                return j
        else:
            return ""

print(get_weekday_word())

for else  这个return

程序中的else语句是便于处理某种行为,在循环的正常终止时执行:即以return或者break方式退出循环将会忽略else语句;存在continue语句将会执行else。

a= [-1,2,3,-3,0,-5,5]

生成一个新列表,-1的左边都是小于它的,右边都是大于它的。

a= [-1,2,3,-3,0,-5,5]
base = a[0]
list1=[]
list2=[]

for i in a[1:]:
    if i>=base:
        list2.append(i)
    else:
        list1.append(i)

print(list1+[base]+list2)

在列表中插入一个新的元素 [100, 2, 3, -3, 0, -5, 5]
在0的前面插入一个元素10000

result = []
a = [100, 2, 3, -3, 0, -5, 5]
target_num =10000
for i in a:
    if i == 0:
        result.append(target_num)
        result.append(i)
    else:
        result.append(i)

print (result)

2 在列表中的第三个位置插入10000

算法:使用切片把第三个位置前的取到,使用切片把位置三后的取到,把10000存到一个列表,三个列表相加

result = []
a = [100, 2, 3, -3, 0, -5, 5]
target_num =10000

result=a[:2]+[target_num]+a[2:]

print(result)

切片赋值 (切片可多可少)

>>> a

[[-1, -2], 2, 3, -3, 0, -5, 5]

>>> a[0:2]=[1,2,3]

>>> a

[1, 2, 3, 3, -3, 0, -5, 5]

>>> a[0:2]=[-1]
>>> a
[-1, 3, 3, -3, 0, -5, 5]

切片取值

>>> a[:]
[-1, 3, 3, -3, 0, -5, 5]
>>> a[:-1]
[-1, 3, 3, -3, 0, -5]
>>> a[::2]
[-1, 3, 0, 5]

Remove删除元素

>>> if 3 in a:
...     a.remove(3)
...
>>> a
[-3, 0, -5, 5]

遍历的时候,不要删除原列表,容易搞错

>>> a=[1,1,1,1,2,3]
>>> for i in a:
...     if i == 1:
...         a.remove(1)
...
>>> a
[1, 1, 2, 3]

先计算有多少个,然后删除N遍

>>> for i in range(a.count(1)):

...     a.remove(1)

...

>>> a

[2, 3]

或者是try except判断

>>> a= [1,1,1,1,1,2,3]
>>> while 1:
...     try:
...         a.remove(1)
...     except:
...         break
...

刻意练习:坚持写

预习视频,看着手把手把代码敲了一遍。

不断重复看,继续打印变量,继续看。

不会马上就去问。把作业都写了一遍。

py3:简单看了看,作业又写了一遍。

现在:每周定个目标,每周看啥。

对着ppt所有内容看一遍,作业做一遍

核心编程第二版在看。

精力允许。

可以把某些模块,系统练习一遍。按照吴老师的ppt.

公司不能上网,只能敲代码。

晚上9点下班-11点练习代码

日报:周末,日报压力比较大。

1个月左右,不是那么抗拒了,成为生活的一部分

全天课一天300-500行,大概。漏掉了,可以复习,看看别人的。

可以用新的方法解决旧的问题。

坚持的刻意练习。不加班、不带娃

定个目标:看别人的日报。必看洪强同学。

最后:

优秀的人是持续的自律,共同进步,成为更好的自己。升职加薪。量变引起质变。

学习方法:
1 算法写出来
2 把算法翻译成代码

实践+思考
看别人的,总结出来算法。
在看一遍,在写
不断的练习。


时间的投入是必须的。思考,基本的知识点。多做几遍。

对于加班:
能力够,不加班
加班是态度的体现。
能力不够,靠加班。

坚持:

做一个事情,收集很多信息,处理它。(冷启动)

周期长一点点,且没有成就感。

改进:

驱动力

制动力:没有正反馈,缺乏激励。

练习:

[1,-1,2,-2,3,-3]

max()排序

每次找到列表最大值,存到新的list,

在老的list里面删掉一个。

继续重复上面的过程,直到所有的元素都到新list.

1 升序

2 降序

方法1:

a= [1,-1,2,-2,3,-3]
result =[]

for i in range(len(a)):
    result.append(max(a))
    a.remove(max(a))

print (result)
result.reverse()
print (result)
a= [1,-1,2,-2,3,-3]
result =[]
for i in range(len(a)):
    result.insert(0,max(a))
    a.remove(max(a))

print (result)

列表的操作,list() 工厂类

>>> list((1,2,34))
[1, 2, 34]
>>> list({1:2,3:4})
[1, 3]
>>> list("abc")
['a', 'b', 'c']
>>> list((1,2,3))
[1, 2, 3]

a = "abcdefghi"

把开头、结尾、中间位置的字母变为1

其他字母不变

 

a = "abcdefgh"
a = list(a)

a[0]='1'
a[-1]='1'
mid = len(a)//2

if len(a)%2 == 0:
    a[mid] = '1'
    a[mid-1] = '1'
else:
    a[mid] ='1'

print("".join(a))

operator函数

 

>>> 6>>1   #右移
3
>>> 12>>1
6
>>> 12>>2
3
>>> 1<<2   #左移
4
>>> 1<<4

 

>>> a = [(1,),(1,1),(1,2,3),(2,2)]
>>> def func(b):
...     return len(b)
...
>>> a.sort(key = func)
>>> a
[(1,), (1, 1), (2, 2), (1, 2, 3)]
>>> a.sort(key = func,reverse = True)

按照所有元素的和求值

a = [(-1,),(1,1),(-2,2,3),(2,2)]
def func(b):
    return sum(b)

a.sort(key = func)
print(a)

找到英文句子中最长的单词

s = "I am a boy! hi , glory road"

算法1:

1 使用空格分割,列表

2 遍历列表,每个词

3 max_length =0

4 max_word =""

s = "I am a boy! hi , glory road  hello"
max_length =0
max_word =[]
word_list = s.split()

for word in word_list:
    if len(word)>max_length:
        max_length = len(word)
        max_word = [word]
    elif len(word)==max_length:
        max_word.append(word)
print (max_word)
s = "I am a boy! hi , glory road  hello"
word_list = s.split()
word_list.sort(key=lambda x:len(x))
for word in word_list:
    if len(word) == len(word_list[-1]):
        print (word)

列表的复制

【引用复制】

>>> a = [1,2]

>>> b=a

>>> id(b)

31980744

>>> id(a)

31980744

>>> b.append(3)

>>> a

[1, 2, 3]

【不引用复制】

>>> a

[1, 2, 3]

>>> b=a[:]

>>> b

[1, 2, 3]

>>> id(a)

31980744

>>> id(b)

31980936

>>> b.append(4)

>>> b

[1, 2, 3, 4]

>>> a

[1, 2, 3]

小练习:
生成一个学生资料库:
每个学生:名字 班级 考试成绩(科目名称,成绩)
[名字 班级 考试成绩 [科目名称,成绩]]

请实现一个学生信息和成绩的录入,以及查询
以及更新和删除。

print ("欢迎来到熊孩子成绩管理系统!")
print ("""
可操作的命令如下:
add_info:可以添加学生的名字和班级
add_grade:可以增加学生的考试成绩
modify_grade:可以修改学生的考试成绩
get_grade:可以获得学生的某个学科考试成绩
delete_grade:可以删除学生的某个学科考试成绩
""")

xionghaizi_info = []
def add_info(info):
    if len(info) > 0:
        print("信息已存在")
        return
    name = input("请输入学生的名字:")
    info.append(name)
    class_info = input("请输入学生的班级")
    info.append(class_info)
def add_grade(info):
    if len(info) >=3:
        subject = input("请输入学生的考试科目:")
        for i in info[2:]:
           if i[0] == subject:
               print("此学科成绩已存在")
               return
        else:
            grade = input("请输入学生此科目的考试成绩:")
            info.append([subject,grade])
    else:   
        subject = input("请输入学生的考试科目:")
        grade = input("请输入学生此科目的考试成绩:")
        info.append([subject,grade]) 

def modify_grade(info):
    if len(info) >=3:
        subject = input("请输入要修改的学生考试科目:")
        for i in info[2:]:
           if i[0] == subject:
               grade = input("请输入学生此科目的更改后考试成绩:")
               i[1] = grade
               return
        else:
            print ("此学科的成绩不存在,无法修改:")
    else:
        print ("此学生没有成绩,无须修改:")

def get_grade(info):
    if len(info) >=3:
        subject = input("请输入要查询的学生考试科目:")
        for i in info[2:]:
           if i[0] == subject:              
               print(i[1])
               return
        else:
            print ("此学生无此科目成绩,无法查询!")
    else:
            print ("此学生无科目成绩,无法查询!")

def del_grade(info):
    if len(info) >=3:
        subject = input("请输入要删除的学生考试科目:")
        for i in info[2:]:
           if i[0] == subject:             
               info.remove(i)
               return
        else:
            print ("此学生无此科目成绩,无法查询!")
    else:
        print("此学生无成绩可以删除!")

print ("请初始化学生信息:")
add_info(xionghaizi_info)

while 1:
    command = input("请输入你的命令:")
    if command == ".":
        print ("bye!")
        break 
    elif command == "add_grade":
        add_grade(xionghaizi_info)
    elif command == "modify_grade":
        modify_grade(xionghaizi_info)
    elif command == "get_grade":
        get_grade(xionghaizi_info)
    elif command == "del_grade":
        del_grade(xionghaizi_info)

推导列表

>>> [x for x in range(2,7,2)]

[2, 4, 6]

>>> [x*2  for x in range(2,7,2)]

[4, 8, 12]

>>> [x**2  for x in range(1,11)]

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

[x**2  for x in range(1,11) if x %2==0]

六剑客

Map,filter,reduce,切片,lambda,推导列表

输出 10-30 用两个for

>>> [int(x+y) for x in ["1","2","3"] for y in map(str,range(10)) if int(x+y)<=30]

d = {'x': 'A', 'y': 'B', 'z': 'C' }
print ([k + '=' + v for k, v in d.items()])

求字典key中数字的和

>>> [key  for key in {1:'a',2:"b","a":3} if isinstance(key,int)]
[1, 2]
>>> sum([key  for key in {1:'a',2:"b","a":3} if isinstance(key,int)])
3

求字典key,value中数字的和

两个列表相加

sum([key  for key in {1:'a',2:"b","a":3} if isinstance(key,int)]+[value  for value in {1:'a',2:"b","a":3}.values() if isinstance(value,int)])

猜你喜欢

转载自www.cnblogs.com/xuefeifei/p/9635058.html