我必须编写一个函数(' 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())]))
我做错了什么?代码似乎没有出于某种原因运行。请记住,我仍然是编程的新手,对集群抱歉。
答案 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