题目:
打印出如下图案(菱形):
* *** ***** ******* ***** *** *
这道题我第一思路就是用格式化函数,因为他真的是太方便了,不多说,代码如下
star = [1,3,5,7] for i in range(0,7): if i <= 3: print(f"{'*'*star[i]:^7}") else: print(f"{'*'*star[-(i-2)]:^7}")
对比原版代码及思路:
先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。 程序源代码: from sys import stdout for i in range(4): for j in range(2 - i + 1): stdout.write(' ') for k in range(2 * i + 1): stdout.write('*') print('') for i in range(3): for j in range(i + 1): stdout.write(' ') for k in range(4 - 2 * i + 1): stdout.write('*') print('')
虽然我知道他这样是一种思考的方法,但是他真的没有我方便
下一题~
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和
仔细分析这个数列,从第三项开始每一项都是的分子和分母前两项的和,直接建立四个向量,分别对应前两项的分子和分母,然后递归相加就行了
a1 = 2 a2 = 1 b1 = 3 b2 = 2 s1 = 0 for i in range(1,11): s1 += a1/a2 + b1/b2 a1,a2 = a1+b1,a2+b2 b1,b2 = b1+a1,b2+a2 print(s1)
后来仔细分析发现,是我想得有点复杂了,从第二项开始,每一项的分子都是前一项分子与分母的和,分母就是前一项的分子,于是乎,代码变成了这样:
a = 2.0 b = 1.0 s = 0 for n in range(1,21): s += a / b t = a a = a + b b = t print (s)
下一题~
求1+2!+3!+...+20!的和。
其实挺简单的,前提是你得知道这里这个感叹号是什么意思,不多说,上代码
先给你们看看我的代码:
s = 0 for i in range(1,21): s1 = 1 while i >1: s1 *= i i = i-1 s += s1 print(s)
然后给你们看看答案:
n = 0 s = 0 t = 1 for n in range(1,21): t *= n s += t print ('1! + 2! + 3! + ... + 20! = %d' % s)
他这个时间复杂度明显少了很多
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)