我有个密码我在试着跑。但是在运行代码之后,我得到了一个print语句和一个测试用例的两个打印值。
我得到的输出:
PS D:\VS Code\Python> & C:/Users/zyx/AppData/Local/Programs/Python/Python310/python.exe "d:/VS Code/Python/dump/dump 3.py"
lo: 0 , hi: 7 , mid: 3 , mid_number: 7
lo: 4 , hi: 7 , mid: 5 , mid_number: 1
True
PS D:\VS Code\Python> 我应该得到的唯一输出是
PS D:\VS Code\Python> & C:/Users/zyx/AppData/Local/Programs/Python/Python310/python.exe "d:/VS Code/Python/dump/dump 3.py"
lo: 0 , hi: 7 , mid: 3 , mid_number: 7
True
PS D:\VS Code\Python> 如何删除这个额外的打印语句错误?下面是代码:
test1 = {
'input': {
'nums': [4, 5, 6, 7, 8, 1, 2, 3]
},
'output': 5
}
def count_rotations_binary(nums):
lo = 0
hi = len(nums)-1
while lo<=hi:
mid = (lo+hi)//2
mid_number = nums[mid]
print("lo:", lo, ", hi:", hi, ", mid:", mid, ", mid_number:", mid_number)
if mid > 0 and nums[mid]<nums[mid-1]:
return mid
elif nums[mid] > nums[hi]:
lo = mid + 1
else:
hi = mid - 1
return 0
print(count_rotations_binary(**test1['input']) == test1['output'])发布于 2022-06-18 18:17:15
它是一个while循环,因此它可以多次运行。因此,为了多次打印,您的代码必须多次进行tthe循环。
发布于 2022-06-20 06:32:43
这不是一个错误。对于您提供的输入,以及查找数字序列起始位置的二进制搜索逻辑,需要2个循环(因此需要2个print语句)。
在第一次遍历循环期间,我们有以下值:
lo: 0 , hi: 7 , mid: 3 , mid_number: 7
然后我们讨论二进制搜索逻辑:
if mid > 0 and nums[mid]<nums[mid-1]:
return mid
elif nums[mid] > nums[hi]:
lo = mid + 1
else:
hi = mid - 1if语句为False,7 < 6为False。
然后elif语句nums[mid] > nums[hi]计算为True,作为7 > 3。因此lo被设置为mid+1 (4),循环再次启动。
在第二个循环中
lo: 4 , hi: 7 , mid: 5 , mid_number: 1
if语句被计算为True:
mid > 0 and nums[mid]<nums[mid-1]
计算为5 > 0 and 1 < 8
因此,调用return mid并返回函数5。
发布于 2022-06-20 06:48:15
使用If而不是,而就这样。用这个。
if lo<=hi:而不是这个。
while lo<=hi:原因:无论您的数据在这里显示多长时间,它都可以一次检查条件并给出输出:
‘num’:4,5,6,7,8,1,2,3
事实:如果您不能更改您的程序并在这里添加一些额外的数据:
‘num’:4,5,6,7,8,1,2,3,5,6,8,4
您将得到一些额外的行,因为您的算法,直到while循环不符合您的给定条件。
https://stackoverflow.com/questions/72671581
复制相似问题