В то время как цикл не будет работать с вложенным оператором Elif?

Я все еще новичок в программировании и разрабатываю простые программы для автоматизации рутинной офисной работы.

У меня написан самый простой код, но всякий раз, когда я пытаюсь добавить цикл while, он ломает код и приводит к закрытию программы после того, как я ввожу значение для Y. Текст для печати после ввода значения Y никогда не появляется. У меня есть мой код, указанный ниже.

Все работает нормально, пока я не попытаюсь бросить его в цикл while, после чего он перестает работать. Есть ли что-то, что мне здесь не хватает?

Убираем цикл while и все снова работает

import os
import subprocess
import time
import pyautogui

x=15
y=10
while x != 333:
    print("test")
    print("15 - 10 is",x-y)
    print("Okay now tell me what X should be")
    x = input("Enter a numerical value for X: ")
    print("Excellent! Now let's do Y")
    y = input("Enter a numerical value for Y: ")
    print("Okay now let's compare X and Y")
    #don't forget to indent!
    if x > y:
        print("X is greater than Y!")
    elif y > x:
        print("Y is greater than X!")
    else:
        print("X is equal to Y!")
    print(x, y)
time.sleep(2)
input("Press Enter to continue...")

Что означают «бросить его в цикл while» и «он перестанет работать»?

Blorgbeard 29.05.2019 18:53

Вероятно, он бросает трассировку. Если вы используете выделенную среду IDE, посмотрите в окно консоли и посмотрите, что она выводит, когда достигает цикла while. Если вы открываете файл напрямую, запустите его через командную строку и посмотрите, что он там напечатает.

Mercury Platinum 29.05.2019 18:55

Если я возьму точно такой же рабочий код и встрою его в цикл while, программа начнет падать после того, как я введу значение Y. Удалите цикл while, и все снова заработает.

Kevin Burris 29.05.2019 18:56
input возвращает строку
Scott Hunter 29.05.2019 18:57

хорошо, поэтому он заканчивает один раунд в командной строке, затем начинает снова, печатает «тест», затем дает трассировку (последний последний вызов): говорит строку 10, в <module> print("15 - 10 is",xy) TypeError: не поддерживается тип(ы) операнда для -: 'str' и 'str' что это значит?

Kevin Burris 29.05.2019 19:02

О, ладно, я думаю, Скотт дал мне то, что мне было нужно. Как получить целочисленные значения из ввода, а не строки?

Kevin Burris 29.05.2019 19:03
Почему в 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
6
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

input возвращает строку, поэтому, когда цикл возвращается и пытается напечатать x-y, происходит сбой, потому что вы не можете вычитать строки.

Как я могу получить целочисленное значение для значения, введенного пользователем?

Kevin Burris 29.05.2019 19:05

Попробуйте использовать int(x).

Scott Hunter 29.05.2019 19:08

не уверен, что есть лучший способ, но я добавил дополнительную строку под каждой строкой ввода, чтобы преобразовать ее в целое число, используя int(), не самый элегантный, но это работает, спасибо!

Kevin Burris 29.05.2019 19:25

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