【问题标题】:counting number of steps to reduce integer to 0 [closed]计算将整数减少到 0 的步数 [关闭]
【发布时间】:2021-03-29 20:30:37
【问题描述】:

所以我刚开始在 python 中学习 def function()。我正在实现一个代码来计算将整数减少为零的步数。

我已经定义了一个函数,它列出了用户输入的整数,以及另一个计算步数的函数。

问题出在第二个函数中:currentlynumberOfSteps 只接受第一个输入,但它需要接受第一个函数UserEntryList 列出的所有用户输入

def UserEntryList ():
    integerEntry = input("Please enter: ")
    integerEntry = integerEntry.split()
    listOfInt = []
    for i in integerEntry:
        try:
            listOfInt.append(int(i))
        except ValueError:
            continue
    return(listOfInt)



def numberOfSteps():
    counter = 0
    listofnumbers = UserEntryList()
    for i in listofnumbers:
        while i > 0:
            if i % 2 == 0:
                i /= 2
            else:
                i -= 1
            counter += 1

        return counter

想要的输出:

Please enter a set of space-separated positive integers: 10 15 59
[(10, 5), (15, 7), (59, 10)]

【问题讨论】:

  • 调用函数 - 将numberOfSteps() 放在文件底部,不要缩进。
  • 参数/参数,你没有/使用/需要任何?
  • "Can Someone Help Me?" is not a valid SO question。这表明对 Stack Overflow 而言过于广泛的需求集合。您需要重复有关函数的教育材料,以充分了解这种基本编程技术。
  • @Macattack 这些我不明白怎么用的参数/参数
  • A minimal reproducible example 包括剪切 & 粘贴 & 可运行代码,包括最小的代表性示例输入;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)找到执行中变量状态不是您期望的第一个点,说出您的期望以及为什么期望它,通过参考权威文档证明是合理的。 (调试基础。)PS 通过编辑而不是 cmets 进行澄清。

标签: python python-3.x function


【解决方案1】:

首先,有几件事:

  • 在 Python 中始终使用 snake_case,而不是 camelCase 或 PascalCase。更多关于 Python 中的命名约定here
  • Python 中的return 语句不应用方括号括起来,除非您要返回一个元组。有关此here 的更多信息。
  • 在函数numberOfSteps() 中,您在for 循环中输入了return 语句。这将不起作用,因为程序将在处理循环中的第一项后终止。因此,将每次迭代的结果附加到列表/字典(字典示例如下所示。)并在 for 循环完成后将其返回。
def numberOfSteps():
    counter = 0
    listofnumbers = UserEntryList()
    counter_dict = {}
    for i in listofnumbers:
        temp = i
        while i > 0:
            if i % 2 == 0:
                i /= 2
            else:
                i -= 1
            counter += 1
        counter_dict[temp] = counter
    return counter_dict

要回答您的问题,您可以在代码末尾附加以下内容:

if __name__ == "__main__":
    counter = numberOfSteps()
    print("Counter = " + str(counter))

【讨论】:

    【解决方案2】:

    这是定义主函数并从主函数调用子函数的正确方法。您无需将任何参数传递给任何函数,因为您直接从 numberOfSteps 调用 UserEntryList,它从 main 函数中执行。

    def UserEntryList ():
    integerEntry = input("Please enter: ")
    integerEntry = integerEntry.split()
    listOfInt = []
    for i in integerEntry:
        try:
            listOfInt.append(int(i))
        except ValueError:
            continue
    return(listOfInt)
    
    
    
    def numberOfSteps():
        counter = 0
        listofnumbers = UserEntryList()
        for i in listofnumbers:
            while i > 0:
                if i % 2 == 0:
                    i /= 2
                else:
                    i -= 1
                counter += 1
    
            return counter
    
    def main():
        counter = numberOfSteps()
        print("Counter = " + str(counter))
    
    if __name__ == "__main__":
        main()
    

    【讨论】:

    • 有没有办法输入多个数字,例如```请输入:10 15 59```并计算步数?每个?
    • 是的,您可以向用户询问用逗号分隔的数字字符串,然后用逗号分割字符串以创建数字字符串列表。然后就可以遍历列表中的每个数字,执行上面的逻辑
    猜你喜欢
    • 2020-03-26
    • 2020-07-15
    • 2012-09-03
    • 2017-06-08
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2017-01-28
    相关资源
    最近更新 更多