Jestem początkującym w Pythonie i próbuję napisać program, aby sprawdzić, czy litera jest samogłoską, czy spółgłoską, używając listy i pętli for. Mam dwa warunki, w których oba coś drukują, ale żaden z nich nie jest wykonywany, a wynik jest pusty. Dlaczego?

Kod wygląda następująco:

    al=input("Enter the alphabet")

    list=['a','e','i','o','u']


    for p in list:
      if al==p:
          print("The alphabet is a vowel")


    else:
      print("The alphabet is a consonant")

Wynik to:

C: \ Users \ dell \ PycharmProjects \ HelloWorld \ venv \ Scripts \ python.exe

C: /Users/dell/PycharmProjects/HelloWorld/app.py

Wpisz alfabet

Proces zakończony kodem zakończenia 0

Czy ktoś mógłby mi powiedzieć, gdzie idę źle?

-2
Sourabh Chavan 1 kwiecień 2020, 15:52

3 odpowiedzi

Najlepsza odpowiedź

else nie działa tak, jak myślisz, że będzie. Jest wykonywany tylko wtedy, gdy nie ma break do wyjścia z pętli. (Zwróć uwagę, że jest on dołączony do pętli for, a nie do instrukcji if).

Spróbuj tego.

al=input("Enter the alphabet")

list_=['a','e','i','o','u']


for p in list_:
  if al==p:
      print("The alphabet is a vowel")
      break  # exit the loop

else:  # triggers if we haven’t seen a vowel and exited.
  print("The alphabet is a consonant")

Nawiasem mówiąc, nie powinieneś nazywać zmiennych list w Pythonie. Umieścisz w cieniu wbudowaną nazwę, która może powodować nieoczekiwane problemy w dalszej części kodu. Wygląda na to, że nazwałem tu czajnik czarnym; dzięki @NanduRaj.

1
Arya McCarthy 1 kwiecień 2020, 13:16

Istnieją trzy problemy z tym kodem:

  • na niektórych platformach (python 2) powinieneś użyć raw_input zamiast input: python input () nie działa zgodnie z oczekiwaniami

  • zamiast tego można zrobić to w następujący sposób: if al in <ref_list>

  • jak wspomniał @AryaMcCarthy, pętla else w for jest wykonywana tylko wtedy, gdy nie został trafiony żaden break

Możesz więc wypróbować kod zgodny z python2 + 3

import sys
if sys.version_info < (3,):
    input = raw_input

al = input("Enter the alphabet")
ref_list = ['a', 'e', 'i', 'o', 'u']

if al in ref_list:
    print("The alphabet is a vowel")
else:
    print("The alphabet is a consonant")

UWAGA, jak zauważył @ThierryLathuille, użycie pakietu past.builtins może być przesadą, więc zastąpiłem jego użycie w powyższym przykładowym kodzie sprawdzeniem informacji o wersji sys.

Teraz, jeśli masz problem z uzyskaniem interaktywności raw_input lub input, to może dlatego, że Twój terminal na to nie pozwala?

2
smarie 1 kwiecień 2020, 13:41

Możesz to zrobić

al=input("Enter the alphabet")
vowels=['a','e','i','o','u']
if al in vowels:
  print("The alphabet is a vowel")
else:
  print("The alphabet is a consonant")

Nie ma do tego potrzeby pętli, nawet jeśli działa to zgodnie z oczekiwaniami. Wyświetla 5 linii, jak np. Jeśli wprowadzony znak to „e”, jak w podanym przykładzie:

Alfabet jest spółgłoską

Alfabet to samogłoska

Alfabet jest spółgłoską

Alfabet jest spółgłoską

Alfabet jest spółgłoską

1
Nandu Raj 1 kwiecień 2020, 13:09