思维训练
主要训练逻辑思维,将数学知识转化为程序代码
习题
题目1: 打印一个边长为n的正方形
题目解法1:** 突破传统思维,截拳道原理,摆脱过多的花式动作,直接、简单、有效的动作搞定,没有一句啰嗦语句,计算机效率也高
#!/bin/python3
#-*- coding: UTF-8 -*-
n = int(input('input your number: '))
print( '*' * n )
for i in range(n-2):
print('*', '' * (n-2), '*')
print('*'*n)
题目解法2: ** 渗透一种思维,根深蒂固一种思维,折半思维,并且在折半后又有什么规律,靠数学数字游戏来玩
#!/bin/python3
#-*- coding: UTF-8 -*-
n = int(input('input your number: '))
e = -(n//2)
for i in range(e,n+e):
if i == e or i == n+e-1:
print('*'*n)
else:
print('*',''*(n-2),'*')
题目2 求100内所有奇数的和
题目解法1: 传统思维解法,传统解法的问题在于计算机消耗的资源相对较高
#!/bin/python3
#-*- coding: UTF-8 -*-
sum1 = 0
for i in range(1,101):
if i % 2:
sum1 += i
print(sum1)
题目解法2: 直接输出奇数数列进行叠加,大量减少计算机运算
#!/bin/python3
#-*- coding: UTF-8 -*-
sum1 = 0
for i in range(1,101,2):
sum1 += i
print(sum1)
题目3 求1到5阶乘之和
题目解法1: 直接输出奇数数列进行叠加,大量减少计算机运算
#!/bin/python3
#-*- coding: UTF-8 -*-
sum1 = 0
sum2 = 1
for i in range(1,6):
for j in range(1,i+1):
sum2 *= j
else:
sum1 += sum2
sum2 = 1
print(sum1)
题目解法2: 如上算法太过啰嗦,代码不够优雅,博士写论文一个的字不能多,也不能少
#!/bin/python3
#-*- coding: UTF-8 -*-
sum1 = 0
sum2 = 1
for i in range(1,6):
sum2 *= i
sum1 += sum2
print(sum1)
题目4 给一个数,判断它是否是素数(质数)
题目解法1: 传统解法当数字给定特别大时,效率相对慢
#!/bin/python3
#-*- coding: UTF-8 -*-
n = int(input('your number: '))
m = 0
for i in range(1,n+1):
if not n % i:
m += 1
if m == 2:
print('YES')
else:
print('NO')
题目解法2: 先要迅速判断输入数以内的所有质数,若在这个数以内的质数包含自己,说明这个数就是质数,否则不是质数
#!/bin/python3
#-*- coding: UTF-8 -*-
n = int(input('your number: '))
lis = [2]
for i in range(2,n+1):
for j in lis:
if not i % j:
break
else:
lis.append(i)
if lis[-1] == n:
print('YES')
else:
print('NO')
作业
题目1 打印九九乘法表
题目解法1: 通过控制序列进行计算
#!/bin/python3
#-*- coding: UTF-8 -*-
for i in range(1,10):
for j in range(1,i+1):
print('%d * %d = %d'%(j,i,j*i),end='\t')
print('\n')
题目解法2: 通过控制m=n时进行跳出循环
#!/bin/python3
#-*- coding: UTF-8 -*-
for m in range(1,10):
n = 0
while True:
n += 1
print('%d * %d = %d'%(n,m,m*n),end=' ')
if n == m:
print('\n')
break
题目2 打印上下对称菱形,具体如下图
*
***
*****
***
*
题目解法1: 传统解法环
#!/bin/python3
#-*- coding: UTF-8 -*-
n = int(input('your number:'))
e = n//2
for i in range(1,e+2):
print(' '*(n-i),'*'*(2*i-1))
for i in range(-e,0):
i = -i
print(' '*(n-i),'*'*(2*i-1))
题目解法2: 如上解法太过啰嗦,此种类型题目要根据数学公式计算+++++++配合三元表达式,两条语句搞定
#!/bin/python3
#-*- coding: UTF-8 -*-
for i in range(-2,3):
print(' '*(-i) + '*'*(5 + i*2)) if i < 0 else print(' '*i + '*'*(5 - i*2))
扩展题目 打印如下图形
*******
*****
***
*
***
*****
*******
题目解法: 通用策略解题,计算公式,用简约代码
#!/bin/python3
#-*- coding: UTF-8 -*-
n = int(input('your number:'))
m = -(n//2)
for i in range(m,m+n):
print(' '*(-m+i) + '*'*((-i)*2 + 1)) if i <= 0 else print(' '*((-m)-i) + '*'*(2*i+1))
题目3 打印100以内的斐波那契数列
题目解法1: 传统解法环
#!/bin/python3
#-*- coding: UTF-8 -*-
sum1 = 1
sum2 = 1
for i in range(1,101):
if i == 1:
print(sum1)
elif i == 2:
print(sum2)
elif i % 2:
sum1 += sum2
print(sum1)
else:
sum2 += sum1
print(sum2)
题目4 求斐波那契数列第101项
题目解法: 传统解法环
#!/bin/python3
#-*- coding: UTF-8 -*-
sum1 = 1
sum2 = 1
for i in range(1,102):
if i == 1:
sum1 = 1
elif i == 2:
sum2 = 1
elif i % 2:
sum1 += sum2
else:
sum2 += sum1
else:
if 101 % 2:
print(sum1)
题目5 求10万内的所有素数
题目解法1: 传统解法环
#!/bin/python3
#-*- coding: UTF-8 -*-
n = 0
for i in range(2,100001):
for j in range(2,i):
if not i % j:
n += 1
else:
if n < 1:
print(i)
n=0
题目解法2: 高效解法
#!/bin/python3
#-*- coding: UTF-8 -*-
lis = [2]
for i in range(2,100001):
for j in lis:
if not i%j:
break
else:
lis.append(i)
print(lis)