в то время как l oop не работает правильно в python - PullRequest
0 голосов
/ 10 июля 2020

Я решил выучить python исходя из фона C ++, и я пытаюсь создать простую программу для печати нечетных чисел и вычисления суммы четных чисел в диапазоне, заданном пользователем.

в то время как код работает правильно для некоторых тестовых случаев my while l oop проверка, больше ли первое число, тогда второе число не работает должным образом.

Вот код:

number1= input("enter number 1: ") #line 5 error
number2= input("enter number 2: ") 
number_list = []

while number1 >= number2:
    number1= input("please enter a number: ")
    number2= input("please enter a number larger than number 1: ")

for number in range(int(number1),int(number2)+1):
    if number % 2 != 0:
        print(number)
    else:
        number_list.append(number)

sum = sum(number_list)
print(f"the sum of all even numbers is {sum}")

для данного входа (1,5) вывод правильный (1,3,5) и сумма равна 6, но для любого другого входа, где первое число не 1, я застреваю в бесконечном l oop из строки 5.

со входом (2,10) -> бесконечный цикл с входом (30,100) -> бесконечный цикл, пока вход не станет 1

, не уверен, почему он не работает как предназначен и думаю, что logi c правильный, но, возможно, я использую синтаксис C ++?

EDIT: input (2,5) работает правильно, но (2,10) не

никакой помощи были бы признательны

Ответы [ 4 ]

1 голос
/ 10 июля 2020
  1. Неправильная проверка входных данных
    • Входные данные str тип
      • while number1 >= number2: сравнивает строки
        • Это не должно использоваться в качестве условия while-loop
    • Только код для входов один раз
    • Подтвердите входы: int
    • Подтвердите number1 < number2
  2. Нет причин составлять evens список, а затем суммировать его
    • sum промежуточную сумму с evens += v
  3. Вы неправильно используете функцию python, sum в качестве имени переменной sum = sum(number_list)
while True:
    try:  # confirms input is int
        number1 = int(input("enter number 1: "))
        number2 = int(input("enter a number greater than number 1: "))
    except ValueError:  # ask for input if not int
        continue
    if number1 < number2:  # valid input number2 is greater than number1 so exits while loop
        break
        
evens = 0  # initialize evens
for v in range(number1, number2 + 1):  # iterate through range of input values
    if v % 2 != 0:  # check if value is odd
        print(v)
    else:
        evens += v  # add v to evens

print(f'the sum of all even numbers is {evens}')
1 голос
/ 10 июля 2020

input() in python возвращает string независимо от того, передано ли вы число или слово. Итак, вам нужно привести его к целому числу, чтобы получить желаемый результат. Вы правильно вводите тип ввода в вашем for l oop, но пропустили это в while l oop. Просто измените его на следующее:

while int(number1) >= int(number2):
1 голос
/ 10 июля 2020

Потому что вы сравниваете строку, а не целые числа. Вы можете узнать больше о сравнении строк из здесь .

Заменить,

while number1 >= number2:

на,

while int(number1) >= int(number2):
0 голосов
/ 10 июля 2020

Ваша проблема в том, что в вашем while l oop сравнивает строки вместо целых чисел. Например: '2' >= '10' => True, что приводит к неожиданной итерации l oop.

Вы можете исправить свой код, приводя тип результата ввода к int:

number1= int(input("enter number 1: ")) # typecast to int
number2= int(input("enter number 2: ")) # typecast to int
number_list = []

while number1 >= number2:
        number1= input("please enter a number: ")
        number2= input("please enter a number larger than number 1: ")

for number in range(number1,number2+1): # removed typecast
    if number % 2 != 0:
        print(number)
    else:
        number_list.append(number)

sum = sum(number_list)
print(f"the sum of all even numbers is {sum}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...