2017-10-05 69 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