關於一些基礎代碼的實現
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")
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 6
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)
這裏第二個循環加一是為了避開數字過小的時候引起錯誤。
這些是一點自己的想法
關於一些基礎代碼的實現