Python - оператор If с input () не работает внутри функции def () - PullRequest
0 голосов
/ 30 января 2019

Все в коде работает правильно, кроме def a() и def b(), и если операторы, которые проверяют, и input функционируют, хотя, когда я запускаю код, это приведет к печати 'good for you' независимо от ввода.Например, если я наберу False или Whatever в коде, что должно привести к разным результатам, оба приведут к ответу 'good for you', как будто ввод всегда 'True' или 'true'.Я давно не пишу, поэтому извините, если это очевидное исправление.

    tsil = ['input',]

while True:
  print('Write A Number (Print "done" When Finished)')
  num = input()
  tsil.append(num)
  print()
  if num == 'done':
    break

if True == True:
  print(tsil)

def a():
  print('you like short lists? (True or False)')
  ans = input()
  if ans == 'True' or 'true':
    return '\ngood for you'
  elif ans == 'False' or 'false':
    return '\nstop making short lists then'
  else:
    return '\nstop printing the wrong things loser'


def b():
  print('you like long lists? (True or False)')
  ans = input()
  if ans == 'True' or 'true':
    return '\ngood for you'
  elif ans == 'False' or 'false':
    return '\nstop making short lists then'
  else:
    return '\nstop printing the wrong things loser'

if len(tsil) < 10:
  print('^ short list large gorge')
  print()
  print(a())
else:
  print('^ big boy list')
  print()
  print(b())

Ответы [ 4 ]

0 голосов
/ 30 января 2019

Ваша проблема в том, что ваши условия в функциях таковы:

ans == 'True' or 'true'

Интерпретатор python видит это так:

(ans == 'True') or ('true')

и непустая строка оценивается какЗначение true, когда используется в операторе if.

Измените его следующим образом:

ans == 'True' or ans == 'true'
0 голосов
/ 30 января 2019

Внимательно посмотрите на эту строку ans == 'True' or 'true'

Это всегда вернет True

Вы можете попробовать

print(bool('False' == 'True' or 'true'))
print(bool(-999 == 'True' or 'true'))
print(bool('Unicorn' == 'True' or 'true'))

, чтобы увидеть ее истинное значение.

Для решения этой проблемы вы можете заменить ans == 'True' or 'true' на

if ans in ['True', 'true']:

или

if ans.lower() == 'true':

надеюсь, это поможет.

0 голосов
/ 30 января 2019
if ans == 'True' or 'true'

должно быть

if ans == 'True' or  ans == 'true'

и то же самое для других подобных случаев, поскольку if 'non-empty string' оценивается как True

0 голосов
/ 30 января 2019

Вам необходимо изменить свой оператор if с if ans == 'True' or 'true': на if ans == 'True' or ans == 'true':

См. Ниже код:

def a():
  print('you like short lists? (True or False)')
  ans = input()
  if ans == 'True' or ans == 'true':   # if ans.lower() == 'true':
    return '\ngood for you'
  elif ans == 'False' or 'false':
    return '\nstop making short lists then'
  else:
    return '\nstop printing the wrong things loser'

Аргументация

Если вы отметите, ans == 'True' or 'true всегда будет генерировать 'True', что является 1-м значением в условии OR.

bool('any value') всегда True

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...