2

我是 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)

请帮忙!谢谢!(:

4

2 回答 2

0

您只需要多次偏移您的 longInt 即可提取所有 shortInt 长度整数(如位移,但使用 10 的幂而不是 2 的幂)。

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

于 2013-09-30T15:19:12.353 回答
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
于 2013-09-30T15:27:04.203 回答