Общую стоимость экскурсии


Я новичок в этом так что я не уверен, если это разрешено, но, я недавно закончил поставленной задачей и хотел бы знать, если есть какие-то пути для меня, чтобы улучшить мой код.

Моя задача заключается в следующем: В рамках подготовки к экзамена кандидатам следует выполнять следующие практические задачи путем написания и тестирования программы или программ.

Организатор клуб пенсионеров организуют экскурсии для членов. Для каждого из этих матчей тренер нанят, питание в ресторане бронируются и билеты в театр забронированы. Программа обязана отработать затраты и предоставить распечатанный список, показывающий все на пикник.

Написать и протестировать программу для организатора клуба.

• Ваша программа должна включать соответствующие подсказки для ввода данных. • Сообщения об ошибках и другие материалы должны быть изложены четко. • Всех переменных, констант и прочих идентификаторов должны иметь осмысленные имена.

Вам нужно выполнить эти три задачи. Каждая задача должна быть полностью протестирована.

Задача 1 – выработать общую стоимость путешествия.

Организатор узнает, сколько пожилых людей будут заинтересованы в прогулке. Программа для задач 1 работает от этой информации, как видно из таблицы ниже.

$$ всегда \begin{массив}{|Л|Л|Л|Л|} \hline на \текст{число людей}&\текст{нанимать тренера (\$)} &\текст{стоимость еды (\$)} &\текст{стоимость билет в театр (\$)} \\ \hline на 12-16 & 150 & 14.00 & 21.00 \\ \hline на 17-26 & 190 & 13.50 & 20.00 \\ \hline на 27-39 & 225 & 13.00 & 19.00 \\ \hline на \конец{массив} $$

Минимальное количество пожилых граждан, необходимых для пикника, чтобы идти вперед на 10; не может быть более 36 граждан пожилого возраста на прогулке. Как минимум два опекуны должны идти на пикник, дополнительный уход нужен, если больше чем 24 пожилых граждан идти на прогулку. Воспитателям ничего не надо платить за выход. Рассчитать общую стоимость и стоимость за человека для пожилых людей.

Задание 2 – записать, кто будет на прогулке и сколько было выплачено.

Используя результаты задания 1, запишите имена людей, на пикник и сумму, которую они заплатили; включают в себя воспитатели на прогулке. Если есть несколько свободных мест в автобусе, то лишние люди могут быть добавлены; они тарифицируются по той же цене, как и другие пенсионеры. Рассчитать общую сумму собранных денег. Распечатать список людей, на пикник.

Задание 3 – определение точки безубыточности или прибыль, которые будут сделаны на прогулке.

Показывают ли выход сделал прибыль или нарушена даже используя расчетная стоимость от задач 1 и деньги, собранные от задач 2.

И мой код:

seniors = int(input("Please enter the amount of senior citizens going: "))
carers = int(input("Please enter the amount of carers going: "))

if seniors + carers >= int(40) or seniors <= int(1) or seniors >= int(37) or carers <= int(1) or (seniors >= int(24) and carers <= int(2)):
    print("Enter Valid Info Please")

