如何从两个不同的整数中提取短数字序列并进行比较?

时间:2013-09-30 14:49:34

标签: python integer compare python-3.3 digits

我是Python新手,我的任务之一遇到了麻烦。

所以问题是: 我必须从用户那里获得两个正整数(一个更长,一个更短)。然后我必须遍历较长的整数(从左到右)并检查较长的整数内是否出现较短的整数。我必须报告比赛的位置和比赛的数量。
*我不允许使用字符串和列表来执行此分配):

结果的例子应该是这样的:

例如1.
输入一个正整数较长的整数:123456789
输入一个正整数较短的整数:123
在位置0找到了一场比赛 结束:找到1场比赛

例如2.
输入一个正整数较长的整数:123456789
输入一个正整数较短的整数:789
在位置6找到了一场比赛 结束:找到1场比赛

例如3.
输入一个正整数较长的整数:12312312312231222
输入一个正整数较短的整数:22
在位置10找到了一场比赛 在位置14找到了一场比赛 在位置15发现了一场比赛 结束:找到3场比赛

例如4.
输入一个正整数较长的整数:12312312312231222
输入一个正整数较短的整数:55
结束:找不到任何匹配

所以到目前为止我做了什么:

# Ask user for positve longer integer number
longInt = int(input("Input a positive longer integer: "))

# Ask user for positive shorter integer number 
shortInt = int(input("Input a positive shorter integer: "))

# Count number of digits in both longer and shorter integer numbers
import math
longLength = int(math.log10(longInt))+1
shortLength = int (math.log10(shortInt))+1

for i in range(0,longLength):
    for x in range(0,shortLength):
        while (longLength > 0):
            longDigit = longInt % 10 **(longLength) // 10**(longLength-1)
            longLength-=1
            print (longDigit)
        while (shortLength > 0):
            shortDigit = shortInt % 10**(shortLength) // 10**(shortLength-1)
            shortLength-=1
            print (shortDigit)

请帮忙!谢谢! (:

2 个答案:

答案 0 :(得分:0)

你只需要多次偏移你的longInt就可以提取所有的shortInt-length整数(比如位移,但功率为几十'而不是二十')。

import math

# Ask user for positve longer integer number
longInt = 123456789 

# Ask user for positive shorter integer number 
shortInt = 1234

# Count number of digits in both longer and shorter integer numbers

longLength  = int( math.log10(longInt) )+1
shortLength = int( math.log10(shortInt))+1

for offset in range(0, longLength):
  subInt = (longInt// 10**(offset)) % 10 **(shortLength) 
  print(subInt)

结果:

  
    

6789         5678         4567         3456         2345         1234         123         12         1

  

答案 1 :(得分:0)

你可以沿着这些方向做点什么:

def i2l(i):
    rtr=[]
    while i:
        rtr.insert(0, i%10)
        i//=10
    return rtr

longer=int(input("Input a positive longer integer: "))    
shorter=int(input("Input a positive shorter integer: "))

ll=i2l(longer)   
ls=i2l(shorter)

answer=[]
for idx in [i for i,e in enumerate(ll) if e==ls[0]]:    
    try:
        all_good=all(ll[i+idx]==e for i,e in enumerate(ls))    
    except IndexError:
        all_good=False 
    if all_good:
        answer.append(idx)

if answer:
    s='index' if len(answer)==1 else 'indices'
    print '{} found in {} at {} {}'.format(shorter,longer,s,answer)
else:
    print '{} not found in {}'.format(shorter,longer) 

现在运行它:

Input a positive longer integer: 12312312312231222
Input a positive shorter integer: 22
22 found in 12312312312231222 at indices [10, 14, 15]

Input a positive longer integer: 12312312312231222
Input a positive shorter integer: 4
4 not found in 12312312312231222