簡體   English   中英

計算范圍內 6 和 8 的數量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM