2013-09-25 4 views
-2

Я пытаюсь проверить, имеют ли короткие int цифры, которые содержатся в long int. Вместо этого вышло:Python check matching digit

long int: 198381998 
short int: 19 
Found a match at 0 
Found a match at 1 
Found a match at 2 
Found a match at 3 
Found a match at 4 
Found a match at 5 
Found a match at 6 
Found a match at 7 

Это, предполагают, чтобы выглядеть следующим образом: (Correct один)

long int: 198381998 
short int: 19 
Found a match at 0 
Found a match at 5 

Код:

longInt = (input ("long int: ")) 
floatLong = float (longInt) 
shortInt = (input ("short int: ")) 
floatShort = float (shortInt) 

max_digit = int (math.log10(floatLong)) #Count the no. of long int 

i = int(math.log10(floatShort)) # Count the no. shortInt that is being input 


for string in range (max_digit): 

    if (shortInt in longInt): # Check whether there is any digit in shortInt 
           # that contains anything inside longInt 
     print ("Found a match at ", string) 

без использования каких-либо встроенных функций из питона, нет list или string.etc.

+0

Кстати, почему вы вручную конвертируете свои ints в поплавки? 'math.log10' сделает это за вас. Кроме того, ваш 'max_digit' отключен на единицу: число базовых цифр' '' '' '' '' 1 + int (math.log (x, r)) '. – kojiro

+0

Если я не вручную преобразовать плавать, это даст эту ошибку: Traceback (самый последний вызов последнего): Файл "", строка 1, в max_digit = INT (math.log10 (LONGINT)) TypeError : требуется float ------ , потому что ввод является строковым типом – Chloe

+0

Ах, это потому, что вход представляет собой строку. Вы должны преобразовать его, но разве это не будет int? – kojiro

ответ

0

Внутри вашего цикла для цифровых позиций сделать функцию «целое нарезки» с помощью целого % (остаток от деления ака по модулю), // (целочисленное деление) и ** (подъем к власти). Вот идея:

>>> l = 1932319 
>>> l // (10**3) % (10**2) 
32 

Тогда вы можете сравнить его с малыми целым (с использованием обычных ==). Остальное - это домашнее задание, я думаю.

NB. Операция «in» является строковой операцией, поэтому вы не можете ее использовать.

+0

У вас означает разделение более короткого int на, например, 3 и 2, если оно равно 32? Тогда сравните его? Что делает повышение власти? Извините, я новичок в python – Chloe

+0

Относитесь к 3 и 2 в примере как к числу нулей, добавленных после 1, потому что повышение 10 до 3 даст вам 1000. Также 10 ** 2 дадут вам 100. Как для привлечения к власти, взгляните на возведение в степень: http://en.wikipedia.org/wiki/Exponentiation - это математическая операция, не специфичная для Python. –

+0

Я знаю, что «**» - это возведение в степень, просто не думал об этом. Я пытаюсь использовать это: >>> а = 1932919 >>> A // (10 ** 4)% (10 ** 2) Так что можно использовать, чтобы проверить эти цифры от «сдвига «если укорнит их в цикл? O.O – Chloe

0

shortInt in longInt выход всегда True ('19' in 198381998' всегда True).

Использование ломтика:

>>> '198381998'[4:6] 
'81' 
>>> '198381998'[5:7] 
'19' 

long_int = input("long int: ") 
short_int = input("short int: ") 

short_len = len(short_int) # You don't need `math.log10` 

for i in range(len(long_int)): 
    if long_int[i:i+short_len] == short_int: 
     print("Found a match at", i) 
+0

Я думаю, что OP хочет использовать целые операции, а не строки. Хотя это противоречит его утверждению 'if' – justhalf

+0

@justhalf, я думаю, что OP использует Python 3.x. В противном случае «shortInt in longInt» вызывает исключение. – falsetru

+0

Я использую Python 3.x. кроме использования «in», чтобы сравнить их, что я могу использовать? – Chloe