Я думаю, что две проблемы с кодом заключаются в том, что он не сохраняет входные значения, поэтому код не отображает никакого результата, а во-вторых, из раскрывающегося списка каждый раз выбирается только первый вариант. Пожалуйста, сообщите мне об ошибках в коде. Я новичок в кодировании.
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Tip Calculator</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<form>
<div class="mb-3">
<label class="total form-label">Total Bill</label>
<input type="number" class="form-control" id="bill" >
<div id="emailHelp" class="form-text">Please Enter your bill in numbers only.</div>
</div>
<div class="mb-3">
<label class="form-label">Number of People</label>
<input type="number" class="form-control" id="people">
</div>
<!-- <div class="mb-3 form-check">
<input type="checkbox" class="form-check-input" id="exampleCheck1">
<label class="form-check-label" for="exampleCheck1">Check me out</label>
</div> -->
<select class="form-select" id="myValues">
<option value="30%">Select the service quality</option>
<option value="30%">30% - Outstanding</option>
<option value="20%">20% - Good</option>
<option value="15%">15% - it was okay</option>
<option value="5%">5% - Terrible</option>
</select>
<button type="submit" class="btn btn-primary">Calculate</button>
</form>
<div id="totalTip">
<sup>$</sup><span class="form-label" id="tip">0.00</span>
<small id="each">each</small>
</div>
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="tip.js" charset="utf-8"></script>
</html>
Это код javascript
var a = $("#bill").val();
var b = $("#people").val();
var c = $("#myValues").find('option:selected').val();
$(".btn").click(function () {
$("#tip").html(calculateTip(a, b, c));
});
function calculateTip (total, people, select) {
var d = total/people;
var e = d*(select/100);
return e;
}
// calculateTip(a, b, c)
1 ответ
Пара вопросов выделяется.
-
вы определяете a, b и c в начале скрипта, прежде чем пользователь взаимодействует с формой. Затем мы должны определить внутри обработчик кликов, таким образом они будут оцениваться и устанавливаться при нажатии кнопки.
-
Вы можете добавить
e.preventDefault();внутри обработчика кликов, чтобы остановить поведение отправки по умолчанию (т. е. остановить попытку отправки формы) -
Вам не нужно искать выбранный параметр для #myValues, вы можете получить доступ к текущему выбранному значению напрямую через
$("#myValues").val() -
Вы захотите удалить
%из значений параметров, чтобы вы могли выполнять математические операции со значением (вы получите NaN с%на месте, что делает значение строкой. -
Вы, вероятно, захотите добавить
.toFixed(2)к результату подсказки, чтобы заставить его округляться и усекаться до 2 знаков после запятой, чтобы избежать длинных повторяющихся десятичных знаков.
$(".btn").click(function(e) {
e.preventDefault();
let a = $("#bill").val();
let b = $("#people").val();
let c = $("#myValues").val();
let tip = calculateTip(a, b, c);
$("#tip").html(tip);
});
function calculateTip(total, people, select) {
var d = total / people;
var e = d * (select / 100);
return e.toFixed(2);
}
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Tip Calculator</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<form>
<div class="mb-3">
<label class="total form-label">Total Bill</label>
<input type="number" class="form-control" id="bill">
<div id="emailHelp" class="form-text">Please Enter your bill in numbers only.</div>
</div>
<div class="mb-3">
<label class="form-label">Number of People</label>
<input type="number" class="form-control" id="people">
</div>
<!-- <div class="mb-3 form-check">
<input type="checkbox" class="form-check-input" id="exampleCheck1">
<label class="form-check-label" for="exampleCheck1">Check me out</label>
</div> -->
<select class="form-select" id="myValues">
<option value="30">Select the service quality</option>
<option value="30">30% - Outstanding</option>
<option value="20">20% - Good</option>
<option value="15">15% - it was okay</option>
<option value="5">5% - Terrible</option>
</select>
<button type="submit" class="btn btn-primary">Calculate</button>
</form>
<div id="totalTip">
<sup>$</sup><span class="form-label" id="tip">0.00</span>
<small id="each">each</small>
</div>
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</html>
1
Wesley Smith
10 Сен 2022 в 11:01
Поскольку вы можете вычислить значение — в этом случае довольно легко — оно избыточно. Вы почти никогда не должны хранить избыточные данные. Это означает, что в каждом месте, где вы обновляете либо цену, либо людей, вы должны обязательно обновлять общую сумму. Если вы забудете сделать это хотя бы в одном месте, данные теперь будут несогласованными. Итак, предположим, теперь у вас есть запись, в которой говорится, что цена = 10 долларов, люди = 3, итого = 40 долларов. Если у вас есть разные программы, отображающие информацию по-разному — разные итоги, подмножества или что-то еще — пользователь может получить разные ответы на один и тот же вопрос в зависимости от того, как он его задал. Хотя плохо получить неправильный ответ, еще хуже получить иногда правильный, а иногда неправильный ответ, потому что тогда может быть непонятно, как решить проблему. Я имею в виду, что если я вижу, что какой-то клиент показывает 2 человек вместо 3, предположительно есть какой-то экран, на который я могу перейти, заменить 2 на 3, нажать «Сохранить» или что-то еще, и это исправлено. Но если там написано, что 10 долларов умножить на 2 человека = 30 долларов, куда мне обратиться, чтобы это исправить? Как?
Вы можете сказать, что запись обновляется только в одном месте, так что проблем нет. Но это сегодня. Что, если завтра вы или какой-то другой программист добавите новую функцию для обновления другого рода?
Сейчас я работаю над системой, которая заполнена избыточными данными. Основная информация о каждом продукте нашей компании хранится в таблице «item». Для каждой единицы на складе у нас есть запись о запасе, и вместо того, чтобы просто ссылаться на запись о товаре, они копируют все данные для каждой единицы запаса. Когда товар продается, мы копируем все данные в запись о продаже. Если что-то возвращается, копируем все данные в запись возврата. И т. д. и т. д. для нескольких других типов записей. Это вызывает бесконечные проблемы. Однажды у нас возникла проблема, когда пользователь запустил запрос на поиск элементов с определенными характеристиками, а в список попаданий попали элементы, не соответствующие критериям поиска. Почему? Поскольку запрос находит все записи номенклатур, соответствующие критериям поиска, он пытается сопоставить эти записи номенклатур с записями запасов по номеру детали… но некоторые записи номенклатуры не соответствуют записи номенклатуры по другим критериям по разным причинам. Сейчас я работаю над устранением проблемы, из-за которой данные о затратах не всегда правильно копируются из записей о запасах в записи о продажах. Я бы хотел просто перепроектировать базу данных, чтобы удалить все избыточные данные, но это был бы огромный проект.
Конечно, бывают случаи, когда потери производительности при пересчете части данных слишком велики. Например, если вам нужно прочитать тысячи записей транзакций для расчета текущего баланса, и вы хотите регулярно отображать текущий баланс, это может быть слишком большой нагрузкой на производительность, и вам лучше хранить его избыточно. Но я бы очень медлил с такими вещами. Убедитесь, что это действительно серьезная проблема с производительностью.
Умножение двух чисел, которые есть в записи, которую вы уже читаете? Ни за что. Я не могу себе представить, что это вызовет какие-либо проблемы с производительностью. Если ваш механизм базы данных не может умножить два числа за крошечный процент времени, необходимого для чтения записи, приобретите новый механизм базы данных.
|
Anderey 0 / 0 / 0 Регистрация: 22.01.2022 Сообщений: 6 |
||||
|
1 |
||||
Исправь ошибки в работе программы02.02.2022, 21:36. Показов 3540. Ответов 1 Метки нет (Все метки)
При покупке билета на самолёт доступны дополнительные услуги: Начальная цена билета без услуг — 2000 рублей. Исправь ошибки в программе с функцией, предлагающей услуги и возвращающей финальную стоимость билета.
Миниатюры
__________________
0 |
|
Ultraevs 50 / 34 / 17 Регистрация: 10.01.2022 Сообщений: 110 |
||||
|
02.02.2022, 23:54 |
2 |
|||
|
Решениену что-то подобное
1 |
Задание
Исследуйте список order: найдите общую стоимость всех пицц. Результат выведите на экран.
Результат выдает такую ошибку:
Traceback (most recent call last):
File «main.py», line 48, in <module>
print(dumps(filtered_order, indent=4, ensure_ascii=False)) # печатаем список с помощью dumps()
NameError: name ‘dumps’ is not defined
Python:
order = [
{
'item': 'Пицца Маргарита', # название позиции
'category': 'пицца', # категория товара
'quantity': 2, # количество в заказе
'comment': 'Побольше сыра, пожалуйста!', # комментарий к заказу
'price': 320 # стоимость одной единицы товара
},
{
'item': 'Пицца с ветчиной',
'category': 'пицца',
'quantity': 1,
'comment': '',
'price': 410
},
{
'item': 'Pepsi 1 л',
'category': 'напитки',
'quantity': 3,
'comment': '',
'price': 75
},
{
'item': 'Сок яблочный 0.5 л',
'category': 'напитки',
'quantity': 1,
'comment': '',
'price': 80
},
{
'item': 'Круассан с сыром',
'category': 'выпечка',
'quantity': 2,
'comment': '',
'price': 130
}
]
# напишите ваш код здесь
filtered_order = []
filtered_order = 0
for item in order:
if item['category'] == 'пицца':
filtered_order += item['price']
print('Результат:')
print(dumps(filtered_order, indent=4, ensure_ascii=False)) # печатаем список с помощью dumps()
Сообщение было отмечено Anderey как решение