1. 程式人生 > >關於一些基礎代碼的實現

關於一些基礎代碼的實現

函數 代碼 格式 優化 素數 乘法 input 很慢 int

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 6

2 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)
這裏第二個循環加一是為了避開數字過小的時候引起錯誤。
這些是一點自己的想法

關於一些基礎代碼的實現