2017-10-05 90 views
0
a = input('Enter a number: ') 
b = input('Enter a digit between 0 and 9: ') 
p = int(0) 
t = int(0) 
while p <=len(a): 
    if a[p] == b: 
    t += 1 
    p += 1 
else: 
    p +=1 

print ('The number', b, 'appears', t, 'times') 

我需要計算一位數字出現在一串數字中的次數。這段代碼告訴我字符串索引超出範圍,我知道這意味着它不在while循環中,但我不知道如何使它在範圍內。計算一串數字中的數字

+0

所以,剛請確定:我假設這是一個班級任務,所以使用'count'方法是禁止的?否則,'t = a.count(b)'將解決整個交易。 – ShadowRanger

回答

0

首先,您的縮進有點不合適。希望這只是一個複製/粘貼問題。

「超出範圍」問題來自您的while條件。嘗試while p < len(a)而不是while p <=len(a)

0

您的縮進是有點偏離。如果我修復while循環內縮進,改變<=<(長度n陣列去從0n - 1),你的程序變成這樣:

a = input('Enter a number: ') 
b = input('Enter a digit between 0 and 9: ') 
p = int(0) 
t = int(0) 
while p < len(a): 
    if a[p] == b: 
    t += 1 
    p += 1 
else: 
    p +=1 

print ('The number', b, 'appears', t, 'times') 

,並完成你想要的行爲。

關於代碼的說明:您正在編寫Python,而不是程序集。您可以使用for循環,更簡潔地計算一個字符串出現:

a = input('Enter a number: ') 
b = input('Enter a digit between 0 and 9: ') 
t = 0 
for d in a: 
    if d == b: 
     t += 1 

print ('The number', b, 'appears', t, 'times') 
0

我想這種方式解決這個問題:

a = input('Enter a number: ') 
b = input('Enter a digit between 0 and 9: ') 

count = sum([digit == b for digit in a]) 
print('The number', b, 'appears', count, 'times') 

拆包發生的事情:

假設a = '155628'b = '5'

  • [digit == b for digit in a]是一個列表理解,它將遍歷數字a中的每個數字(這是一個字符串)。它會返回一個包含TrueFalse元素的列表,如果該數字在b提供的數字相匹配:列表中的非falsey值[False, True, True, False, False, False]
  • sum()次數進行計數,在這種情況下,2