Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何不断要求用户输入有效字符?_Python - Fatal编程技术网

Python 如何不断要求用户输入有效字符?

Python 如何不断要求用户输入有效字符?,python,Python,我正在写一个叫做hangman.py的程序。在我的程序中,用户不能在我的输入中输入“?”或空白。 例如,用户不能输入:“?xx?xx?”或“我该怎么做”。但用户可以输入类似“ldkdjgg”或“stop-go”的内容。 如果用户输入诸如“?xxxxx?”或“我该怎么做”之类的内容,我必须不断询问用户“请输入一个不包含以下内容的待猜单词?”?或空白:“。 我的问题是如何打印“请输入一个不包含字符的待猜单词?”?或空白:“直到用户停止在输入中输入“?”或空白 这是我的想法,但我在打印“请输入一个不包

我正在写一个叫做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: ")