2014-06-05 4 views
2

제가 작성한 Python 2.7 코드에 문제가있어서 여기에서 친구의 답을 찾을 수없는 것 같습니다. 나는 파이썬과 프로그래밍 전반에 대한 완전한 멍청한 의견이다. 여기에 코드입니다 :Python이 'if 문'을 따르지 않습니다.

import time 
import random 
a = ['Spooky','Sexy','Snazzy','Random','Wild','Smoggy','Enchanting','Quick','Acoustic','Irritating','Annoying','Thirsty','Fierce','Embarassed','Touch'] 
b = ['Kurtis','Tisa','Randy','Theda','Dani','Beulah','Dallas','Jeannette','Vera','Kristopher','Donna','Wanda','Sergio','Betsy','Holly'] 
c = ['1873','123','448','8781','1284','3','45','34'] 
d = ['Hicks','Ryan','Houston','Cunningham','Ortiz','Baker','Erickson','Pittman','Patrick','Blake','Allison','Taylor','Harper','Romero'] 
random.shuffle(a) 
random.shuffle(b) 
random.shuffle(c) 
random.shuffle(d) 
a = raw_input('Would you like a random username? ') 
if a == 'Yes' or 'yes' or 'Yea' or 'yea': 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print a[3] + b[2] + d[5] + c[4] 
else: 
    print "I didn't have a name for you anyways" 

내 문제는 프로그램이 다른 뭔가를 입력 할 경우에도 임의의 이름을 생성한다는 것입니다 후 '예'또는 '예'또는 '네'또는 '참'. 미리 감사드립니다.

+0

을 앞으로 게시물 본문에 코드를 포함시켜주십시오. 나는 당신을 위해 이번에 그것을 포함하도록 편집했습니다. – arshajii

+3

이것은'또는'이 파이썬에서 어떻게 작동하는지에 대한 일반적인 오해입니다. 중복 된 질문이지만 무엇을 검색해야할지 모르겠습니다. –

+2

거의 모든 언어에서 논리 OR이 작동하는 방식에 대한 일반적인 오해가 있습니다. – Adam

답변

0

코드는 항상 문자열이 비어 있지 않은 때문에 if 문을 입력 한 결과, 이는 다음 if a == 'Yes' 다음 'yes' 다음 'Yea', 'yea'을 확인합니다.

대신, 같은 if a.lower().startswith('y'):if 문을 변경 :

import time 
import random 
a = ['Spooky','Sexy','Snazzy','Random','Wild','Smoggy','Enchanting','Quick','Acoustic','Irritating','Annoying','Thirsty','Fierce','Embarassed','Touch'] 
b = ['Kurtis','Tisa','Randy','Theda','Dani','Beulah','Dallas','Jeannette','Vera','Kristopher','Donna','Wanda','Sergio','Betsy','Holly'] 
c = ['1873','123','448','8781','1284','3','45','34'] 
d = ['Hicks','Ryan','Houston','Cunningham','Ortiz','Baker','Erickson','Pittman','Patrick','Blake','Allison','Taylor','Harper','Romero'] 
random.shuffle(a) 
random.shuffle(b) 
random.shuffle(c) 
random.shuffle(d) 
a = raw_input('Would you like a random username? ') 
if a.lower().startswith('y'): 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print 'PROCESSING..' 
    time.sleep(.5) 
    print a[3] + b[2] + d[5] + c[4] 
else: 
    print "I didn't have a name for you anyways" 
+0

이 질문에 '임의의 사용자 이름을 사용 하시겠습니까?'라고 대답하십시오. 이 대답은 '예스!' 문자열의 시작 부분에 'y'가 있는지 확인하는 것이 좋은 생각인지 스스로에게 질문하십시오. – Matthias

6

or의 각 측이 자신의 독립적 인 표현이다

if a in ['Yes', 'yes', 'Yea', 'yea']: 

을보십시오. 그래서 만약 a == 'Yes'이 거짓이면, 파이썬은 a == 'yes'이 참인지를 보려고하지 않을 것입니다. 'yes'이 맞는지 확인합니다. 비어 있지 않은 문자열이 모두 true로 간주되기 때문입니다. 조건이 잘못되면

2

당신의, 당신의 코드는 다음에 해당하지

if a == 'Yes' or a == 'yes' or a == 'Yea' or a == 'yea': 
3

해야한다 :

if (a == 'Yes') or ('yes') or ('Yea') or ('yea'): 
    ... 

bool('yes')이 True - 비어 있지 않은 문자열이 True로 간주됩니다

0

if a == 'Yes' or 'yes' or 'Yea' or 'yea':을 쓸 때, if (a == 'Yes') or ('yes') or ('Yea') or ('yea'):에 indentical하기 때문에. 'yes'/ 'yea'/ 'yea'는 부울 값으로 평가됩니다.

2

'또는'연산자 당신이 그것을하지 :

당신이있을 때 생각하는 방법을 작동하지 않습니다

if a == 'Yes' or 'yes' or 'Yea' or 'yea':

임의의 이름을 생성됩니다 프로그램 중 하나가 다음과 같은 경우 해당 :

a == 'Yes' 'yes' 'Yea' 'yea'

은 '예'또는 '네'같은 값은 항상 프로그램 줘야 사실이다

항상 임의의 이름을 생성합니다.

다른 대답은 문제에 대한 좋은 해결책입니다.

if a.upper()[0] == 'Y'

사용자가 '네'를 입력하는 경우에 편리 할 수있는 'Y'또는 'Y'로 시작하는 모든 응답을 받아 들일 것 : 옛날 방식은 같은 것을했다!

+0

OP가 시스템에서 솔루션을 구현한다면, 나는 그를 칭찬 할 것입니다! 나는 "yup"또는 "yepp ..."을 입력 할 수 있기를 원하며 프로그램이 여전히 무슨 뜻인지 안다. – Kayla

0
import string  
if a.lower().startswith("y"): 
관련 문제