运维开发网

关于一些基础代码的实现

运维开发网 https://www.qedev.com 2020-02-24 15:46 出处:51CTO 作者:喜文静的我
这是最基础的if、和for语句。

1.打印一个边长为n的正方形

for i in range (6):

if i%5==0:

print(' '6)

else:

print(' '+' '4+'* ')

a=int(input('<<'))

for i in range (a):

if i%(a-1)==0:

print(' 'a)

else:

print(' '+' '(a-2)+'* ')

#求100内所有奇数的和(2500)

a=0

for i in range(1,100,2):

a=a+i

print (a)

#判断质数

a=5557

for i in range(2,5557):

if 5557%i==0:

print("no")

break

else:

print("1")

a=int (input(">>>"))

for i in range(2,a):

if a%i==0:

print("no")

break

else:

print("1")

打标记用flag。优化的话应该是range半数就可以,除去除2的偶数只用奇数应该也是优化

#打印99乘法表

99 88 77 66 55 44 33 22 11

98 87 76 65 54 43 32 21

97 86 75 64 53 42 31

96 85 74 63 52 41

95 84 73 62 51

94 83 72 61

93 82 71

92 81

9*1

19 29 39 49 59 69 79 89 99

18 28 38 48 58 68 78 88

17 27 37 47 57 67 77

11 12 13 14 15 16 17 18 19

22 23 24 25 26 27 28 2*9

99 98 97 96 95 94 93 92 91

88 8*7

for i in range (1,10):

for j in range (i,10):

print (str(i)+''+str(j)+'='+str(ij),end=' ')

print('\t')

缺点就是不对齐,有改进的方法应该。标记。不对齐的方法找到了就是做一个制表符\t这样打出来的会成为对齐的方式。直接将改后的放到上面。

#打印一个菱形

菱形的打印,初步的想法就是把上半部分和下半部分分开用print打印这应该是最基础的想法了。让我们来一起实现它。。。其实好像不好实现,在range函数当中很难实现完美的打印,这个是1、3、5、7步进,空格是3、2、1、0步进。如果用1到4来做的话,格式是空(3-i) 器(2i+1) 空(3-i),这样仿佛上半部分能够实现

for i in range(1,5):

print(' '(4-i)+''(2i-1)+' '(4-i))

这样可以实现上半部分的打印,下半部分同理,全部的代码可以如下打出,而我们就可以得到了一个最终的图形

for i in range(1,5):

print(' '(4-i)+''(2i-1)+' '(4-i))

for j in range(1,4):

print(' 'j+''(7-2j)+' 'j)






  • 其实转头过来想这个后面的空格好像可以舍去

    for i in range(1,5):

    print(' '(4-i)+''(2i-1))

    for j in range(1,4):

    print(' 'j+''(7-2j))

    有一个这样不算改进的改进方法就是range函数的,从零开始会比较简便,方法也是i+1就可以。

    for i in range(4):

    print(' '(3-i)+''(2i+1))

    for j in range(3):

    print(' '(j+1)+''(5-2j))

    口口口器口口口

    口口器器器口口

    口器器器器器口

    器器器器器器器

    口器器器器器口

    口口器器器口口

    口口口器口口口

    内心上还有一种实现的方法就是

    *

    **


    ****可以镜像复制一下也可以出来就跟打印正方形的那个方法一样。暂时不会,标记。

#打印100以内斐波那契数列

斐波那契数列记着好像是f(2)=f(1)+f(0),查阅了一下发现是第一项等于1第二项等于1,,啧啧,我这个理解好像是比较深的那个,因为如果用到range函数就可以从零开始记了,前100项就可以用range(0,100)来实现,第100项也就是到99为止,让我们来实现它吧。代码是这个样子的

a=1

b=1

print(a)

print(b)

for i in range(98):

c=a+b

a=b

b=c

print (c)

额,出现了一个这样的问题就是在前面傻傻的打了两行输出a,b,这样range函数就自然到了98就可以停止了。想不到怎么把a和b加载到循环里。这样其实打印第101项就没那么难了。啧啧,理解错误了。是100以内的,那在这里可以引用while,如果继续用for的话,采用break就好了

a=1

b=1

print(a)

print(b)

for i in range(98):

c=a+b

a=b

b=c

if c<100:

print (c)

else:

break

其实想一想用while true也行。

a=1

b=1

print(a)

print(b)

while True:

c=a+b

a=b

b=c

if c<100:

print (c)

else:

break

#打印斐波那契数列第101项

a=1

b=1

for i in range(99):

c=a+b

a=b

b=c

print(c)

#求10万内所有素数

这个就涉及到之前素数的优化问题了。要求输出10万内所有素数,首先要做到的就是算法优化问题,首先肯定能想到的就是偶数排除掉,2是素数是不能忘记的。检验的话若是一个一个实现有点太慢了,先用最基础的实现

3 5 7 9 11 13 15 17 19 21 23 25

其实实现不难,但如果用质数和它本身的话就显得除以太过冗余,我有一个想法就是如果只判断二倍以上的约数,则在这个数本身就少了一半的算数量。但这自身就一定要套用两层循环。大一点的数还好做计算,小的数例如三就不知该从何开始计算起,若要用1,那就是从1开始就一定能整除的呀。从二则无法2步步进。我看看拿什么能够解决,从3开始则我想会出现bug

这样算出来会出现多个数输出的情况

#100000nei suoyou sushu

print (2)

for i in range (3,100000,2):

for j in range(3,(i+1)//2,2):

if i%j==0:

break

else:

print(i)

这是一个很慢的算法,用之前学到的方法6的周围一定有一个质数可以简便算法,但那是之后的事,在那之前我想有没有再简单一点的算法,这里引入开平方的会更简单一些。

print (2)

for i in range (3,100000,2):

for j in range(3,int(i**0.5)+1,2):

if i%j==0:

break

else:

print(i)

这里第二个循环加一是为了避开数字过小的时候引起错误。

这些是一点自己的想法

0

精彩评论

暂无评论...
验证码 换一张
取 消