2016-05-27 4 views
0

мне было интересно, если это тот же код может быть сделано с for loop вместо того, whileИзменение в то время как цикл в цикл

d = 0.6 
b = 0.0 
h = 0.0 
t = 0.0 
count = 0 

h = float(input("enter height: ")) 
b = float(input("enter a number of bounces: ")) 

t = h 

while count < b: 
    if count == b - 1: 
     t += h * d 
     #print(t) 
    else: 
     h = h * d 
     t += h * 2 
     #print(t) 
    count += 1 
    #print (t) 
print(t) 

ответ

1

Как напомнил мне GLHF, то b должен быть ИНТ для того, чтобы код ниже работать.
Я не вижу причины для переменной b, представляющей количество отскоков, чтобы быть поплавком. Более того, в вашем исходном коде вы сравниваете count (int) и b (поплавок с пользовательского ввода). В случае, когда б не поплавок с 0 для дробной части, то проверка потерпит неудачу, так что вы можете захотеть изменить строку b = int(input('Enter the number of bounces))

for count in range(b-1): # generates a sequence from 0 to b-2 
    h *= d 
    t += h * 2 
    #print(t) 
t += h * d 
print(t) 

range()

+1

Вы не можете использовать функцию float в диапазоне. Это должно быть целое число. И если вы используете 'round()' результат изменится, сначала проверьте переменные OP. Этот ответ далек от того, чего хотят OP. – GLHF

+0

@ GLHF Это правда, спасибо за указание. Думаю, я просто прочитал, что b означает отскоки, которые, естественно, будут int. – hlfrmn

+0

Также результат вашего ответа неверен, вы должны использовать диапазон (b) вместо операторов (b-1) и 'if' -' else'. – GLHF

0

Поскольку вы не» t измените переменные от float до integer, вы не сможете этого сделать, потому что вам нужна функция range(), а range() принимает только целочисленный тип.

Если вы установите переменные в целое число вместо float, вы можете использовать его в цикле for;

d = 0.6 
b = 6 #bounce 
h = 5 #height 
t = 0.0 
count = 0 

t = h 

for x in range(b): 
    if count == b-1: 
     t += h*d 
    else: 
     h *= d 
     t += h*2 

    count += 1 
print (t) 
Смежные вопросы