2016-11-04 83 views
-2

我爬网但没有答案(特定于解决方案)。我被困下列要求:Python:用于计算的调用数组值(int为浮点数)

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和浮点数不应该是问题吗? 任何帮助表示赞赏。 `

回答

2

你的代码坏了,编译器告诉你问题是什么。

您正尝试使用浮点型索引列表。 索引必须是整数,但这样的:

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 

然后,环路将在硬币的每个元素执行一次,我将在硬币[]被设置为的值,即:

  • 迭代1, I = 2.0
  • 迭代2,I = 1.0
  • 迭代3,I = 0.5

+0

对不起,我忘了介绍我想做的事:如果李锦+硬币[I]> = X - >这应该加币的价值[i]和琴并将其与x进行比较。所以最初的kum应该是0并且coin [0] = 2.0(数组硬币中的第一个入口)。这应该用硬币的每个元素完成。所以这一行是抛出错误。 –

+0

如果你删除了while,那么循环将为i的每个值执行一次,并且我将包含来自硬币的值。让我更新。 – mjs

1

您正在传递一个浮点值作为硬币列表的索引。

改变你的声明说:

for i in range(0, len(coin)): 

然后你会路过该整数指数(而不是项目的列表中的值)

或者,你可以只是把我的值,只是使用:

for i in coin: 
    while True: 
     if kum + i >= x: 
0

谢谢你们,问题是:

for i in coin : 

改变了到:

for i in range(0, len(coin)): 

后来这使得有很大的意义,我...只是备案 :这个“杰作” :)的代码应该检查你需要多少硬币到达具体的价值。 用户输入是价值,硬币现金(EUR)的硬币阵列。

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]) 

非常感谢,Josi