首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为一个值python获得打印两次的带有不同输出的print语句

为一个值python获得打印两次的带有不同输出的print语句
EN

Stack Overflow用户
提问于 2022-06-18 18:06:25
回答 3查看 76关注 0票数 -1

我有个密码我在试着跑。但是在运行代码之后,我得到了一个print语句和一个测试用例的两个打印值。

我得到的输出:

代码语言:javascript
复制
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> 

我应该得到的唯一输出是

代码语言:javascript
复制
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> 

如何删除这个额外的打印语句错误?下面是代码:

代码语言:javascript
复制
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'])
EN

回答 3

Stack Overflow用户

发布于 2022-06-18 18:17:15

它是一个while循环,因此它可以多次运行。因此,为了多次打印,您的代码必须多次进行tthe循环。

票数 0
EN

Stack Overflow用户

发布于 2022-06-20 06:32:43

这不是一个错误。对于您提供的输入,以及查找数字序列起始位置的二进制搜索逻辑,需要2个循环(因此需要2个print语句)。

在第一次遍历循环期间,我们有以下值:

lo: 0 , hi: 7 , mid: 3 , mid_number: 7

然后我们讨论二进制搜索逻辑:

代码语言:javascript
复制
        if mid > 0 and nums[mid]<nums[mid-1]:
            return mid
        
        elif nums[mid] > nums[hi]:
            lo = mid + 1  
        
        else:
            hi = mid - 1

if语句为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。

票数 0
EN

Stack Overflow用户

发布于 2022-06-20 06:48:15

使用If而不是,而就这样。用这个。

代码语言:javascript
复制
if lo<=hi:

而不是这个。

代码语言:javascript
复制
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循环不符合您的给定条件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72671581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档