【问题标题】:Hackerrank "Cut the Sticks" challenge correct in debug but not output [duplicate]Hackerrank“Cut the Sticks”挑战在调试中正确但不输出[重复]
【发布时间】:2020-03-11 03:09:35
【问题描述】:

我很难弄清楚我的代码哪里出错了。 Hackerrank 有自己的样板测试,我还不习惯。 Hackerrank 调试输出和我自己的 Ide 中的算法工作者,但在 Stdout 中返回“NoneNone”。我知道什么都不返回会创建 None 但即使我执行 "return '/n'.join(a_list) 它也不起作用。让我无法通过测试。我没有看到什么?https://www.hackerrank.com/challenges/cut-the-sticks/problem

这不是重复的问题。否决票非常令人沮丧且无益的 nvm。

#!/bin/python3

import math
import os
import random
import re
import sys


def cutTheSticks(arr):
    currentSize = len(arr)

    while currentSize > 0:
        least = min(arr)
        print(currentSize)
        for stick in range(len(arr)):
            arr[stick] -= least
            if arr[stick] <= 0:
                arr[stick] = 0

        for i in range(arr.count(0)):
            arr.remove(0)

        currentSize = len(arr)
    return

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    n = int(input())

    arr = list(map(int, input().rstrip().split()))

    result = str(cutTheSticks(arr))
    fptr.write(result)

    fptr.write('\n'.join(map(str, result)))
    fptr.write('\n')

    fptr.close()

【问题讨论】:

  • 提示:cutTheSticks 返回什么? result = str(cutTheSticks(arr)) 中捕获了什么?
  • CutTheSticks 无法返回任何内容,因为我必须打印出长度。我只添加了一个返回,因为它不会显示输出。
  • 那么result = str(cutTheSticks(arr))应该做什么?

标签: python python-3.x algorithm


【解决方案1】:

您必须从cutTheSticks 函数返回一个列表,其中包含每次操作之前存在的棒数。总的来说,样板文件将列表中的元素连接成一个字符串(您不需要将返回值显式转换为 str)。

def cutTheSticks(arr):
    currentSize = len(arr)
    result = []

    while currentSize > 0:
        least = min(arr)
        #print(currentSize)
        result.append(currentSize)
        for stick in range(len(arr)):
            arr[stick] -= least
            if arr[stick] <= 0:
                arr[stick] = 0

        for i in range(arr.count(0)):
            arr.remove(0)

        currentSize = len(arr)
    return result

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    n = int(input())

    arr = list(map(int, input().rstrip().split()))

    result = cutTheSticks(arr)

    fptr.write('\n'.join(map(str, result)))
    fptr.write('\n')

    fptr.close()

【讨论】:

  • 我应该发布实际的问题链接。 hackerrank.com/challenges/cut-the-sticks/problem 他们不希望返回列表而是打印值。我试图返回 '/n.join(a_list) 但它不起作用。每次迭代的长度必须在 stdout 的新行上输出。
  • 是的,必须打印输出。但是样板代码可以做到这一点。为此,他们只使用文件指针'fptr'。 'fptr.write' 将为您将输出打印到标准输出。您是否一开始运行了建议的代码?
猜你喜欢
  • 1970-01-01
  • 2017-06-23
  • 2020-06-07
  • 2017-03-22
  • 2022-07-24
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
相关资源
最近更新 更多