Python: код в IDE правильный, но неверный в домашней работе - PullRequest
1 голос
/ 21 октября 2019

Итак, я работаю над домашней работой на Python и предпочитаю писать ответы на домашнюю работу в IDE, а затем копировать и вставлять мой ответ. Для этой конкретной проблемы я сделал именно это, и хотя код отлично работает в IDE, он помечается как неверный на домашнем задании.

Вопрос к домашнему заданию: написать цикл, который читает строки из стандартного ввода, гдеСтрока либо "утка", либо "гусь". Цикл завершается, когда читается «гусь». После цикла ваш код должен распечатать количество прочитанных «утиных» строк.

Что говорит моя домашняя работа: Обнаружены проблемы: ⇒ Значение _stdoutневерно.

Мой ответ:

duckcount = 0
animal = ''
while True:
    animal = input('enter animal')
    if animal == 'duck':
        duckcount +=1
    elif animal == 'goose':
        break
print(duckcount)

Код отлично работает в моей IDE, но сообщение об ошибке, которое я получаю на домашней работе: «Значение _stdout неверно.

Ответы [ 3 ]

1 голос
/ 21 октября 2019

Мне интересно, добавил ли ваш учитель свои собственные пробелы к вводу, потому что ваша строка ввода не имеет ни одной по умолчанию.

Попробуйте это:

duckcount = 0
animal = ''
while True:
    animal = input('enter animal: ').strip()
    if animal == 'duck':
        duckcount += 1
    elif animal == 'goose':
        break

if duckcount == 1:
    print('There is {} duck!'.format(duckcount))
else:
    print('There are {} ducks!'.format(duckcount))

Результаты:

enter animal: duck   
enter animal:    duck
enter animal:  duck
enter animal: goose
There are 3 ducks!
0 голосов
/ 21 октября 2019

_stdout - это вывод, который ваша программа записывает, когда печатает данные в командной строке. Логика вашей программы совершенно безупречна.

Поскольку вывод помечен как неправильный, я сначала спросил бы учителя, хочет ли он конкретную формулировку. Я ожидаю, что он / она, вероятно, жестко запрограммировал конкретный вывод в анализатор домашних заданий. Если это так, тогда просто измените ваше print(duckcounter) на любое предложение / вывод, которое жестко закодировал учитель (как я сказал, лучше всего было бы спросить его / ее, если она / он это сделал).

Как сказаноМайк - SMT, учитель мог также изменить выражение input. Вы можете думать о вводе как о команде из двух частей. Сначала он печатает что-то в _stdout (вывод в командной строке), а затем ждет определенного действия (обычно, когда вы что-то набираете и нажимаете ввод).

Вы также можете сделать что-то вроде этого:

animal = ''
counter = 0
while animal != 'goose':
  animal = input('Please enter either "Goose" or "Duck": ')
  animal = animal.lower() # make everything lowercase
  if animal == 'duck':
    counter += 1
print('You have typed "duck" {} times'.format(counter))

Если у вас есть какие-либо вопросы, дайте мне знать.

0 голосов
/ 21 октября 2019

ОК, я понял, user10987432 дал мне эту идею. Все, что я сделал, это заменил «enter animal» на «». Я думаю, я должен был просто использовать пустое пространство для ввода. (Что работает, но мне нравится иметь небольшое сообщение о том, что делать в качестве предпочтения). спасибо за все ответы!

...