2015-06-12 3 views
-4

Вы бы могли помочь с кодом ниже? Кажется, я не могу запустить его. Я новичок в python, поэтому буду благодарен за некоторые советы. Кроме того, есть ли способ проверить, есть ли в списке только буквы?проверка наличия в списке только букв. Python

import random 

x = random.choice([9, 10]) 

def loop(): 
    if x < 10 : 
     print "Your current ticket number is %d " % x 
    elif x >= 10 : 
     main() 

def main(): 
    print "Your current ticket number is %d and will be processed later. Please enter you're name and surname:" % x 
    while True: 
     try: 
      s = raw_input('> ') 
      return s.split('') 
      if s.isalpha(): 
       name = s[0] 
       surname = s[-1] 
       print "Thank you, %s %s, you will be contacted soon" % (name, surname) 
     except ValueError: 
      print "Numbers are not accepted" 
     if not tryAgain(): 
      break 

def tryAgain(): 
    s = raw_input('Try again (Y/n)? ') 
    return 'yes'.startswith(s) or 'y'.startswith(s) 

loop() 
+2

* Я не могу заставить его работать * - Не могли бы вы сказать, что это происходит, когда вы пытаетесь.? (И как вы пытаетесь - если есть трассировка стека, отправьте его!). Это немного трудно помочь, не зная, что вы пытаетесь, и что происходит, когда вы это делаете. –

+1

* 'Есть ли способ проверить, есть ли в списке только буквы? "* Да, и вы уже используете его' s.isalpha() ' – CoryKramer

+0

@CoryKramer, хорошо, потому что я думал, что он применим только к строкам. –

ответ

0

Вы вводите строку с пробелом («первый последний»), которые isalpha() флаги как небуквенные символы.

Попробуйте это:

s = raw_input('> ') 
names = s.split() 
good_input = True 
for name in names: 
    if not name.isalpha(): 
     good_input = False 
     break 

Вы должны разделить пробелом, а затем проверить с каждой строкой (которая не содержит пробел). string.split() сделает это без параметров.

Как только вы получите флаг для «good_input», вы можете использовать его, чтобы делать все, что захотите.

+0

Литералы на Python - это «Истина» и «Неверно». – CoryKramer

+0

Кроме того, как только 'good_input' является' False', вы должны «ломаться», нет никакого смысла в продолжении итерации. – CoryKramer

+1

Также весь этот цикл может быть 'good_input = all (name.isalpha() для имени в именах)' – CoryKramer

0

У вас есть несколько проблем:

return s.split('') 

выше линии генерации ValueError, потому что пустая строка не является допустимым разделителем. Также почему return? Вы никогда не дойдете до остальной части кода, даже если вы исправите разделитель. try скрывает ошибку кодирования, потому что происходит возврат ValueError.

Вместо этого используйте:

s = s.split() 

Это возвращает список имен. Но потом, вы не можете использовать .isalpha() в списке, так что используйте:

if all(n.isalpha() for n in s): 
Смежные вопросы