2016-11-04 5 views
-2

Я просканировал веб-сайт, но не ответил (зависит от решения). Я застрял с нижеследующим:Python: значение массива вызова для вычисления (int to float)

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] 

Console говорит:

Traceback (most recent call last): 
    , line 13, in <module> 
if kum + coin[i] >= x : 
TypeError: list indices must be integers, not float 

Мне было интересно, что я делаю неправильно. Элемент списка float? Добавление 0.0 и float не должно быть проблемой? Любая помощь приветствуется. `

ответ

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, я = 2,0
  • Итерация 2, г = 1,0
  • Итерация 3, г = 0,5

т.д.

+0

извините, я забыл объяснить, что я хочу сделать: если кум + монета [I]> = х -> это должно добавить стоимость монеты [I] и кум и сравните его с x. Итак, исходный кум должен быть 0 и монета [0] = 2.0 (первая запись в массивной монете). это делается с каждым элементом монеты. Таким образом, эта строка бросает ошибку. –

+0

Если вы удалите while, то цикл будет выполняться один раз для каждого значения i, и я буду содержать значения из монеты. Позвольте мне обновить. – mjs

1

Вы передаете значение float в качестве индекса для списка монет.

Измените ваш для заявления сказать:

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