Python - 堆叠杯?

时间:2017-05-23 03:22:14

标签: python python-3.x

我必须编写一个函数(' def stackHeights'),你可以在这里设置一个参数多个杯子,并返回一个堆栈的最大高度,该堆栈可以使用该数量的杯子构建。例如,如果你有7个杯子,你可以建立一个高度为3的堆叠,但你没有足够的堆叠高度4,因为你只有一个杯子用于底行,你需要4个。

"提示:使用一段时间从上到下构建。

输出:

>>> stackHeight (7) 
3
>>> stackHeight (3)
2 
>>> stackHeight (12) 
4 

这就是我现在所拥有的:

def stackHeight(nCups):
    nCups = int(input())
    cups = {}
    for i in range(nCups):
        line = input().split()
        if line[0].isnumeric():
            cups[int(line[0])/2] = line[1]
        else:
            cups[int(line[1])] = line[0]
            print("\n".join([cups[k] for k in sorted(cups.keys())]))

我做错了什么?代码似乎没有出于某种原因运行。请记住,我仍然是编程的新手,对集群抱歉。

2 个答案:

答案 0 :(得分:0)

我注意到你的代码存在很多问题。首先,你有input()次太多次,input()会在等待用户输入时冻结程序。你可能想要input("string that tells the user what to put here")。此外,您有一个变量nCups,但nCups被设置为input(),因此它完全使变量的点无用。另外,如果你想要它在你的例子中的样子,你不想在循环中print()。另一件事是当你执行cups={}时,你正在使它成为一个字典,但你后来使用整数作为索引,所以你想要一个列表[]。

答案 1 :(得分:0)

你指的是一个叫做Triangular Numbers的数字序列,它有一个计算第n个数的公式:

T(n) = n(n+1)/2

使用二次公式可将其反转为:

T'(n) = (sqrt(8n+1)-1)/2

因此您的代码将是:

def stackHeight(nCups):
    return ((8*nCups+1)**0.5-1) // 2

并测试:

>>> def stackHeight(nCups):
...     return ((8*nCups+1)**0.5-1)//2
...
>>> stackHeight(7)
3.0
>>> stackHeight(3)
2.0
>>> stackHeight(12)
4.0