溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

關(guān)于一些基礎(chǔ)代碼的實(shí)現(xiàn)

發(fā)布時(shí)間:2020-06-10 22:46:16 來(lái)源:網(wǎng)絡(luò) 閱讀:343 作者:喜文靜的我 欄目:編程語(yǔ)言

1.打印一個(gè)邊長(zhǎng)為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內(nèi)所有奇數(shù)的和(2500)
a=0
for i in range(1,100,2):
a=a+i
print (a)

#判斷質(zhì)數(shù)

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")

打標(biāo)記用flag。優(yōu)化的話(huà)應(yīng)該是range半數(shù)就可以,除去除2的偶數(shù)只用奇數(shù)應(yīng)該也是優(yōu)化

#打印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')

缺點(diǎn)就是不對(duì)齊,有改進(jìn)的方法應(yīng)該。標(biāo)記。不對(duì)齊的方法找到了就是做一個(gè)制表符\t這樣打出來(lái)的會(huì)成為對(duì)齊的方式。直接將改后的放到上面。

#打印一個(gè)菱形
菱形的打印,初步的想法就是把上半部分和下半部分分開(kāi)用print打印這應(yīng)該是最基礎(chǔ)的想法了。讓我們來(lái)一起實(shí)現(xiàn)它。。。其實(shí)好像不好實(shí)現(xiàn),在range函數(shù)當(dāng)中很難實(shí)現(xiàn)完美的打印,這個(gè)是1、3、5、7步進(jìn),空格是3、2、1、0步進(jìn)。如果用1到4來(lái)做的話(huà),格式是空(3-i) 器(2i+1) 空(3-i),這樣仿佛上半部分能夠?qū)崿F(xiàn)
for i in range(1,5):
print(' '
(4-i)+''(2i-1)+' '(4-i))
這樣可以實(shí)現(xiàn)上半部分的打印,下半部分同理,全部的代碼可以如下打出,而我們就可以得到了一個(gè)最終的圖形
for i in range(1,5):
print(' '(4-i)+''(2i-1)+' '(4-i))
for j in range(1,4):
print(' '
j+''(7-2j)+' 'j)






  • 其實(shí)轉(zhuǎn)頭過(guò)來(lái)想這個(gè)后面的空格好像可以舍去
    for i in range(1,5):
    print(' '(4-i)+''(2i-1))
    for j in range(1,4):
    print(' 'j+''(7-2j))
    有一個(gè)這樣不算改進(jìn)的改進(jìn)方法就是range函數(shù)的,從零開(kāi)始會(huì)比較簡(jiǎn)便,方法也是i+1就可以。
    for i in range(4):
    print(' '(3-i)+''(2i+1))
    for j in range(3):
    print(' '(j+1)+''(5-2j))
    口口口器口口口
    口口器器器口口
    口器器器器器口
    器器器器器器器
    口器器器器器口
    口口器器器口口
    口口口器口口口
    內(nèi)心上還有一種實(shí)現(xiàn)的方法就是
    *
    **

    ****可以鏡像復(fù)制一下也可以出來(lái)就跟打印正方形的那個(gè)方法一樣。暫時(shí)不會(huì),標(biāo)記。

#打印100以?xún)?nèi)斐波那契數(shù)列
斐波那契數(shù)列記著好像是f(2)=f(1)+f(0),查閱了一下發(fā)現(xiàn)是第一項(xiàng)等于1第二項(xiàng)等于1,,嘖嘖,我這個(gè)理解好像是比較深的那個(gè),因?yàn)槿绻玫絩ange函數(shù)就可以從零開(kāi)始記了,前100項(xiàng)就可以用range(0,100)來(lái)實(shí)現(xiàn),第100項(xiàng)也就是到99為止,讓我們來(lái)實(shí)現(xiàn)它吧。代碼是這個(gè)樣子的
a=1
b=1
print(a)
print(b)
for i in range(98):
c=a+b
a=b
b=c
print (c)
額,出現(xiàn)了一個(gè)這樣的問(wèn)題就是在前面傻傻的打了兩行輸出a,b,這樣range函數(shù)就自然到了98就可以停止了。想不到怎么把a(bǔ)和b加載到循環(huán)里。這樣其實(shí)打印第101項(xiàng)就沒(méi)那么難了。嘖嘖,理解錯(cuò)誤了。是100以?xún)?nèi)的,那在這里可以引用while,如果繼續(xù)用for的話(huà),采用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
其實(shí)想一想用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

#打印斐波那契數(shù)列第101項(xiàng)
a=1
b=1
for i in range(99):
c=a+b
a=b
b=c

print(c)

#求10萬(wàn)內(nèi)所有素?cái)?shù)
這個(gè)就涉及到之前素?cái)?shù)的優(yōu)化問(wèn)題了。要求輸出10萬(wàn)內(nèi)所有素?cái)?shù),首先要做到的就是算法優(yōu)化問(wèn)題,首先肯定能想到的就是偶數(shù)排除掉,2是素?cái)?shù)是不能忘記的。檢驗(yàn)的話(huà)若是一個(gè)一個(gè)實(shí)現(xiàn)有點(diǎn)太慢了,先用最基礎(chǔ)的實(shí)現(xiàn)
3 5 7 9 11 13 15 17 19 21 23 25
其實(shí)實(shí)現(xiàn)不難,但如果用質(zhì)數(shù)和它本身的話(huà)就顯得除以太過(guò)冗余,我有一個(gè)想法就是如果只判斷二倍以上的約數(shù),則在這個(gè)數(shù)本身就少了一半的算數(shù)量。但這自身就一定要套用兩層循環(huán)。大一點(diǎn)的數(shù)還好做計(jì)算,小的數(shù)例如三就不知該從何開(kāi)始計(jì)算起,若要用1,那就是從1開(kāi)始就一定能整除的呀。從二則無(wú)法2步步進(jìn)。我看看拿什么能夠解決,從3開(kāi)始則我想會(huì)出現(xiàn)bug
這樣算出來(lái)會(huì)出現(xiàn)多個(gè)數(shù)輸出的情況

#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)
這是一個(gè)很慢的算法,用之前學(xué)到的方法6的周?chē)欢ㄓ幸粋€(gè)質(zhì)數(shù)可以簡(jiǎn)便算法,但那是之后的事,在那之前我想有沒(méi)有再簡(jiǎn)單一點(diǎn)的算法,這里引入開(kāi)平方的會(huì)更簡(jiǎn)單一些。
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)
這里第二個(gè)循環(huán)加一是為了避開(kāi)數(shù)字過(guò)小的時(shí)候引起錯(cuò)誤。
這些是一點(diǎn)自己的想法

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI