【问题标题】:Python program prompts user to enter number until they enter 0, then program adds even and odd integersPython程序提示用户输入数字直到输入0,然后程序添加偶数和奇数
【发布时间】:2017-05-23 00:41:14
【问题描述】:

我正在学习 Python 课程,我们的教授希望我们编写一个程序,提示用户重复输入一个整数,直到他们输入 0。然后,让程序忽略所有负数(如果有),并显示偶数个数、奇数个数、偶数和、奇数和、正整数个数。

我一直在尝试并尝试将这个程序分成小部分。但是,我总是最终陷入困境。我现在已经重新开始了大约 5 次,如果有人能指出我正确的方向,我将不胜感激。

到目前为止,我有这个:

 num_str = input("Input an integer (0 terminates):")
 num_int=int(num_str)
 even_count=0
 odd_count=0
 even_sum=0
 odd_sum=0 


while num_int !=0:
   num_str = input("Input an integer (0 terminates):")
   num_int=int(num_str)
   for num_int in num_str: 
       if num_int%2 == 0: 
           even_count += 1
       else: 
           odd_count +=1


print("")
print("Sum of odds:", odd_sum)
print("Sum of evens:", even_sum)
print("Even count:", even_count)
print("Odd count:", odd_count)
print("Total positive int count:")

我知道这并不多,我错过了很多,但我只是写了我知道到目前为止需要包含的内容。我一直卡住,因为程序一直给我错误。非常感谢任何形式的帮助,因为我真的不知道从哪里开始!

【问题讨论】:

  • 您遇到了哪些错误/意外行为?
  • 如果 num_int % 2 == 0 时显示“TypeError:并非所有参数都在字符串格式化期间转换”
  • 为什么会有额外的 for 循环?取出那条线(并将缩进移回)。 for 循环只是将num_int 重新定义回字符串。
  • @NouraAsrar 不要忘记选择最适合您要求的答案。

标签: python python-3.x


【解决方案1】:

您的代码有一些问题,但它们都很小:

1) 您在主循环之前要求输入数字,因此输入的第一个整数不会相加(第 1 行和第 2 行)

2) 在你的主循环中拥有一个 for 循环是没有意义的。您正在做的是尝试检查字符串中的每个字符。只是不是你想要的。

3) 要忽略负数,只需检查它们是否小于 0,如果是则继续(中断循环)。

4) 您使用的是 3 个空格的缩进。这可能是您的文本编辑器的问题,因此请尝试将其配置为使用 4 个空格,这是 Python 中的标准。

5) 约定说在运算符周围应该有一个空格。

6) 正整数计数只是另一个简单的计数器。

所有的修改,这就是你的代码应该是这样的:

num_int = None
even_count = 0
odd_count = 0
even_sum = 0
odd_sum = 0


while num_int != 0:
    num_str = input("Input an integer (0 terminates):")
    num_int = int(num_str)

    if num_int < 0:
        continue  # Continue the loop and go back to asking input

    # If the loop reaches this point we know it's a positive number, so just add one
    positive_count += 1

    if num_int % 2 == 0:
        even_count += 1
        even_sum += num_int
    else:
        odd_count +=1
        odd_sum += num_int


print("")
print("Sum of odds:", odd_sum)
print("Sum of evens:", even_sum)
print("Even count:", even_count)
print("Odd count:", odd_count)
print("Total positive int count:", positive_count)

【讨论】:

  • 谢谢!但是,当我这样做时,它给了我一个错误,即 num_int 未定义
  • @NouraAsrar 对不起,我忘了包括第一行。再试一次num_int = None in。
【解决方案2】:

你应该声明一个变量

total = 0

统计用户输入的整数个数。

拥有一个

也更具可读性
while True:

输入为零时中断的循环,而不是您拥有的循环。

在循环中,你应该

break

如果输入等于0,

continue

如果输入小于1,则增加even_count,如果输入为偶数,则加到even_sum,

even_count += 1
even_sum += num

否则增加odd_count 和odd_sum,

odd_count += 1
odd_sum += num

最后,你应该增加总数:

total += 1

还要确保将代码的最后一行更改为:

print("Total positive int count:", total)

显示总数

您的最终结果应如下所示:

even_count = 0
odd_count = 0
even_sum = 0
odd_sum = 0
total = 0

while True:
    num = int(input("Input an integer (0 terminates): "))
    if num == 0:
        break
    if num < 1:
        continue
    if num % 2 == 0:
        even_count += 1
        even_sum += num
    else:
        odd_count += 1
        odd_sum += num
    total += 1

print("")
print("Sum of odds:", odd_sum)
print("Sum of evens:", even_sum)
print("Even count:", even_count)
print("Odd count:", odd_count)
print("Total positive int count:", total)

