开启菜鸟的python之旅
给一个半径,求圆的面积和周长
r = int(input('plz input a nunber:'))
p = 2 * 3.14 * r
s = 3.14 * r ** r
print('The premeter of circle is %d'%p)
print('The square of circle is %d'%s)
#输入两个数比较大小后,从小到大升序打印
x = int(input('plz input a nunber:'))
y = int(input('plz input the other nunber:'))
if x >= y:
print('The ascending sort is %d>%d'%(x,y))
else:
print('The ascending sort is %d>%d'%(y,x))
#依次输入若干个整数,打印出最大值,如果输入为空,则退出程序
_max = None
for i in range(100):
y = input('plz input a nunber:')
if not y:
break
x = int(y)
if i == 0:
_max = x
if x >= _max:
_max = x
if _max == None:
print('The first input is None')
else:
print("The greattest number is %d"%_max)
#输入n个数,求n次输入后的平均数
sum = 0
n = int(input('plz input the count:'))
for i in range(n):
num = int(input('plz input a number:'))
sum += num
print(sum / n)
#打印一个边长为n的正方形
n = 5
for i in range(1,n+1):
if i == 1:
print('*' * n)
elif i == n:
print('*' * n)
else:
print('*' + ' ' * (n - 1) + '*')
#求100内所有奇数的和
sum = 0
for i in range(1,101):
if i & 1:
sum += i
print(sum)
#判断学生成绩,成绩等级A-E.....
score = int(input('plz input a number:'))
if score < 60:
print('the level is %s'%'E')
elif score >= 60 and score < 70:
print('the level is %s'%'D')
elif score >= 70 and score < 80:
print('the level is %s'%'C')
elif score >= 80 and score < 90:
print('the level is %s'%'B')
else:
print('the level is %s'%'A')
#求1到5阶乘之和
sum = 0
j = 1
for i in range(1,6):
j = j * i
#print(j)
sum += j
print(sum)
#求解输入的数是不是素数
x = int(input('>>>'))
for i in range(2,x):
if x == 2:
print(x,'is a prime number')
if x % i == 0:
print(x,'is not a prime number')
break
else:
print(x,'is a prime number')
#打印九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print('%d*%d=%d'%(i,j,i*j),end=' ')
print()
#打印如下图菱形
#打印出如下图的菱形
for i in range(0,7):
if i == 7 // 2:
print('*' * (2 * i+1))
elif i < 7 // 2:
print(' ' * (3 - i) + '*' * (2 * i + 1) + ' ' * (3 - i))
else:
a = 6 - i
print(' ' * (3 - a) + '*' * (2 * a + 1) + ' ' * (3 - a))
有趣的算法实现
问题描述:求解斐波拉契数列第101项
非递归实现
#求解斐波拉契数列第101项,非递归实现
for a in range(0,101):
if a == 0:
i = 1
#print(i,end=' ')
elif a == 1:
j = 1
#print(j,end=' ')
elif a % 2 == 0:# a为偶数时,输出i的值,
i = i + j
#print(i,end=' ')#a为奇数时,输出j的值
else:
j = j + i
#print(j,end=' ')
if a == 100:
print(i)
递归实现
def Factorial(n):
if n==1:
return 1
elif n == 2:
return 1
else:
return Factorial(n-2) + Factorial(n-1)
result=Factorial(101)
print('斐波拉契数列第101项的值是%d'%result)
问题描述:求解100000以内的所有素数
难点剖析:在100000的数据规模下进行数据操作,需要考虑到程序的时间复杂度优化处理,如下有三种算法实现,对其中两种算法进行程序执行时间的统计,让我们来对比一下不同的算法实现对性能究竟有多大的影响
第一种算法
#求解10w以内的所有素数
import datetime
count = 0
start = datetime.datetime.now()
for i in range(2,100000):
flag = True#标志位置位
if i == 2:
print(i)
else:
for j in range(2,i):
if i % j == 0:
flag = False
break
if flag == True:
print(i)
count += 1
if i >= 100000:
break
end = datetime.datetime.now()
count += 1
print(end - start)
print("From 0 to 100 includes %d prime numeber"%count)
第二种算法
#求解10w以内的所有素数(通过素数最末位的数字是1,3,7,9来提升时间复杂度?)
#也可以先通过判断该数是否是奇数,然后在奇数的范围内去判断能否只能被1或本身整除,此处不再赘述
count = 0
for i in range(2,100):
flag = True#标志位置位
if i == 2 or i == 5:
print(i)
else:
#判断i的位数
for a in range(1,6):
if i // 10 ** a == 0:
bit = a
break
#判断i的最末位是否是1,3,7,9
for x in range(1,10):
if(i - x) // 10 == 0:
last_bit = x
#筛选掉不是素数的数
if last_bit == 1 or last_bit == 3 or last_bit == 7 or last_bit == 9:#也可以判断最末尾是奇数且不等于5(用位&判断)
#得到素数
for j in range(2,i):
if i % j == 0:
flag = False
break
if flag == True:
print(i)
count += 1
count += 2
print("From 0 to 100 includes %d prime numeber"%count)
第三种算法
#求解1000000以内的素数
import datetime
print(2)
print(3)
pn = [3]
count = 1
start = datetime.datetime.now()
for i in range(5,100000,2):
flag = True#标志位置位
for j in range(count):
if i % pn[j] == 0:
flag = False
break
if flag == True:
print(i)
pn.append(i)
count += 1
if i >= 100000:
break
end = datetime.datetime.now()
count += 1
print(end - start)
print("From 0 to 100 includes %d prime numeber"%count)
读者不妨猜想一下,三种算法哪一种的执行时间最短?
好了,下面揭晓答案:
第一种算法的执行时间是:0:00:41.071175
第三种算法的执行时间是:0:00:40.491875
第三种算法的执行时间是:0:00:05.785494
总结1:第一种和第二种算法的执行时间接近,在10w的数据规模下,前两种算法的执行时间是第三种算法的8倍之多.试想一下,在数据规模达到上亿甚至上百亿的时候,算法和性能的优化有多么重要!
总结2:第三种算法思想:
素数定义:素数是除了1和其本身外不可以被其他数字整除的数
合数定义:合数必定可以被素数整除,引申开来一个不是素数的数一定可以被1到其本身的素数整除(1除外)
素数一定不是偶数,素数一定是奇数,奇数不一定是素数
以上代码均在jupyter上码出并已成功实现,笔者水平有限,若有谬误,烦请各位读者指正!
标签:count,之旅,python,菜鸟,素数,range,算法,print,input