[問題] 新手for+判斷式問題

看板Python作者 (鞭策自己社社長)時間5年前 (2020/02/25 11:52), 5年前編輯推噓9(905)
留言14則, 5人參與, 5年前最新討論串1/3 (看更多)
這是一個在 codewars 裡面的小練習: 目標是做一個函式判斷一個字串裡面是否有包含所有英文字母。 我的作法是把所有的英文轉成 ascii 碼,建成一個 list 然後將 list 中非英文的 ascii 碼以外的刪除。 但是實測時發現有部分數值在 97-122 以外的值並不會被刪除。 比方說如果投入的 s = 'abcdef!!!!' ^^→這兩碼驚嘆號會被刪除,後面兩碼不會。 如果是在字母的中間則是連續第二個字元不會被刪除。 請問這個判斷式的問題在哪裡? 感謝大家。 def is_pangram(s): s = s.lower() s_list = list(s) ascii_i = [] for i in s_list: ascii_i.append(ord(i)) for j in ascii_i: if j<97 or j>122: ascii_i.remove(j) ..... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.249.220.81 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1582602746.A.5C9.html

02/25 11:58, 5年前 , 1F
不建議在for...in...裡面刪除元素,索引值會跑掉
02/25 11:58, 1F
※ 編輯: yvmi (60.249.220.81 臺灣), 02/25/2020 12:04:23

02/25 12:05, 5年前 , 2F
有更簡潔的寫法 string有is_alpha可以判斷英文字母 所
02/25 12:05, 2F

02/25 12:05, 5年前 , 3F
以可以先過濾出字母後再看放入set的大小是不是26
02/25 12:05, 3F

02/25 13:45, 5年前 , 4F
模仿原a-z判斷的方法改寫 https://bit.ly/38S6M37
02/25 13:45, 4F

02/25 19:53, 5年前 , 5F
remove元素後,後一元素會往前頂替
02/25 19:53, 5F

02/25 19:56, 5年前 , 6F
然後下個for會送出再下一元素,所以被刪元素的下一元素
02/25 19:56, 6F

02/25 19:56, 5年前 , 7F
等於躲掉了
02/25 19:56, 7F

02/25 19:58, 5年前 , 8F
對。原本在 for...in...list 刪除元素的討論可參考
02/25 19:58, 8F

02/25 19:58, 5年前 , 9F
02/25 19:58, 9F

02/25 20:09, 5年前 , 10F
from collections import Counter
02/25 20:09, 10F

02/25 20:10, 5年前 , 11F
len([k for k in Counter(x).keys() if k.isalpha()])
02/25 20:10, 11F

02/25 20:35, 5年前 , 12F
sorry,有點多此一舉,直接set()就好
02/25 20:35, 12F

02/26 20:36, 5年前 , 13F
用ord( )吧 比較直覺
02/26 20:36, 13F

02/27 17:21, 5年前 , 14F
照你這樣寫,其實第一個迴圈加判斷式就解了
02/27 17:21, 14F
文章代碼(AID): #1UL9dwN9 (Python)
文章代碼(AID): #1UL9dwN9 (Python)