檢查字串是否具有相同數量的 'x' 和 'o'。該方法必須回傳一個布林值并且不區分大小寫。字串可以包含任何字符。
示例輸入/輸出:
XO("xooxx") => false
XO("ooxXm") => true
XO("zpzpzpp") => true // when no 'x' and 'o' is present should return true
XO("zzoo") => false
所以我嘗試制作新串列,然后為每個“x”和每個“o”附加,但它不太有效。到目前為止,這是我的代碼:
def xo(s):
ex = []
oh = []
for letter in s.split():
if letter.islower() == 'x':
ex = ex.append(letter)
elif letter.islower() == 'o':
oh = oh.append(letter)
if len(ex) == len(oh):
return True
else:
return False
它只在第一個上回傳 True,但在最后三分之一上不回傳。在我看來,代碼沒有正確附加。
uj5u.com熱心網友回復:
您的代碼中有(至少)三個問題:
s.split()拆分s每個空格并回傳一個串列(因此假設您沒有空格,這將為您提供一個包含單個專案的串列)。相反,只需使用for letter in s:which 迭代每個字母。letter.islower()檢查字母是否小寫、回傳True或False. 您想要的是letter.lower()回傳字符的小寫版本。- 另外(感謝 Mark) append 不會回傳值,因此當您運行時,您正在為變數
oh = oh.append(letter)分配一個值。您應該只使用(不分配)。Noneohoh.append(letter)
uj5u.com熱心網友回復:
只需使用collections.Counter.
>>> from collections import Counter
>>> c = Counter('xooxXo'.lower())
>>> c['x'] == c['o']
True
或者
>>> c = Counter('xooxx'.lower())
>>> c['x'] == c['o']
False
如果您愿意,可以將其包裝在您自己的函式中。
uj5u.com熱心網友回復:
大衛的回答涵蓋了對您的代碼的一些潛在修復,但如果您正在尋找更簡潔的東西,我建議.lower()您預先使用小寫字串,然后使用.count()來計算 X 和 Os 的數量,而不是使用for回圈:
def xo(s):
return s.lower().count('x') == s.lower().count('o')
這輸出:
False
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477417.html
標籤:Python python-3.x 附加
下一篇:在Numpy中選擇區間索引
