关于一些基础代码的实现

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
9
8 87 76 65 54 43 32 21
9
7 86 75 64 53 42 31
96 85 74 63 52 41
95 84 73 62 51
9
4 83 72 61
9
3 82 71
92 81
9*1

19 29 39 49 59 69 79 89 99
1
8 28 38 48 58 68 78 88
1
7 27 37 47 57 67 77

11 12 13 14 15 16 17 18 19
2
2 23 24 25 26 27 28 2*9

99 98 97 96 95 94 93 92 91
8
8 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)
这里第二个循环加一是为了避开数字过小的时候引起错误。
这些是一点自己的想法

猜你喜欢

转载自blog.51cto.com/13890459/2154894