【问题标题】:How do I keep asking the user to input the valid characters?如何不断要求用户输入有效字符?
【发布时间】:2015-07-24 01:23:33
【问题描述】:

我正在编写一个名为 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(string.lowercase) 中的内容。
  • 我可以使用 / - 和其他但不能使用空格和问号。

标签: python


【解决方案1】:
secret_word = " "
while set(secret_word) & set("? "):
    secret_word = input("Please enter a word to be guessedthat does not contain ? or white space: ")

【讨论】:

    【解决方案2】:

    您可以检查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) 将删除任何空格或?,因此如果翻译后长度相同,我们知道用户没有输入任何空格,如果不同,则我们知道他们有。您可以使用 ord 作为键和空字符串作为值,将任意数量的坏字符添加到 tbl dict。

    【讨论】:

    • 如何在用户输入有效输入之前一直询问用户?
    • @stephenblack,这会一直询问,直到用户输入正确的数据
    • 对不起!你的权利。我对。但是如果我将 print("Invalid input) 更改为 print("Please enter a word to be guessedthat does not contain ? or white space:") 它怎么会取代两个 (" Please enter a word to be guessedthat without ?还是空格:") 语句?
    • 我想把 print("Invalid input) 改成 print("请输入一个不包含 ? 或空格的被猜词:"),输出为一个 print("请输入一个不包含 ? 或空格的待猜词:") 语句
    • @stephenblack,因为我们已经用输入显示了该消息,打印无效输入在那里告诉用户他们犯了错误,如果用户输入错误的输入,那么输入消息将被显示再次,不需要打印
    【解决方案3】:

    一个更易读的解决方案:

    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 '?':")
    

    【讨论】:

    • 我试过你的方法,但我认为它只是不停地打印(“请输入一个不包含空格或'?'的字符串:”)不间断。
    • @stephenblack 是的。它将继续打印,直到输入有效的字符串。
    【解决方案4】:

    这样的事情应该可以工作:

    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: ")
    

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 1970-01-01
      • 2013-10-01
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 2021-08-25
      • 1970-01-01
      相关资源
      最近更新 更多