else:
    print("Seniors going: " + repr(seniors) + " | Carers going: " + repr(carers))
    if seniors >= int(1) and seniors <= int(16):

        cost_coach = int(150)
        cost_meal = int(14)
        cost_ticket = int(21)
        seats = int(16)

    if seniors >= int(17) and seniors <= int(26):

        cost_coach = int(190)           
        cost_meal = float(13.50)
        cost_ticket = int(20)
        seats = int(26)

    if seniors >= int(27) and seniors <= int(36):

        cost_coach = int(225)            
        cost_meal = int(13)
        cost_ticket = int(19)
        seats = int(36)

    cost_coach_per_person = float(cost_coach / seniors)
    rounded_cost_coach_per_person = float("%.2f" % cost_coach_per_person)
    total_cost = (cost_meal * seniors) + (cost_ticket * seniors) + cost_coach
    cost_per_person = cost_meal + cost_ticket + rounded_cost_coach_per_person

    print("The total cost is $" + repr(total_cost))
    print("The total cost per person is $" + repr(cost_per_person))

    names_ppl_going = []
    print("Logbook (Names and payment)")
    n = int(1)
    total_payment = float(0)

    for x in range(seniors):
        person_id = repr(n) + ")"
        names_ppl_going.append(person_id)

        name = input("[" + repr(n) +  "] Enter a name: ")
        name2 = name + ":"
        names_ppl_going.append(name2)

        payment = float("%.2f" %(float(input("Amount paid($): "))))
        names_ppl_going.append("$" + repr(payment) + " | ")

        total_payment += payment
        n+=1

    print("Whose going and how much they paid: ")
    print(' '.join(names_ppl_going))
    print("There are " + repr(seats - seniors) + " empty seats left")

    question_3 = int(input("Would you like to fill the extra spaces? If so how many? (Number*/0 to cancel): "))
    if question_3 > 0 and question_3 <= seats - seniors:
        for x in range(question_3):
            person_id = repr(n) + ")"
            names_ppl_going.append(person_id)

            name2 = input("[" + repr(n) +  "] Enter a name: ") + ":"
            names_ppl_going.append(name2)

            names_ppl_going.append("$" + repr(float("%.2f" %(float(input("Amount paid($): "))))) + " | ")

            total_payment += payment
            n+=1
            seniors += 1
        print(' '.join(names_ppl_going))

    else:
        print("Process canceled")

    while True:
        question_1 = input("Do you still need to change anything in the list? (Y/N): ")

        if question_1 == "Y":
            question_2 = input("Would you like to change a name or a payment? (Name/Payment/Exit): ")

            if question_2 == "Name":
                list_change = int(input("Enter the number of the person you want to edit: "))

                if list_change == int(1):              
                    names_ppl_going.pop(1)
                    names_ppl_going = names_ppl_going[:int(list_change)] + [input("Enter the new name: ") + ":"] + names_ppl_going[int(list_change):]
                    print(' '.join(names_ppl_going))

                elif list_change >= int(2):                
                    list_change2 = (3*list_change)-2
                    names_ppl_going.pop(list_change2)
                    names_ppl_going = names_ppl_going[:int(list_change2)] + [input("Enter the new name: ") + ":"] + names_ppl_going[int(list_change2):]
                    print(' '.join(names_ppl_going))

            elif question_2 == "Payment":
                list_change = int(input("Enter the number of the person you want to edit: "))

                if list_change == int(1):
                    convt = ((names_ppl_going[2]).strip('$')).strip(' | ')
                    total_payment -= float("%.2f" %(float(convt)))

                    names_ppl_going.pop(2)
                    payment_change = list_change + int(1)

                    payment_add = float("%.2f" %(float(input("Enter the new payment: "))))
                    total_payment += float(payment_add)

                    names_ppl_going = names_ppl_going[:int(payment_change)] + ["$" + repr(payment_add) + " | "] + names_ppl_going[int(payment_change):]
                    print(' '.join(names_ppl_going))

                elif list_change >= int(2):                
                    list_change2 = (3*list_change)-1
                    convt = ((names_ppl_going[list_change2]).strip('$')).strip(' | ')
                    total_payment -= float("%.2f" %(float(convt)))

                    names_ppl_going.pop(list_change2)                            

                    payment_add_2 = float("%.2f" %(float(input("Enter the new payment: "))))
                    total_payment += float(payment_add_2)

                    names_ppl_going = names_ppl_going[:int(list_change2)] + ["$" + repr(payment_add_2) + " | "] + names_ppl_going[int(list_change2):]
                    print(' '.join(names_ppl_going))                                                        
            else:
                break                        
        else:
            break

    print("Total paid: $" + repr(float("%.2f" %(total_payment))))
    if total_payment < total_cost:
        print("You lost a total of $" + repr(total_cost - total_payment) + "!")
    elif total_payment >= total_cost:
        print("You earnt a profit of $" + repr(total_payment - total_cost))
    print("There are " + repr(seats - seniors) + " empty seats left")

Заранее спасибо!



