卷上卷队——钟某人python刷题的day6——100道python例题

题目:

打印出如下图案(菱形):

   *
  ***
 *****
*******
 *****
  ***
   *

这道题我第一思路就是用格式化函数,因为他真的是太方便了,不多说,代码如下

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)

他这个时间复杂度明显少了很多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值