-2

スタックオーバーフローの皆さん、こんにちは!私はpythonを学んでおり、数字が自伝的かどうかをチェックするプログラムをコーディングする必要があります。例: 21200 は、2 つの 0、1、1、2、2、0、3、および 0、4 があるため、自伝的です。これは私がこれまでに持っているものです:

# Autobiographical numbers
a = input("Number: ")
abn = 
if a == abn:
  print(a, "is autobiographical")
else:
  print(a, "is not autobiographical")

ご覧のとおり、正確な方法がわからないため、abn変数を開いたままにしています。a の長さを len(a) で決定し、次のようなものを使用する必要があると思います

[x[::1] for x in b]

しかし、私はPythonにかなり慣れていないので、よくわかりません。ありがとう、python の no0b。

4

4 に答える 4

1

次のコードを使用してテストします。より良い解決策があるはずです。

from collections import Counter
def test(x):
    if len(x) > 10:
           return False
    c = Counter(x)
    for i, v in enumerate(x):
            if int(v) != c.get(str(i), 0):
                    return False
    return True

a = input('number: '): #2.x use raw_input
if test(a):
    print(a, 'is')
else:
    print(a, 'is not')

デモ:

>>> auto
['1210', '2020', '21200', '3211000', '42101000']
>>> map(test, auto)
[True, True, True, True, True]

>>> auto = ['12321', '13213', '134', '1231', '123124543']
>>> map(test, auto)
[False, False, False, False, False]

wiki からのはるかに優れたソリューション:

>>> def isSelfDescribing(n):
        s = str(n)
        return all(s.count(str(i)) == int(ch) for i, ch in enumerate(s))
于 2013-08-06T08:02:08.637 に答える
0
>>> def is_autobiographical(n):
    s = str(n)
    count_digits = ''.join([str(s.count(str(i))) for i in range(len(s))])
    return s == count_digits

>>> is_autobiographical(21200)
True
>>> is_autobiographical(22)
False

あなたの場合abn = ''.join([str(str(a).count(str(i))) for i in range(len(str(a)))])、ニーズに合わせて使用​​できます。

于 2013-08-06T08:15:01.340 に答える
0
import math

b = int(math.log(a,10))

*b is length of a. i.e., number of digits in a*

*in fact there is another tick:*

b = len(str(a))

*of course you need to check if a is a valid natural number*
于 2013-08-06T08:05:55.547 に答える