A Python Арифметика c Математическая игра - PullRequest
1 голос
/ 14 июля 2020

Незначительная информация: я использую Lenovo Chromebook (Linux), CodePad (текстовый редактор) и терминал (как способ увидеть результат).

Цель: я хотел создать игру -подобная программа, в которой компьютер генерирует случайные значения от 0 до 100 и генерирует случайный оператор для сложения / вычитания / умножения / деления с другим случайным значением от 0 до 100. Если вы ответили на вопрос правильно, ваша оценка повысится на 1, и если это неправильно, ваш счет уменьшается на 1.

Проблема : Программа хорошо работает со всеми операторами, кроме деления. Я хочу, чтобы ответ деления был округлен до сотых. Например: 23/54 = 0,42592592592. Я хочу, чтобы программа приняла его как 0,43.

Вот что у меня есть: (Может ли кто-нибудь отредактировать мой код ниже на Python, я не уверен как).

from random import randint
import random
score = 0
while True:
    num1 = randint(0,100)
    num2 = randint(0,100)
    op = random.choice(["+", "-", "*", "/"])

    if op == '+':
        print(num1, "+", num2, "= x ")
        x_answer = num1 + num2

    elif op == '-':
        print(num1, '-', num2, '= x')
        x_answer = num1 - num2

    elif op == '*':
        print(num1, "*", num2, "= x")
        x_answer = num1 * num2

    elif op == "/":
        print(num1, "/", num2, "= x")
        x_answer = num1 / num2

    else:
        print("Invalid Operator")


    x = float(input("What's x? "))


    if x == x_answer:
        score += 1 
        print("CORRECT, your score is:", score)
    
    elif x != x_answer:
        score -= 1
        print("INCORRECT, you lost a point! Current score:", score)

Опять же, чтобы повторить проблему: когда есть вопрос о разделении, ответ должен быть полным (пример: 0,432 ...). Я хочу, чтобы компьютер принял 0,43 в качестве ответа и дал оценку go вверх, если ответ 0,43.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Вы можете попробовать встроенную функцию round() в python вокруг значения с плавающей запятой, например:

elif op == "/":
    print(num1, "/", num2, "= x")
    x_answer = round(float(num1 / num2), 2)

Первое значение в функции round() дает значение для округления, а второй сообщает python до какого десятичного знака. В этом примере вы хотите использовать 2 десятичных знака, поэтому введите 2.

0 голосов
/ 14 июля 2020
# this is a unit test for a comparison function f
def test(f):
    # check the case where it should be rounded down
    expected = 0.432
    correct = 0.43
    wrong = 0.44
    if not f(expected, correct):
        raise ValueError
    if f(expected, wrong):
        raise ValueError

    # check the case where it should be rounded up
    expected = 0.437
    correct = 0.44
    wrong = 0.43
    if not f(expected, correct):
        raise ValueError
    if f(expected, wrong):
        raise ValueError

    # need to accept more precision if it's right
    if not f(expected, expected):
        raise ValueError

    print ('passed')

places = 2

# floating point comparison by delta
def equivalent_delta(x, y):
    delta = 5 * 10 ** - (places+1)
    return abs(x-y) < delta

# comparison using builtin function round
def equivalent_round(x, y):
    return round(x, places) == round(y, places)

# compare their string representation with 2 places
def equivalent_print(x, y):
    format_string = '{{:.{}}}'.format(places)
    return format_string.format(x) == format_string.format(y)

# multiply by 100, convert to integer (with 0.5 for rounding)   
def equivalent_as_int(x, y):
    return int(x * 10**places + 0.5) == int(y * 10**places + 0.5)

test(equivalent_delta)
test(equivalent_round)
test(equivalent_print)
test(equivalent_as_int)

см. Также Не работает ли математика с плавающей запятой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...