【讨论】:

    【解决方案3】:

    试试这个

    userInput = None
    oddSum = 0
    oddCount = 0
    evenSum = 0
    evenCount = 0
    
    while(userInput != 0):
        userInput = int(input("Enter a number: "))
        if(userInput > 0):
            if(userInput % 2 == 0):
                evenSum += userInput
                evenCount += 1
            elif(userInput % 2 != 0):
                oddSum += userInput
                oddCount += 1
    
    print("even numbers: {} sum: {}".format(evenCount, evenSum))
    print("odd numbers: {} sum: {}".format(oddCount, oddSum))
    

    【讨论】:

    • 没有理由global 变量,因为这最终会导致大型程序中的命名空间冲突,以及太多的变量无法单独管理。将值作为 *args 或 **kwargs 传入会更有意义,然后根据需要进行操作并返回。
    • 确实,但正如他所说,这是一个小程序,您如何通过传递参数来建议替代方案?
    • 这是一种糟糕的、不必要的并且不是真正正确的递归使用。当用户在第一个数字后输入0 时,程序也不会终止。
    • 感谢您让我意识到@StevenSummers 的冗余和错误
    【解决方案4】:

    要忽略负数,你可以让他们把它放在 agian 中,像这样的 if 循环 如果 (num_str>0): num_str = input("那不是偶数,输入一个整数(0结束)") 然后要添加它们,您必须像这样添加 num_str 的整数版本 奇数和 += int(num_str) 这里有一些代码供您尝试

    num_str = input("Input an integer (0 terminates):")
    num_int=int(num_str)
    even_count=0
    odd_count=0
    even_sum=0
    odd_sum=0 
    total = even_count + odd_count
    
    while num_int !=0:
        num_str = input("Input an integer (0 terminates):")
        num_int=int(num_str)
        if num_int < 0:
            num_str = input("Input an integer greater than 0.")
        for num_int in num_str:
            num_int = int(num_str)
    
            if num_int % 2 == 0 and not num_int == 3 and not num_int == 0: 
                even_count += 1
                even_sum = even_sum + num_int
            elif not num_int == 0: 
                odd_count +=1
                odd_sum = odd_sum + num_int
        total = even_count + odd_count
    
    print("")
    print("Sum of odds:", odd_sum)
    print("Sum of evens:", even_sum)
    print("Even count:", even_count)
    print("Odd count:", odd_count)
    print("Total positive int count:", total)
    

    【讨论】:

      【解决方案5】:
      val = []
      inpt = None
      evensm, oddsm = 0, 0
      
      while inpt != 0:
          inpt = int(input("Enter a number: "))
          val.append(inpt)
      
      for i in val:
          if i % 2 == 0:
              evensm += i
          else:
              oddsm += i
      
      print("Sum of even integers is", evensm)
      print("Sum of odd integers is", oddsm)
      

      或者如果您不喜欢使用列表:

      oddsm = 0
      evensm = 0
      
      while 1:
          inpt = int(input("Enter a number: "))
          if inpt == 0:
              break
          elif inpt % 2 == 0:
              evensm += inpt
          else:
              oddsm += inpt
      
      print("Sum of odd integers is", oddsm)
      print("Sum of even integers is", evensm)
      

      【讨论】:

      • 感谢发帖!如果您解释了它与其他已发布答案的区别,您的答案会更有帮助。为什么有人会选择你的方法而不是其他 4 个答案?
      • 我使用列表来存储输入的值,然后对其进行排列。我猜列表是原因。此外,它更短且更易于理解。
      【解决方案6】:
      Write a Python program to take input of positive numbers, with an appropriate prompt, from the user until the user enters a zero. Find total number of odd & even numbers entered and sum of odd and even numbers. Display total count of odd & even numbers and sum of odd & even numbers with appropriate titles.
          sumOdd =0
      sumEven = 0
      cntOdd =0
      cntEven = 0
      while True :
          no = int(input("enter a number (0 for exit)"))
          if no < 0 :
              print("enter positive no......")
          elif no == 0 :
              break
          elif no % 2 == 0 :
              cntEven = cntEven+1
              sumEven  = sumEven + no
          else :
              cntOdd = cntOdd+1
              sumOdd  = sumOdd + no
      print ("count odd == ",cntOdd)
      print ("sum odd ==  ",sumOdd)
      print ("count even == ",cntEven)
      print ("sum even ==  ",sumEven) 
      

      【讨论】:

        【解决方案7】:
        Write a Python program to take input of a positive number, say N, with an appropriate prompt, from the user. The user should be prompted again to enter the number until the user enters a positive number. Find the sum of first N odd numbers and first N even numbers. Display both the sums with appropriate titles.  
        n = int(input("enter n  no.... : "))
        sumOdd =0
        sumEven = 0
        for i in range (n) : 
            no = int(input("enter a positive number : "))
            if no > 0 :
                if no % 2 == 0 :
                    sumEven = sumEven + no
                else :
                    sumOdd = sumOdd + no
            else :
                print("exit.....")
                break
        print ("sum odd ==  ",sumOdd)
        print ("sum even ==  ",sumEven)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多