Re: [閒聊] python小白問個問題

作者: erimow (Erimo)   2024-08-08 16:29:38
Write a function called "isPrime" that takes an integer as input, and returns
a boolean value that indicates if the input number is prime.
isPrime(1)
# returns false
isPrime(5)
# returns true
isPrime(91)
# returns false
isPrime(1000000)
# returns false
我的想法
質數 = 只能被1和自己整除
1不是是質數,所以=1要False
2以後的數字,我只要寫如果在從2開始到自己前一位的數字,除下去有任何一個餘數是0
那就False
剩下就是True
def isPrime(int):
if int == 1:
print(False)
return False
for i in range(2, int):
if (int % i) == 0:
print(False)
return False
print(True)
return True
這個應該沒問題
# Write a function called "palindrome" that checks if the input string is a
palindrome.
這題我一開始想法是
回文就從第一個往後看和從最後一個往前看是一樣的
所以我本來是想說用index第一個跟最後一個一樣,第二個跟倒數第二個一樣
n = len(str)
只要i 在range n裡面,j則是從index-1開始往回數
兩個 ==
那就是對的
反之就str[0] != str[-1]那就是false
但這樣不知道為啥寫不出來
前面這邊應該沒問題
def palindrome(str):
n = len(str)
if str[0] != str[-1]:
print(False)
return False
但有問題的是後面這裡
else:
for i in range(0, n):
for j in range(-1, n, -1):
if str[i] == str[j]:
print(True)
return True
如果不是上面的情況應該是要回應True的
但卻沒辦法
我的想法應該是錯在for j這句
-1開始應該沒錯,最後-1倒數應該也沒錯
但中間要放啥啊
感覺不是n n代表我數第一個就停了
作者: emptie ([ ])   2024-08-08 16:31:00
其實你只要檢查到 sqrt(n)就可以停了
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:32:00
你是不是還是不懂巢狀迴圈的執行順序到底是怎樣==
作者: nh60211as   2024-08-08 16:33:00
不要寫python
作者: erimow (Erimo)   2024-08-08 16:33:00
可能是
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:33:00
巢狀不是裡面一步外面一步欸 是裡面一圈外面一步==
作者: Rushia (みけねこ的鼻屎)   2024-08-08 16:34:00
sieve of Eratosthenes了解下
作者: erimow (Erimo)   2024-08-08 16:34:00
現在在講第一題還第二題
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:35:00
突然叫菜逼八跳到篩法是想殺了他吧那個是質數的
作者: erimow (Erimo)   2024-08-08 16:35:00
所以我第一題也有問題喔
作者: Che31128 (justjoke)   2024-08-08 16:36:00
第一題一般會建質數表來跑
作者: erimow (Erimo)   2024-08-08 16:36:00
效率問題不管 ==
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:36:00
就算只是用除的也有很多優化 篩法直接是別的做法了我也覺得你還不到有辦法在意效率的程度
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:37:00
你現在大概是把棍子插到腳踏車裡面的階段
作者: erimow (Erimo)   2024-08-08 16:37:00
阿康階段
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:38:00
我不知道你為什麼要把0跟-1獨立出來判斷
作者: erimow (Erimo)   2024-08-08 16:39:00
我要是知道我就不在這裡了
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:39:00
所以你知道你的迴圈實際上會怎麼跑嗎這就根本沒必要兩層阿你直接把i跟j print出來 你就會發現你到底寫了什麼
作者: Rushia (みけねこ的鼻屎)   2024-08-08 16:41:00
其實新手直接看答案程式碼在思考可能比較快
作者: sustainer123 (caster)   2024-08-08 16:41:00
善用print debug
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:41:00
我在說你的for loop 先不要管上半那個愚蠢的if了
作者: erimow (Erimo)   2024-08-08 16:41:00
幹 我寫出來了
作者: DoraGian (飲冰)   2024-08-08 16:42:00
這不是大一程式設計第一個作業嗎
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:42:00
他沒搞清楚它原本的思路到底有什麼問題你確定你真的對了嗎
作者: erimow (Erimo)   2024-08-08 16:43:00
至少目前測試的四個都對==
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:44:00
1211就錯了吧
作者: erimow (Erimo)   2024-08-08 16:44:00
真的耶aaba會錯
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:45:00
你只判斷到頭跟尾而已 第一個==直接就回傳true你實際上就只要需要一層迴圈而已
作者: erimow (Erimo)   2024-08-08 16:47:00
因為他判斷完第一個就給我true了
作者: sustainer123 (caster)   2024-08-08 16:47:00
話說我想到的質數判斷法的暴力解只要一個迴圈
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:48:00
你就這樣寫他當然只判斷第一個
作者: sustainer123 (caster)   2024-08-08 16:48:00
為啥要寫兩個?還有第二個迴圈的range是啥
作者: sustainer123 (caster)   2024-08-08 16:50:00
靠 兩題 沒事狼師 你查一下two pointer
作者: MurasakiSion (紫咲シオン)   2024-08-08 16:52:00
然後因為你要的是完全相等 所以要像你第一題那樣寫迴圈裡用!= 然後return False 外面才True
作者: eight0 (欸XD)   2024-08-08 16:55:00

Links booklink

Contact Us: admin [ a t ] ucptt.com