226
6
задан 22 марта 2018 в 03:03 Источник Поделиться
Комментарии
1 ответ


  1. Ваш первый if сложная. Вместо того, чтобы сделать функцию, которая ясно говорит, что вы тестируете против.

  2. Сохранить сгруппированы цен в цены объекта. Я бы также держать все цены в цены объекта.

  3. Использовать main функция.

  4. Вы можете рассчитать общую стоимость и разделить на количество пенсионеров.

  5. Вы должны сгруппировать людей по объекту, и добавить этот объект в names_ppl_going.

    Это означает, что вам не придется раз свой ID, это три, и не придется резко различных кода в редактирование логики список.


  6. Сделать person_info функция, которая строит для вас человеком. Это делает ваш код более сухой.

  7. Не добавлять форматирование в ваши ценности, пока вы хотите, чтобы отобразить их. Мое имя не Peilonrayz: это Peilonrayz.

  8. Вы можете избавиться от необходимости n если вы установите правильную начальную и конечную точки На ваш выбор.

  9. Рассчитайте суммарную прибыль в конце. Расчет его добавляют ненужные сложности. И на самом деле делает код медленнее.

  10. str.format ваш друг, используйте его.

  11. Я бы очень рекомендуем names_ppl_going список содержит людей, а так бы добавить кортеж [id, name, payment] в список.

    Это означает, что добавление к списку легче, но еще более важно изменение списка тоже.

    Потом я хотел изменить в редактировании, так вы спросите, если пользователь хочет редактировать список. Тогда я бы спросила, что они хотят пользователей, и выбрать этого человека в списке.
    Тогда вы можете спросить, что они хотят изменить, и поэтому не буду дублировать выше людей, проверить на обоих.
    Как только вы выбрали человека, это означает, что есть только 7 строк кода, чтобы обновить информацию.


И так что я бы изменить код, чтобы он что-то вроде: (не проверял)

from collections import namedtuple

class Prices:
Price = namedtuple('price', 'amount coach meal theatre')
SMALL = Price(16, 150, 14, 21)
MEDIUM = Price(26, 190, 13.5, 20)
LARGE = Price(39, 225, 13, 19)

def valid_amount_people(seniors, carers):
# The minimum number of senior citizens needed for the outing to go ahead is 10
if senior < 10:
return False

# there cannot be more than 36 senior citizens on the outing
if senior > 36:
return False

# A minimum of two carers must go on the outing
if carers < 2:
return False

# with an aditional carer needed if more than 24 senior citizens go on the outing.
if senior > 24 and carers < 3:
return False

# We can't have more than 39 people.
if senior + carers > 39:
return False

return True

def person_info(id):
return [
id,
input('[{id}] Enter a name: '),
float(input('Amount paid($): '))
]

def main():
seniors = int(input('Please enter the amount of senior citizens going: '))
carers = int(input('Please enter the amount of carers going: '))

if not valid_amount_people(seniors, carers):
print('Enter Valid Info Please')
return

people = seniors + carers
prices = next(
p
for p in [Prices.SMALL, Prices.MEDIUM, Prices.LARGE]
if people <= p.amount
)

cost = prices.coach + seniors * (prices.meal + prices.theatre)
print('The total cost is ${}'.format(cost))
print('The total cost per person is ${}'.format(cost / seniors))

print('Logbook (Names and payment)')

end = people + 1
people_info = [
person_info(id)
for id in range(1, end)
]

print('Whose going and how much they paid: ')
print(' '.join('{}) {}: ${} | '.format(*p) for p in people_info))
left = prices.amount - people
print('There are {} empty seats left'.format(left))

additional_people = input('Would you like to fill the extra spaces? If so how many? ')
try:
additional_people = int(additional_people)
except ValueError:
additional_people = 0

if additional_people != 0:
if additional_people < left:
print('Not enough seats, adding none.')
else:
for id in range(end, end + additional_people):
people_info.append(person_info(id))

while input('Do you want to change the list?').lower() == 'y':
person_id = int(input('Enter the id of the person you want to edit: '))
index = person_id - 1
if not (0 <= index < len(person_info)):
print('Invalid id')
continue

person = person_info[index]
type = input('Would you like to change a name or a payment? (Name/Payment/Exit): ').lower()
if type == 'name':
person[1] = input('Enter the new name: ')
elif type == 'payment':
person[2] = float(input('Enter the new payment: '))
else:
break

payment = sum(p[2] for p in person_info)
print("Total paid: ${}".format(payment))
if payment < cost:
print("You lost a total of ${}!".format(cost - payment))
elif payment >= cost:
print("You earnt a profit of ${}".format(payment - cost))
print("There are {} empty seats left".format(prices.amount - len(people_info)))

7
ответ дан 23 марта 2018 в 12:03 Источник Поделиться