fbpx

Цикл из 3-х последовательных if

351 просмотра
0
0 Комментариев

Можно ли эту тройную проверку уместить в один цикл? В каком направлении искать?

Сейчас всё сделано ифами, а так как переменных и элементов списка типа ai_hp_rose и "rose" очень много, то получается код длинною в жизнь.

import random
 
for item in ai_pour_list:
    if item not in ai_flowers: # список ai_flowers содержит все цветки с уровнем хп выше 0
        $ ai_pour_list.remove(item) # удаляется из списка на полив, если цветка нет в общем списке цветков ai_flowers
 
# добавляется в список на полив, если уровень хп цветка снизился и его нет в списке на полив
if ai_hp_rose <= 200 and ai_hp_rose > 0 and 'rose' not in ai_pour_list:
    ai_pour_list.append("rose")
 
# случайный выбор цветка из списка на полив
if len(ai_pour_list) > 0:
    ai_location_pour_1 = random.choice((ai_pour_list))
 
# поливает выбранный случайно цветок из списка на полив, если уровень хп чуть ниже его максимального значения
if ai_location_pour_1 == "rose" and ai_hp_rose <= 195:
    ai_hp_rose += 5

UPD: Это часть кода игры для детей. Есть цветы в саду, которые на определённом этапе можно автоматически поливать. Если ai_hp_rose (или любой другой цветок, надо проверить все) ниже определённого значения, то роза добавляется в список на автоматический полив и затем из этого списка случайно выбирается цветок и поливается. После чего при следующей проверке, если её хп выше определённого значения, то цветок удаляется из списка на полив.


Добавить комментарий

2 Answers

Python Опубликовано 16.07.2019
0

Не очень точно сформулировано задание, но если я правильно понял, то у вас есть много цветов, которые вы обозначили переменными типа «ai_hp_rose», «ai_hp_tulip», «ai_hp_camomile». Вы выясняете, надо-ли поливать каждый из этих цветов, если надо — поливаете.
Самое очевидное в этом случае — список списков. Элементы списка нижнего порядка
«Name_of_Flower,Level_of_Humidity». В реалии список будет иметь вид, например,

[['rose',190],['tulip',63],['camomile,'127']]

В едином цикле обходите список верхнего уровня, проверяете значение Level_of_Humidity, изменяете его (если надо).
Проверка может быть и сложная, если надо, например,

if  Name_of_Flower=='rose' and Level_of_Humidity <195 :

Появился новый цветок — дополнили список. Выкорчевали цветок — его элемент из списка удалили.

Дополнение:

List_of_Flowers=[['rose',190],['tulip',63],['camomile',127]]
List_of_Flower_for_Watering=['rose','camomile']
for flower in List_of_Flowers:
    if flower[0] in List_of_Flower_for_Watering and flower[1]<195:
        print ("Поливаем "+flower[0])

Добавить комментарий
0

Имея список всех цветов (flowers), чтобы полить случайный цветок, который нуждается в поливке в данный момент:

flowers[:] = [f for f in flowers if f.hp > 0]    # remove dead flowers
candidates = [f for f in flowers if f.hp < MAX_HP]  # flowers to water
if candidates: # water a flower if there is any to water
    flower = random.choice(candidates)
    flower.hp = min(flower.hp + 5, MAX_HP)

где каждый цветок можно представить как (к примеру):

import random
from dataclasses import dataclass # Python 3.7 or pip install dataclasses
 
MAX_HP = 200
 
@dataclass
class Flower:
    name: str
    hp: int
 
flowers = [ # some dummy data
    Flower('rose', 190),
    Flower('tulip', 63),
    Flower('camomile', 127),
]

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up