Q)写一个程序来检查哪个位置的数字相同,并打印出它们相同的位置
以为例,如果n1=1234453, n2=2444853打印
第10位相同
第1000位相同
如何解决这个问题,使其工作?它显示的是第3位而不是第100位?
n1=int(input())
n2=int(input())
ns1=str(n1)
ns2=str(n2)
l1=len(ns1)
for x in ns1:
for y in ns2:
if x==y:
if int(ns1.index(x))==int(ns2.index(y)):
print("Same at %dth position"%(ns1.index(x)))
else:
print("No digits are same")
else:
print("No digits are same")
使用zip
,enumerate
和10
的幂:
ns1 = "1234453"
ns2 = "2444853"
found = False
for i, (x, y) in enumerate(zip(ns1[::-1], ns2[::-1])):
if x == y:
found = True
print(f"Same at {10**i}th position")
# no else here!! just because of a mismatch at the first digit
# does not mean there aren't any matches later
if not found:
print("No digits are same")
# Same at 1th position
# Same at 10th position
# Same at 1000th position
你的嵌套循环做了太多的工作,为第一个字符串中的每个字符循环遍历整个第二个字符串。zip
更有效,只是对两个(反向)字符串进行成对(并行)迭代。
一些文档:
zip
enumerate
- 切片符号:docs,这里有扩展线程