0

ユーザーから 10 個の数字を取得する必要があり、各数字がすべての数字に表示される回数を計算します。

次のコードを書きました。

# Reset variable
aUserNum=[]
aDigits=[]

# Ask the user for 10 numbers
for i in range(0,2,1):
    iNum = int(input("Please enter your number: "))
    aUserNum.append(iNum)

# Reset aDigits array
for i in range(0,10,1):
    aDigits.append(0)

# Calc the count of each digit
for i in range(0,2,1):
    iNum=aUserNum[i]
    print("a[i] ",aUserNum[i])
    while (iNum!=0):
        iLastNum=iNum%10
        temp=aDigits[iLastNum]+1
        aDigits.insert(iLastNum,temp)
        iNum=iNum//10

print(aDigits)

結果から、一時が機能していないことがわかります。この temp=aDigits[iLastNum]+1 と書くと、セル iLastNum の配列はセルの値 +1 を取得すると言うべきではないでしょうか?

ありがとう、ヤニフ

4

2 に答える 2

1

すべての入力を連結して単一の文字列を取得し、これをcollections.Counter()

import collections
ct = collections.Counter("1234567890123475431234")
ct['3'] == 4
ct.most_common() # gives a list of tuples, ordered by times of occurrence
于 2013-02-03T11:47:28.213 に答える
0

これには 2 つの方法があります。文字列または整数のいずれか。

aUserNum = []

# Make testing easier
debug = True

if debug:
    aUserNum = [55, 3303, 565, 55665, 565789]
else:
    for i in range(10):
        iNum = int(input("Please enter your number: "))
        aUserNum.append(iNum)

文字列では、すべての整数を大きな文字列に変換してから、「0」がいくつあるか、「1」がいくつあるかなどを数えます。

def string_count(nums):
    # Make a long string with all the numbers stuck together
    s = ''.join(map(str, nums))

    # Make all of the digits into strings
    n = ''.join(map(str, range(10)))

    aDigits = [0,0,0,0,0,0,0,0,0,0]

    for i, x in enumerate(n):
        aDigits[i] = s.count(x)

    return aDigits

整数では、整数除算の素敵なトリックを使用できます。このコードは Python 2.7 用に書かれており、"assume float" の変更により 3.x では動作しません。これを回避するには、x /= 10tox //= 10を変更し、print ステートメントを print 関数に変更します。

def num_count(nums):
    aDigits = [0,0,0,0,0,0,0,0,0,0]

    for x in nums:
        while x:
            # Add a count for the digit in the ones place
            aDigits[x % 10] += 1

            # Then chop off the ones place, until integer division results in 0
            # and the loop ends
            x /= 10

    return aDigits

これらは同じものを出力します。

print string_count(aUserNum)
print num_count(aUserNum)
# [1, 0, 0, 3, 0, 9, 4, 1, 1, 1]

きれいな出力を得るには、次のように記述します。

print list(enumerate(string_count(aUserNum)))
print list(enumerate(num_count(aUserNum)))
# [(0, 1), (1, 0), (2, 0), (3, 3), (4, 0), (5, 9), (6, 4), (7, 1), (8, 1), (9, 1)]
于 2013-02-03T11:44:18.243 に答える