【问题标题】:Need help using range for loop需要帮助使用范围 for 循环
【发布时间】:2018-11-04 21:28:50
【问题描述】:

我正在制作一个程序,计算用户输入的两个数字之间的所有偶数和奇数之和。我是 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)

【问题讨论】:

  • 你不是在测试我输入的是奇数还是偶数。您的范围只需要每个第二个数字,因此不需要 x%2 == 0 测试 - 根据您的开始,您只有奇数或偶数。不要使用sum 作为变量名,已经有一个名为sum 的内置函数 - 你正在隐藏它。如果你想对值求和,你可以这样做:print(sum( range( 10,21,2) ) ) 并得到 10+12+14+16+18+20
  • calculates the sum of all even and odd numbers between two number : 意思是你做2个求和,一个求偶数,一个求奇数?
  • @emi 是的,我正在计算 2 个总和

标签: python loops for-loop


【解决方案1】:

重要的是要知道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)) )

【讨论】:

  • 对 tmp 是什么感到困惑
  • 交换n 和m 值的时间变量。修复了列表分配。
【解决方案2】:

输入验证是良好编码的重要组成部分。可以在这里找到一个很好的概述:

为了使验证可重复使用,我将验证放在一个只接受整数的函数中,并且(如果提供了minval,请确保输入大于 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 k
not a number
please enter a number 55
enter number bigger then 55 2
must be a number and greater  55
enter number bigger then 55 150
Odd sum: 4896
Even sum: 4944

独库:

【讨论】:

    【解决方案3】:

    这是我认为适合您上面所问内容的描述的功能。如果用户没有输入他或她想要的查询类型,它将返回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
    

    【讨论】:

      猜你喜欢
      • 2012-06-10
      • 2016-10-22
      • 1970-01-01
      • 2020-08-22
      • 2021-03-11
      • 1970-01-01
      • 2019-06-07
      • 2016-11-30
      • 1970-01-01
      相关资源
      最近更新 更多