Нужна помощь с использованием диапазона для цикла - PullRequest
0 голосов
/ 05 ноября 2018

Я делаю программу, которая вычисляет сумму всех четных и нечетных чисел между двумя числами, которые вводятся пользователем. Я новичок в Python и не уверен, как использовать range в цикле, чтобы моя программа работала. Вот мой код. Я знаю, что он небрежный и не очень хорошо сложенный и не законченный, но любая помощь работает, спасибо.

n = int(input(" please enter a number"))
m= int(input(" please enter another number"))
count =0
sum =0
for x in range(n,m+1,2):
    if x%2==0:
        count=count+x
    sum = count
    print(" the total sum of odd numbers are",sum)

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Важно знать, если n больше m, и ситуацию инвертирования, если таковая Кроме этого, вам нужно знать, является ли наименьшее число нечетным или четным, и начать два диапазона соответственно:

n = int(input("Please enter a number: "))
m = int(input("Please enter another number: "))

# n will always be the smaller one
if n > m:
    n, m = m, n

n_is_odd = n % 2 # Gives 1 if n is odd

n_even = n + n_is_odd # Sum 1 if n is odd
n_odd = n + (not n_is_odd) # Sum 1 if n is even

print("the total sum of even numbers is %d" % sum(range(n_even, m+1, 2)) )
print("the total sum of odd numbers is %d" % sum(range(n_odd, m+1, 2)) )
0 голосов
/ 05 ноября 2018

Вот функция, я думаю, вписывается в описание того, что вы спросили выше. Он возвращает None, если пользователь не вводит тип запроса, который он или она хочет.

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

def calculate_odd_or_even_sum(query):
    start = int(input(" please enter a number"))
    end = int(input(" please enter another number"))
    count = 0

    if query == 'even':
        return sum([x for x in range(start, end) if x % 2 == 0])
    elif query == 'odd':
        return sum([x for x in range(start, end) if x % 2 != 0])
    else:
        return 0
0 голосов
/ 05 ноября 2018

Проверка входных данных является большой частью хорошего кодирования. Хороший обзор можно найти здесь:

Чтобы сделать проверку пригодной для повторного использования, я поместил проверку в функцию, которая принимает только целые числа, и (если указано minval, убедитесь, что входное значение больше минимального значения.

def while_invalid_ask_input_return_integer(text, minval = None):
    """Aks for input until a number is given that is > minval if minval not None
    returns an integer."""
    while True:
        c = input (text)
        try:
            c = int(c)
            if minval is not None and c < minval:
                raise ValueError  # its too small, raise an erros so we jump to except:
            return c
        except ValueError:
            if minval is not None:
                print("must be a number and greater ", minval)
            else:
                print("not a number")

Я использую его, чтобы получить первое число, а второе число получает первое как «ограничение», поэтому оно будет больше. Для суммирования я просто использую диапазон, начинающийся один раз с n, один раз с n+1 до m и диапазон step, равный 2. Я проверяю, что имеет четность / нечетность n, и печатаю текст соответствующим образом:

n = while_invalid_ask_input_return_integer("please enter a number ")
m = while_invalid_ask_input_return_integer("enter number bigger then {}".format(n),n)

print( "Odd sum:" if n % 2 == 1 else "Even sum:", sum(range(n,m+1,2)) )
print( "Even sum:" if n % 2 == 1 else "Odd sum:", sum(range(n+1,m+1,2)) )

Выход:

please enter a number <b>k</b>
not a number
please enter a number <b>55</b>
enter number bigger then 55 <b>2</b>
must be a number and greater  55
enter number bigger then 55 <b>150</b>
Odd sum: 4896
Even sum: 4944

Доку:

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