python - 在两个数字之间找到两个相同的数字Python
问题描述
代码没有通过最后一次检查 (5000,50000)
程序必须在数字范围内找到至少 2 个相同的数字。例如:
- max_multiple(20,33) ==> 1 (数字 22)
- max_multiple(0,101) ==> 10
import traceback
def two_identical(start, finish):
count = 0
check = 0
while (start+1)<finish:
start = start + 1
govno = start
while govno>0:
b = govno % 10
c = govno // 10
while c>0:
check = c % 10
if check == b:
count = count + 1
govno = 0
break
c=c//10
govno=govno//10
return (count)
# tests
try:
assert two_identical(20, 33) == 1
assert two_identical(0, 10) == 0
assert two_identical(0, 101) == 10
assert two_identical(0, 1000) == 261
assert two_identical(5000, 50000) == 35198
except AssertionError:
print("TEST ERROR")
traceback.print_exc()
else:
print("TEST PASSED")
解决方案
您可以通过在代表每个数字的字符串列表中转换 int 并添加重复元素的数量来做到这一点:
def two_identical(start, finish):
counter=0
for i in range(start+1,finish,1):
#Convert the digit in list of str. e.g 100 => ['1','0','0']
i=[digit for digit in str(i)]
#add the len of set of duplicate =>
#e.g.: ['4', '9', '9', '7', '7'] => {'9','7'} => counter +=2
#e.g.: ['4', '9', '9', '9', '7'] => {'9'} => counter +=1
#e.g.:['4', '9', '9', '9', '4'] => {'9','4'} => counter +=2
counter+=len(set([x for x in i if i.count(x) >1]))
print(f"counter ({start},{finish}):{counter}")
return counter
try:
assert two_identical(20, 33) == 1
assert two_identical(0, 10) == 0
assert two_identical(0, 101) == 10
assert two_identical(0, 1000) == 261
assert two_identical(5000, 50000) == 35198
except AssertionError:
print("TEST ERROR")
#traceback.print_exc()
else:
print("TEST PASSED")
结果:
counter (20,33):1
counter (0,10):0
counter (0,101):10
counter (0,1000):261
counter (5000,50000):35198
TEST PASSED
推荐阅读
- python - 将 Excel 文件转换为 CSV 并进行一些更改
- python - 使用 xpath 提取值会产生一些不需要的字符串
- reactjs - 反应路由器 dom 重定向问题。更改 url,不渲染组件
- python - 从 pandas 数据帧构造一个二维数组
- python - pyinstaller 因权限错误而失败 [Err-13]
- javascript - Bootstrap Datepicker 在使用 javascript 进行动态元素追加时不起作用
- java - 通过 Python 执行外部软件
- python - 以未指定格式处理 url 流的音频
- ruby - 如何将密钥发送到 Selenium 中的文件上传对话框?
- node.js - “字符串”不能用于索引类型