Bash: ошибка деления на ноль, при делении отображаются только целочисленные ответы

Я пишу простой калькулятор bash для класса и почти завершил его, но у меня возникают две проблемы:

  • Я использую аргумент if / then, чтобы попытаться справиться с ошибками деления на ноль. Продолжаю получать ошибку из этого раздела скрипта

  • Я использую python для возврата нецелых чисел, и он работает со всеми операциями, кроме деления. Я не уверен, почему эта одна конкретная операция не работает.

Я просмотрел все сообщения в верхней части экрана, а также запросил в Google несколько тегов на сайте stackoverflow.com и не нашел ничего, что помогло бы исправить любую из этих проблем. Если я нахожусь не на том форуме или на него уже был дан ответ - я впервые использую этот сайт - поэтому заранее прошу прощения.

Любое понимание было бы очень полезно. Заранее спасибо!

Вот разделы:

Проблема 1: если команда возвращает ошибку, как мне исправить ситуацию, чтобы она не выполняла деление на ноль?

if [ $n3 -eq 4 $$ $n2 -eq 0 ]
    then
        echo "Oops, cannot divide by zero. Your answer is undefined."

если

Конец первой проблемы.

Проблема 2: приведенное ниже уравнение не выводит нецелые числа (например, 1, разделенное на три, показывает 0, я хочу, чтобы было отображено 0,333 или подобное), почему?

    4) 
    quotient=$(python -c "print $n1/$n2")
        echo "The quotient of $n1 and $n2 is $quotient"
            ;;

Конец проблемной области 2.

*)          
        echo "Invalid Option. Pick a number between 1-4 for your operator."
            ;;

esac

Для №1 вы можете использовать [ "$n3" -eq 4 ] && [ "$n2" -eq 0 ] вместо $$, но что вы подразумеваете под проблемой 2? Что он выводит и чего вы ожидали? (Кстати, SO лучше работает с одной проблемой на сообщение. См. Одно сообщение с несколькими вопросами или несколько сообщений?)

that other guy 18.09.2018 22:06

Спасибо этому парню, если я ввожу 1 и делю на 3, получается 0. Я хочу получить 0,333 или эквивалент. С уважением, будет

Will McCoy 18.09.2018 22:09

А, ладно, вместо «приведенное ниже уравнение выводит нецелые числа» вы имели в виду «оно никогда не выводит нецелые числа»

that other guy 18.09.2018 22:11

Точно. Извините должно было быть более ясным. Я редактировал исходную ветку. Это кажется глючным, потому что, насколько я понимаю, это те же параметры, что и у остальных трех операций.

Will McCoy 18.09.2018 22:13

Считайте, что прикомандировано руководство "отдельный пост для каждой проблемы". Также см. Рекомендации минимальный воспроизводимый пример: Код в вопросе должен быть кратчайший возможный код, который действительно работает (без изменений), чтобы продемонстрировать проблему, которая находится в центре внимания этого вопроса. Если вы можете удалить print или жестко запрограммировать определенное значение вместо использования read, но проблема все еще возникает, вы должен удалите их.

Charles Duffy 18.09.2018 22:21
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
292
1

Ответы 1

Для вашего состояния вы использовали [ $n3 -eq 4 $$ $n2 -eq 0 ], где предположительно предполагали, что $$ будет &&. Вы можете сделать одно из следующих действий:

[ "$n3" -eq 4 ] && [ "$n2" -eq 0 ] # POSIX 
[[ $n3 -eq 4 && $n2 -eq 0 ]]       # Bash specific

Для другой вашей проблемы см. Почему Python возвращает 0 для простого вычисления деления?. Ты можешь сделать:

n1=1 n2=4
quotient=$(python -c "print $n1.0/$n2")  # Becomes "print 1.0/4"
echo "$quotient"                         # Shows 0.25

Спасибо, и я оставлю это по одному вопросу для каждого поста в будущем. С уважением, w

Will McCoy 18.09.2018 22:21

Другие вопросы по теме