2015-05-12 2 views
0

Я пишу программу под названием hangman.py. В моей программе пользователь не может ввести «?» или пробелы в моем входе. Например, пользователь не может ввести: '? xx? xx?' или «Как это сделать», но пользователь может ввести что-то вроде «ldkdjgg» или «stop-go». Если пользователь вводит что-то вроде «? xxxxx?» или «Как это сделать?» Я должен постоянно спрашивать пользователя. «Пожалуйста, введите слово, которое нужно угадать, которое не содержит? или пустое пространство: ». Мой вопрос: как напечатать« Пожалуйста, введите слово, которое нужно угадать, которое не содержит? или пробел: «пока пользователь не перестанет вводить?»? или пробелы на входе.Как я могу просить пользователя ввести действительные символы?

Это моя идея, но у меня возникли проблемы с печатью «Пожалуйста, введите слово, которое нужно угадать, которое не содержит? или пробел: «если я вхожу в '?' или пробелы в моем входе

print("Please enter a word to be guessedthat does not contain ? or white space: ",end='') 
while True: 
    try: 
     secret_word=input() 
    except '?' or 'print()' 
     print("Please enter a word to be guessedthat does not contain ? or white space: ",end='') 
     continue 
    else: 
     break 
+0

Таким образом, любой вход, который содержит хотя бы один пробел или должны быть отклонены? – 101

+0

Да. Если у меня есть? или пробелы в моем вводе Мне нужно напечатать («Пожалуйста, введите слово, которое нужно угадать, которое не содержит? или пробел :). Но я не могу напечатать это утверждение, если я введу '?' или пробелы. – stephenblack

+0

Вы допускаете знаки препинания: вам не нужны цифры или другие символы пробелов? Вы можете бесплатно отбросить все, что не в 'set (string.lowercase)'. – smci

ответ

0

Вы можете проверить, если set("? ") пересекается с secret_word, если он делает введенные пользователем, по крайней мере один пробел или:

while True: 
    secret_word = input("Please enter a word to be guessedthat does not contain ? or white space: ") 
    if not set("? ").intersection(secret_word): 
     break 
    else: 
     print("Invalid input") 

Демо:

Please enter a word to be guessedthat does not contain ? or white space: ? 
Invalid input 
Please enter a word to be guessedthat does not contain ? or white space: foo bar 
Invalid input 
Please enter a word to be guessedthat does not contain ? or white space: foo 

Или используйте str.translate и сравните длину после удаления любых пробелов и?:

tbl = str.maketrans({ord("?"):"",ord(" "):""}) 
while True: 
    secret_word = input("Please enter a word to be guessedthat does not contain ? or white space: ") 
    if len(secret_word.translate(tbl)) == len(secret_word): 
     break 
    else: 
     print("Invalid input") 

secret_word.translate(tbl) удалит любые пробелы или ?, так что если длина будет такой же после перевода, мы знаем, что пользователь не вводил никаких, если он отличается, то мы знаем, что у них есть. Вы можете добавить столько плохих символов, сколько хотите, для tbl, используя ord в качестве ключа и пустую строку в качестве значения.

+0

Как продолжать спрашивать пользователя, пока пользователь не введет действительный ввод? – stephenblack

+0

@stephenblack, это будет продолжать запрашивать, пока пользователь не вводит правильные данные. –

+0

Извините, ваше право. Я прав, но если я сменю печать («Недействительный ввод) для печати («Пожалуйста, введите слово, которое должно быть угадано, что оно не содержит? или пробел:»), как он вытесняет два из («Пожалуйста, введите слово, которое предполагается, что оно не содержит? или пробел:»)? – stephenblack

0

Что-то, как это должно работать:

bad_strings = [' ', '?'] 
secret_word = ' ' 

while any([s in secret_word for s in bad_strings]): 
    secret_word = input("Enter a word that doesn't contain '?' or spaces: ") 
+0

Спасибо за помощь! – stephenblack

2

чуть более читаемым решение: '?'

user_input = raw_input("Please enter a string that doesn't contain spaces or '?':") 

while " " in input or "?" in input: 
    user_input = raw_input("Please enter a string that doesn't contain spaces or '?':") 
+0

Я пробовал ур метод, но я думаю, что он просто продолжает печатать («Пожалуйста, введите строку, которая не содержит пробелов или«? »:»), Но без остановки. – stephenblack

+0

@PadraicCunningham отредактировал. Спасибо. – TeneCursum

+0

@stephenblack Да. Он будет продолжать печатать, пока не будет введена допустимая строка. – TeneCursum

0
secret_word = " " 
while set(secret_word) & set("? "): 
    secret_word = input("Please enter a word to be guessedthat does not contain ? or white space: ") 
Смежные вопросы