#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
операторы после2. Что вы хотите , чтобы код делал? Вы хотите, чтобы он посмотрел на всю строку, а затем напечатал либо полный счетчик, либо «неправильно»?
3. Вы ничего не
return
делаете (и не можете, так как вы не находитесь внутри функции), вы просто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