[英]Counting the number of 6's and 8's in a range
我想創建一個代碼來計算 6 和 8 在一個范圍內出現的次數,但我不想計算包含 6 和 8 的任何數字。到目前為止,我有這樣的事情:
def countnums(a) :
count = 0
for x in range(a):
if 6 and 8 in a:
count -= 1
elif 6 in a:
count += 1
elif 8 in a:
count += 1
return count
countnums(88)
但是我不確定我哪里出錯了(對不起,我對 Python 很陌生)。 任何幫助將不勝感激,以及任何對教程的推薦!
有幾個問題:
您正在使用x
要經過的范圍內,但所有的條件都在尋找a
in
運算符無法在整數中找到數字,因此if 6 in a
a 中的if 6 in a
將不起作用。 您需要將其作為字符串處理(並使用 x): if '6' in str(x)
將6 and 8 in a
類的條件組合6 and 8 in a
中並不像您期望的那樣工作。 您必須將其分解為與and
連接的兩個比較:例如, if '6' in str(x) and '8' in str(x)
由於您使用elif
為個人in
合並后一個檢查,你並不需要從計數(計數不會受到其他條件的影響)減去1。
只有在循環完成后才需要返回計數(您的縮進使它過早結束
這是一個修訂版:
def countnums(a) :
count = 0
for x in range(a):
has6 = '6' in str(x)
has8 = '8' in str(x)
count += has6 ^ has8 # Exclusive OR
return count
你在這里做錯了很多事情。
首先,您要做的是檢查 0 和 a 之間的每個數字 x 是否包含 6 或 8 作為數字。 因此,您應該在每個循環周期中測試的數字是 x 而不是 a。 此外,return 語句不應在循環內,否則您的函數僅在一個循環周期后返回。 這給了我們
def countnums(a) :
count = 0
for x in range(a):
if 6 and 8 in x:
count -= 1
elif 6 in x:
count += 1
elif 8 in x:
count += 1
return count
countnums(88)
其次,您使用了條件表達式(x 中的 6)。 “in”是一個運算符,可以采用不同類型的操作數。 例如 (a in [5,6,7]) 僅當 a 等於列表的元素時才返回真,並且 ("hello, world" 中的 "hello") 僅當左操作數是列表的子串時才返回真正確的那一個。 現在您使用 (8 in x) 表示“數字 8 以數字 x 的十進制形式出現”。 不幸的是,操作符 in 不是為整數操作數定義的,所以 (8 in x) 是不正確的。 您可以做的更正是用字符串來表達這一點,str(x) 為您提供 x 的十進制字符串表示形式,因此您可以這樣做(str(x) 中的“8”)。 這給了我們:
def countnums(a) :
count = 0
for x in range(a):
if '6' and '8' in str(x):
count -= 1
elif '6' in str(x):
count += 1
elif '8' in str(x):
count += 1
return count
countnums(88)
第三,你寫了 ('6' 和 '8' in str(x))。 不幸的是,python 理解為 ('6') 和 ('8' in str(x)),並且知道 '6' 被評估為真(非空字符串始終為真),python 從你的表達式中理解的只是('8' in str(x)) 表達你想要表達的內容的正確方法是寫 ('6' in str(x) and '8' in str(x)) 糾正這一點,我們得到:
def countnums(a) :
count = 0
for x in range(a):
if '6' in str(x) and '8' in str(x):
count -= 1
elif '6' in str(x):
count += 1
elif '8' in str(x):
count += 1
return count
countnums(88)
最后,當您使用 elif 語句時,僅當前一個語句被評估為 false 時才會對它們進行評估。 所以在你的情況下,例如 x 是 268,第一個 if 語句被評估為真,計數遞減,但由於我們執行了第一個 if 塊,后兩個甚至不會被評估,所以計數不會增加兩次。 要糾正這一點,您必須使用三個單獨的 if 語句:
def countnums(a) :
count = 0
for x in range(a):
if '6' in str(x) and '8' in str(x):
count -= 1
if '6' in str(x):
count += 1
if '8' in str(x):
count += 1
return count
countnums(88)
此時程序運行。 但是我們可以做一個額外的簡化:python 中的布爾值可以作為數字進行操作。 例如,False 等於 0,True+True 等於 2,True+False 等於 1。 所以我們能做的是:
def countnums(a) :
count = 0
for x in range(a):
if ('6' in x) + ('8' in x) == 1:
count += 1
return count
countnums(88)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.