ИМХО, я думаю, использование while True
в такой ситуации не является хорошей практикой.
Я бы посоветовал вам заранее проверить, является ли каждое из них наименьшим, используя min(moneyihave, coffee)
, а затем создать цикл, используяrange
method:
min_val = min(moneyihave, coffee)
for i in range(0, min_val):
print(i) # Goes from 0 to min_val
Другой способ, который я бы посоветовал вам, это напрямую установить условия цикла в операторе while
:
# Since you sell coffee's without checking if you still have some, the condition should be coffee > 0.
while moneyihave >= 0 and coffee > 0:
# Do stuff...
# Deduct variables:
moneyihave -= 1
coffee -= 1
Но, глядя на ваш кодЯ вижу некоторые другие проблемы:
- У вас есть
coffeeprice
, но он никогда не используется.Я предполагаю, что вы намерены вычесть его из moneyihave
каждый раз, когда «покупатель» покупает кофе. - Пользователь вводит деньги на каждой итерации цикла, но это введенное значение используется только для проверки первого
if...else
блок.Я думаю, что немного сбивает с толку, когда значение money
устанавливается каждый раз, но вычитая некоторую сумму из moneyihave
. - у вас есть:
print('you have {} left in your pocket'.format(moneyihave-200))
после выполнения moneyihave = moneyihave - 200
, таким образом, вы показываете пользователюневерное количество. - Фраза
print('our coffee is 300 dollars')
не совпадает с указанной ценой на кофе.Опять же, я думаю, что проблема здесь не в том, чтобы использовать эту переменную
Кроме того, в вашем первом if...else
блоке, и на if
, и на elif
вы тратите один кофе и немного денег, таким образом ярекомендовал бы рефакторинг для чего-то вроде:
# Spend money if possible
if money >= 200:
coffee = coffee - 1
moneyihave = moneyihave - 200 # I think here you should use coffeeprice
else:
print('our coffee is 300 dollars') # I think here you should use coffeeprice
print('we have {} coffees left'.format(coffee))
print('you have {} left in your pocket'.format(moneyihave)) # Since he can't have negative money, this should always be 0
# User still have money left
if moneyihave > 0:
print('please take your change {} and here is your coffee'.format(money-200))
print('you have {} left in your pocket'.format(moneyihave-200))
else:
print('here is your coffee, we have {} coffees left'.format(coffee))
print('you have {} left in your pocket'.format(moneyihave-200))