Python 如何不断要求用户输入有效字符?
我正在写一个叫做hangman.py的程序。在我的程序中,用户不能在我的输入中输入“?”或空白。 例如,用户不能输入:“?xx?xx?”或“我该怎么做”。但用户可以输入类似“ldkdjgg”或“stop-go”的内容。 如果用户输入诸如“?xxxxx?”或“我该怎么做”之类的内容,我必须不断询问用户“请输入一个不包含以下内容的待猜单词?”?或空白:“。 我的问题是如何打印“请输入一个不包含字符的待猜单词?”?或空白:“直到用户停止在输入中输入“?”或空白 这是我的想法,但我在打印“请输入一个不包含内容的单词以供猜测”时遇到问题?或空白:“如果在输入中输入“?”或空白Python 如何不断要求用户输入有效字符?,python,Python,我正在写一个叫做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
您可以检查set(“?”
是否与secret\u 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")
演示:
或者使用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\u单词翻译(tbl)
将删除任何空格或?
因此,如果翻译后长度相同,我们知道用户没有输入任何空格,如果长度不同,则我们知道用户输入了空格。您可以使用ord
作为键,空字符串作为值,向tbl
dict添加任意多的坏字符。类似的内容应:
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: ")
更具可读性的解决方案:
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 '?':")
因此,任何包含单个空格或“?”的输入都应该被拒绝?是的。如果我的输入中有“?”或空白,我必须打印(“请输入一个不包含?或空白的待猜测单词:)。但如果我输入“?”或空格,我就不能打印该语句;您关心数字或其他空白字符吗?您可以免费拒绝
集合(string.lowercase)
中未设置的任何内容。我可以使用/-和其他,但不能使用空格和问号。如何在用户输入有效输入之前一直询问用户?@stephenblack,这将一直询问,直到用户输入正确的数据为止!你的权利。我是对的。但是,如果我将print(“无效输入”)更改为print(“请输入一个不包含?或空白:”)的待猜单词,它为什么会替换其中两个(“请输入一个不包含?或空白:”)语句?我想将print(“无效输入”)更改为print(“请输入一个不包含?或空白:”)的待猜单词,输出为一次打印(“请输入一个不包含?或空白:”) statement@stephenblack,因为我们已经在显示带有输入的消息,打印无效输入用于告诉用户他们出错,如果用户输入了错误的输入,则输入消息将再次显示,不需要打印。我尝试了您的方法,但我认为它只需继续打印(“请不间断地输入一个不包含空格或“?”:”)的字符串。@stephenblack Yes。它将一直打印该字符串,直到输入有效字符串为止。
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 '?':")
secret_word = " "
while set(secret_word) & set("? "):
secret_word = input("Please enter a word to be guessedthat does not contain ? or white space: ")