我抓了网但没有回答(特定于解决方案)。我遇到了以下问题:
coin = [2.0 , 1.0 , 0.5, 0.1, 0.05, 0.02, 0.01]
kum=0.0
for i in coin :
while True :
if kum + coin[i] >= x :
# Intial (first loop) this should be equal to: if 0 + 2.0 > users input
# Second loop should be equal to if 2.0 + 1.0 > users input
break
else :
kum += coin[i]
控制台说:
Traceback (most recent call last):
, line 13, in <module>
if kum + coin[i] >= x :
TypeError: list indices must be integers, not float
我想知道我做错了什么。 列表项是浮点数?添加0.0和浮点应该不是问题? 任何帮助表示赞赏。 `
答案 0 :(得分:2)
您的代码已损坏,编译器已告诉您问题所在。
您正尝试使用float索引列表。 索引必须是整数,但是:
for i in coin :
while True :
if kum + coin[i] >= x :
break
else :
kum += coin[i]
使用硬币中每个元素的值来索引硬币本身,因此索引将为[2.0 , 1.0 , 0.5, 0.1, 0.05, 0.02, 0.01]
所以你要问的是第二个,第一个元素,然后是元素0.5等。
你可能意味着
if kum+i >=x :
此外,你的内部有一个无限循环。删除while True :
,如下所示:
for i in coin :
if kum+i >=x :
break
else :
kum += i
然后,循环将为硬币中的每个元素执行一次,我将设置为coin []中的值,即:
等
答案 1 :(得分:1)
您正在传递浮动值作为硬币列表的索引。
将您的for语句更改为:
for i in range(0, len(coin)):
然后你将传递整数索引(而不是列表中项目的值)
或者,您可以将i作为值并使用它:
for i in coin:
while True:
if kum + i >= x:
答案 2 :(得分:0)
谢谢你们,问题是:
for i in range(0, len(coin)):
将其更改为:
x = input("Bitte Euro Betrag eingeben: ")
coin = [2.0 , 1.0 , 0.5, 0.1, 0.05, 0.02, 0.01]
coinscount = [0 , 0 , 0 , 0 , 0 , 0 , 0]
kum=0.0
if min(coin) > x :
print("Betrag zu klein")
exit
for i in range(0, len(coin)):
while True :
if kum + coin[i] > x :
break
else :
kum = kum + coin[i]
coinscount[i] += 1
print("Anzahl Muenzen ist: ", sum(coinscount))
for i in range(0, len(coin)):
print("Sie benoetigen: ", coinscount[i], "Stueck", coin[i])
之后这对我来说很有意义...... 只是为了记录:这个“杰作”:)代码应该检查你需要多少硬币达到一个特定的值。 用户输入是值,硬币阵列为现有硬币(EUR)。
var order = from MenuInfo in doc.Descendants("MenuInfo")
select new
{
Data1 = MenuInfo.Element("Data1").Value,
Data2 = MenuInfo.Element("Data2").Value,
Data3 = MenuInfo.Element("Data3").Value,
};
非常感谢,Josi