Я не знаю, как заставить мой код работать правильно

Я практиковался и пытался определять математические функции и другие вещи, но потом у меня возникла куча ошибок, и в итоге у меня не было ошибки, но результат был неправильным. Это код на момент написания этого:

def factorial(num):
 n = 1
    for i in range(1, num+1):
        n *= i
    return n

def series(start, end, expression):
    m = 0
    for n in range(start, end+1):
        m+=eval(expression)
    return m

ans1 = input("Do you want to use factorial or a series? ")
if ans1 == "Yes":
     ans2 = input("Series or factorial? ")
     if ans2 == "Series":
        start = int(input("Select the starting value of n. "))
        end = int(input("Select the final value of n. "))
        expression = input("Type the expression to be run in terms of n. ")
        m = series(start, end, expression)
        print("The result is: " + str(m))
     if ans2 == "Factorial":
        factorizing = int(input("Select the number to factorize. "))
        n = factorial(factorizing)
        print(n)
elif ans1 == "No":
     print("Ok!")

Спасибо за помощь, факториал() сейчас работает отлично, но когда я последовательно пробовал series(1, 5, 2*n+1), он дал мне 35, хотя должен был дать 25, кто-нибудь знает, что не так?

ваша первая строка кода во фрагменте неверна. вам не хватает факториала (число):

iBeMeltin 31.05.2024 21:55

Пожалуйста, прочитайте Как спросить.

Mark Tolonen 31.05.2024 21:55
n и m существуют только как локальные переменные функций. Присвойте возвращаемое значение вызванной функции, например. n = factorial(factorizing) и m = series(start, end, expression).
Mark Tolonen 31.05.2024 21:59

У вас неправильный отступ, вам следует исправить это прежде всего.

Mark Ransom 31.05.2024 22:09

«Я не знаю, как заставить мой код работать правильно» — так можно назвать заголовок половины вопросов о переполнении стека. Название вашего вопроса должно отражать специфику вашего вопроса. Вам также необходимо отредактировать свое тело, чтобы включить полную информацию о том, что происходит не так. Какие входные данные, которые вы используете, приводят к плохим результатам? Каковы эти результаты? Вы получаете какие-либо сообщения об ошибках? «получил кучу ошибок» недостаточно, чтобы помочь вам отладить.

Stephen Ostermiller 11.06.2024 00:07
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Переменные n и m не определены в области, к которой вы пытаетесь получить к ним доступ. Ваши функции возвращают число, но вы никогда не присваиваете значение переменной. Это легко исправить:

if ans2 == "Series":
        start = int(input("Select the starting value of n. "))
        end = int(input("Select the final value of n. "))
        expression = input("Type the expression to be run in terms of n. ")
        m = series(start, end, expression)
        print("The result is: " + str(m))
 if ans2 == "Factorial":
        factorizing = int(input("Select the number to factorize. "))
        n = factorial(factorizing)
        print(n)
Ответ принят как подходящий

Вам нужно поправить логику. Например, начало и конец:

def factorial(num):
    n = 1
    for i in range(1, num + 1):
        n *= i
    return n


def series(start, end, expression):
    m = 0
    for n in range(start, end + 1):
        m += eval(expression)
    return m

ans1 = input("Do you want to use factorial or a series? Type `Yes` or `No`. ")
if ans1.lower() == "yes":
    ans2 = input("Series or factorial? ")
    if ans2.lower() == "series":
        start_end = input("Type start and end values, like `3 4`: ")
        start, end = start_end.split()
        start, end = int(start), int(end)
        if start > end:
            start, end = end, start
        expression = input("Type the expression to be run in terms of n: ")
        result = series(start, end, expression)
        print("The result is: " + str(result))
    elif ans2.lower() == "factorial":
        factorizing = int(input("Select the number to factorize: "))
        result = factorial(factorizing)
        print("The result is: " + str(result))
elif ans1.lower() == "no":
    print("Ok!")

Принты

Do you want to use factorial or a series? Type `Yes` or `No`. yes
Series or factorial? series
Type start and end values, like `3 4`: 10 5
Type the expression to be run in terms of n: 4
The result is: 24

Для факториала:

Do you want to use factorial or a series? Type `Yes` or `No`. yes
Series or factorial? factorial
Select the number to factorize: 5
The result is: 120
  • Убедитесь, что ваши уравнения верны.
  • Вы можете добавить подробные инструкции, чтобы все ошибки были обработаны.

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