Python重学记录1

写下这个标题觉得可笑,其实本人2014年就自学过一次python,当时看的是中谷教育的milo老师的视频,也跟着写了一些代码,只是因为当时工作上用不到也就淡忘了。不过说实话当时的水平也很低下,本来也没学到个什么。当时看过的书有《和孩子一起学编程》《可爱的python》等

现在由于要学机器学习,重拾python,时过境迁,当时python还是很小众的一门语言,网上的资料也较少,那时候还为到底学2.x还是3.x纠结了半天,在当时的环境下虽然3.x刚出来没多久,但似乎业界用2.x还是主流,第一是因为2.x出来得早,第二是它比较稳定,3.x版本刚出来,还不是很稳定,所以最后学了2.x,4年以后,由于机器学习的兴起,python成为新贵,而3.x也渐渐发展成了主流,于是重学的时候开始看3.x

这几天看的书有

《Python 3程序开发指南第二版》(人民邮电出版社 王弘博 孙传庆 译)

《可爱的Python》

视频有 七月在线 Python基础入门班视频

附上写过的练习程序

题目1 :字符串反转:给定一个英文句子,写一个函数将其中的单词顺序倒过来,翻转时带上标点:

 1 # str='i love china!'
 2 str='How much wood would a woodchuck chuck if a wood chuck could chuck wood?'
 3 def reverse(string):
 4     list=string.split( )
 5     # print(len(list))
 6     length=len(list)
 7     print(length)
 8     newStr=''
 9     for i in range(length-1,-1,-1):
10         # j=length-i
11         print(list[i])
12         newStr=newStr+list[i]+' '
13     return newStr.strip()
14 print(reverse(str))

 


题目2:给定一个整数n,求出0-n之间的所有质数(素数)并打印出来
 1 def isPrimeNumber(num):
 2     result=True
 3     for i in range(2,num):
 4         if(num%i==0):
 5             result=False
 6             break
 7     return (result and num>=2)
 8 # print(isPrimeNumber(0))
 9 # print(isPrimeNumber(1))
10 # print(isPrimeNumber(2))
11 def getPrimeNumber(num):
12     list=[]
13     for i in range(num+1):
14         if(isPrimeNumber(i)):
15             list.append(i)
16     return list
17 print(getPrimeNumber(10))

 


题目3:利用递归求出斐波那契数列
 1 def fibonacci(n):
 2     if(n<1):
 3         raise ValueError
 4     elif(n==1 or n==2):
 5         return 1
 6     else:
 7         return fibonacci(n-1)+fibonacci(n-2)
 8 # print(fibonacci(1))
 9 # print(fibonacci(2))
10 # print(fibonacci(3))
11 # print(fibonacci(5))
12 print(fibonacci(10))

 


题目4:汉诺塔问题。给出塔的层数n,让计算机算出每次要移动的步骤:
 1 # s means source原塔所在的柱子(源柱子)
 2 # t means target最终将塔所移动到的柱子(目的柱子)
 3 # h means helper帮助移动的柱子(缓存柱或中间柱)
 4 def hannoi(num,s,t,h):
 5     if(num==1):
 6         print('Move',num,'from ',s,'-->',t)
 7     else:
 8         hannoi(num-1,s,h,t)
 9         print('Move',num,'from ',s,'-->',t)
10         hannoi(num-1,h,t,s)
11 hannoi(7,'s','t','h')

 


题目5:用递归程序实现阶乘的运算
1 def factorial(n):
2     if(n==1):
3         return n
4     else:
5         return n*factorial(n-1)
6 print(factorial(10))

 

题目6:自己实现可变参数的函数
1 def my_print(*args):
2     print(args)
3 my_print(1,2,4,6,"a",'b','c')
4 #此处的*args实际上是将多个参数以list的形式传进去的
5 def multiple_Test(name,**kvs):
6     print(name)
7     print(kvs)
8     print(type(kvs))
9 multiple_Test('tom',china='bj',uk='london',us='washington')

 

#此处的**kvs实际上是将多个参数以dict的形式传进去的
题目7:自定义排序。给定数组及排序规则(升序或降序),实现冒泡排序
 1 def bubble_Sort(list,order):
 2 
 3     for j in range(len(list),0,-1):
 4         for i in range (len(list)-1):
 5             if (order is 'ascending'):
 6                 judge = list[i]>list[i+1]
 7             elif (order=='descending'):
 8                 judge = list[i] < list[i + 1]
 9             # print(list[i])
10             if(judge):
11                 # print('original',list[i],list[i+1])
12                 temp=list[i]
13                 list[i]=list[i+1]
14                 list[i + 1]=temp
15                 # print('now', list[i], list[i + 1])
16     return list
17 test_List=[11,9,3,5,2,7,10]
18 print(bubble_Sort(test_List,'descending'))

 


题目8:求一元二次方程的根,输入系数a,b,c的值,输出方程的根
 1 # coding:utf-8
 2 import math as m
 3 import cmath as cm
 4 print('Now we are going to calculate the roots of the following equation:\n')
 5 print('ax^2+bx+c=0')
 6 print('Pls input a')
 7 a=input()
 8 print('Pls input b')
 9 b=input()
10 print('Pls input c')
11 c=input()
12 print('Now the equation is:')
13 print(a+'x^2+'+b+'x+'+c+'=0')
14 a=int(a)
15 b=int(b)
16 c=int(c)
17 delta=b**2-4*a*c
18 r=[]
19 if(delta>0):
20     root1=(-b+m.sqrt(delta))/(2*a)
21     root2=(-b-m.sqrt(delta))/(2*a)
22     r.append(root1)
23     r.append(root2)
24 elif(delta==0):
25     root=-b/(2*a)
26     r.append(root)
27 else:
28     root1 = (-b + cm.sqrt(delta)) / (2 * a)
29     root2 = (-b - cm.sqrt(delta)) / (2 * a)
30     r.append(root1)
31     r.append(root2)
32 print('the root(s) of the equation is/are',r)

 


注:以上所有程序仅在于验证算法和思想,有些地方不严格,如输入值是否匹配处理时需要的格式没有进行判断。倘若有一天有人从百度上搜到我的博客中来,要参考我的程序的话,请自行加上输入值的异常判断。

细微知识点总结:
1、python不同于java,与或非的逻辑判断时一般要用and or not关键字,& |表示按位的与或,而且不能用!表示非
2、字符串是否相等,一般用==来判断,这点和java不同,java的字符串如果用==比较的话,比的是内存值,而python中直接用==判断两个字符串是否相等,相当于java里面的equals(),不相等时用a!=b;也可以用operator.eq(a,b)来判断两个字符串是否相等,但是前提是要导入operator包
3、非常有用的函数strip()一般来说是去除空格的,也可以去掉首尾不相关的字符串,如:
a='!@$%^&*(556677'
b=strip(a,'!@#$%^&*(')
print(b)
#'556677'
它只能去首尾不能去中间
posted @ 2018-12-23 22:49  飞向天边  阅读(195)  评论(0)    收藏  举报