2016-06-16 2 views
1

困ったことに私は挑戦してきました。私は、数字が同じ桁を複数回前に含んでいるかどうかをチェックする必要があります。 11,424,66等が挙げられる。最初はこれは簡単だと思われますが、私はこれを確認するロジックを思いつくのに問題があります。何か案は?数字に数字が複数回あるかどうかをチェック

これはこれまでのところ私が得たものです。関数はリストを取ります。 (更新)

arr = [[1,20],[1,10]] 

for i in arr: 
    l = list(range(i[0],i[1])) 
    for num in l: 
     if num < 11: continue 
     for c in str(num): 
      if str(num).count(c) > 1: 
       # dont know why code is popping off 12 and 13 
       print(l.pop(num)) 

答えて

0

解決済み!私はポップが値ではなくポジションに基づいて実行されることを知らなかった!削除はこちらに適しています。

arr = [[1,40],[1,10]] 

for i in arr: 
    l = list(range(i[0],i[1])) 
    for num in l: 
     if num < 11: continue 
     for char in str(num): 
      if str(num).count(char) < 2: continue 
      l.remove(num) 
      break 
    print(l) 
2

私が提案

+0

'任意の(値の1の値はc.values()) ' –

+0

@ 2-BitAlchemist答えを更新しました。ありがとう:) –

6

た場合のために

from collections import Counter 
a = 98 
c = Counter(str(a)) 
if any(value > 1 for value in c.values()): 
    print "The number has repeating digits" 

二BitAlchemist @おかげで数値を文字列に変換し、その上にカウンターをやっていると考えることができ最善の方法あなたの究極の目標は、ダブルがあるかどうかを単に検出することです。この機能は役に立ちます:

def has_doubles(n): 
    return len(set(str(n))) < len(str(n)) 
0

あなたはおそらく研究や学生の練習をあなた自身のアルゴリズムを作成したいと思うように見える10の1/10 = 0.1 10/10 = 1 13/10 = 1リマインダー3 13013/10 = 1301レム3それゆえ、我々はここで次の番号のリマインダーに対してそれらをチェックし、配列にリマインダを保存する機能を作成することができますが、再帰を使ってPythonにおけるアルゴリズムである、あなたは同じことを達成することができ、ループを経由して

def countNumber(foundDigits,number): 
    next_number = int(number/10); 
    reminder = number % 10; 
    if(next_number < 1): 
     for num in foundDigits: 
      if(num == number or num == reminder): 
       return True 
     return False; 
    foundDigits.append(reminder); 
    return countNumber(foundDigits,next_number) 

例通訳の場合は

digitsFound = list() 
countNumber(digitsFound, 435229) 
+0

私は残りの部分がこの問題を解決するのに役立つ方法を理解していません。私は数字を文字列に変換し、重複した文字をチェックすることがこの問題の最良の解決策になると考えています。 – MintDrop

関連する問題