Почему мой цикл for возвращает несколько выходов

#python #python-3.x #loops #for-loop

Вопрос:

Почему этот код возвращает несколько выходных данных кода

 a = ["w", "u", "i", "r"]   count = 0 d = input("choose: ") for c in a:  count  = 1  if d == c:  print(count)  else:  print("wrong")   

Если я выберу строку, которая удовлетворяет этому условию «d==c», она вернет позицию строки плюс «неправильно» три раза,

Если я выбираю строку, которая не удовлетворяет условию, она выводится неправильно четыре раза.

Если я не включу часть else, она выведет только позицию строки только один раз.

Пожалуйста, что не так с кодом, так как мне нужно включить другую часть

Комментарии:

1. Вам нужно поставить break операторы после print буквы s, чтобы цикл прекратился.

2. Что вы хотите , чтобы код делал? Вы хотите, чтобы он посмотрел на всю строку, а затем напечатал либо полный счетчик, либо «неправильно»?

3. Вы ничего не return делаете (и не можете, так как вы не находитесь внутри функции), вы просто print делаете это.

4. @samwise да, я этого хочу, просто выведите индекс или неправильно, чем сопровождаемое «неправильно». и я не хочу использовать функцию индекса, я хочу написать свою собственную функцию индекса

5. Тогда посмотрите мой ответ-главное, чтобы вы не хотели, чтобы «неправильное» условие возникало до конца цикла, потому что невозможно узнать, был ли ввод неправильным, пока вы не просмотрели все буквы.

Ответ №1:

Если я выберу строку, удовлетворяющую этому условию «d==c», она вернет позицию строки плюс «неправильно» три раза,

Это то, что ты пытаешься сделать?

 a = ["w", "u", "i", "r"]  d = input("choose: ")  for index, c in enumerate(a):  if d == c:  print(f"At index {index}")  else:  print("wrong")   

Выход :

 gt;gt;gt; choose: i wrong wrong At index 2 wrong  

Ответ №2:

Если вы пытаетесь найти индекс элемента в списке, используйте .index метод:

 a = ["w", "u", "i", "r"] print(a.index("u")) -gt; 1  

Он возвращает ошибку, если элемента нет в списке, вы можете устранить ее, используя try-except или проверив, есть ли элемент в списке:

 i = input("choose: ") if i in a:  print(a.index(i)) else:  print("wrong")  

или

 try:  print(a.index(i)) except ValueError:  print("wrong")  

Ответ №3:

Ваша логика хороша, но здесь нам нужна небольшая модификация, так как вы знаете, что при значении d==c будет выведен индекс, если нам нужно остановиться прямо там, так что как насчет того, чтобы мы просто увеличили количество, и если оно найдено, то остановите цикл, пожалуйста, попробуйте:

 a = ["w", "u", "i", "r"] count = 0 d = input("choose: ") for c in a:  if d == c:  print(count)  break  count  = 1 else:  print("wrong")   

Это выведет индекс, если d находится в списке a, иначе он выведет «неправильно».

Ответ №4:

Я думаю, что вы хотите сделать break , когда совпадение будет найдено, и отменить привязку else :

 a = "wuir" count = 0 for c in a:  count  = 1  if d == c:  print(count)  break else:  print("wrong")  

Отсутствие else привязки делает это частью for утверждения, а не if . Это означает, что он будет выполнен только в том случае, если весь for цикл завершится без a break , что означает, что вы получите "wrong" результат только в самом конце цикла, если d == c условие никогда не было выполнено.

Результат:

 choose: i 3  
 choose: f wrong