【问题标题】:string.find() not finding the first character in Python [duplicate]string.find() 在 Python 中找不到第一个字符 [重复]
【发布时间】:2021-04-17 18:10:00
【问题描述】:

我正在尝试制作一个刽子手风格的游戏,并且它在大多数情况下都有效......我只是无法找到其中的第一个字符(例如,如果这个词像“你好”,我输入了“h”,它不起作用,但如果我输入任何其他字符,它会)

这是我的代码:

import os

def clear():
    os.system("clear")

def chooseWord():
    return input("Player 1, please choose a word: ")

def guessWord():
   return input("Player 2, please guess a character: ")

word = chooseWord().lower()
characters = len(word)
clear()
print(f"The word has {characters} characters!")
chances = 3
print(word)

guessedCorrectly = guessWord().lower()

if word.find(guessedCorrectly):
    print("Hi")
else:
    print("hi")

【问题讨论】:

  • 输出是什么?它返回 -1 还是任何其他整数?
  • 穆雷尼克是正确的。但可以使用if guessedCorrectly in word:,它将返回真或假

标签: python string pycharm


【解决方案1】:

你为什么不试试这个:

if guessedCorrectly in word: 
    print("Hi")
else:
    print("hi")

【讨论】:

    【解决方案2】:

    find 返回出现搜索字符串的字符串中的第一个索引,如果没有,则返回-1。由于字符串索引在 Python 中是从零开始的,如果搜索字符串出现在第一个字符中,find 返回 00 是 false-y。您可以将其显式与 0 进行比较,而不是直接将索引用作条件:

    if word.find(guessedCorrectly) >= 0:
        print("Found this character")
    else:
        print("Didn't find this character")
    

    【讨论】:

      【解决方案3】:

      find() 返回匹配字符串的索引,而不是布尔值。索引0 是错误的,因此当匹配位于字符串开头时,将其视为布尔值将失败。

      由于您不关心索引,请使用in 运算符:

      if guessedCorrectly in word:
      

      【讨论】:

        【解决方案4】:

        word.find 不返回 true 或 false 它返回索引。 Hello 中 H 的索引为 0,恰好映射到 if/else 语句中的 False。尝试使用

        if guessedCorrectly in word:
        

        【讨论】:

          【解决方案5】:

          str.find() 返回字符串中子字符串的第一个索引出现。如果它找不到子字符串,则返回一个。只需更换条件部分。因此,您的代码应该是这样的:

          import os
          
          # def clear():
          #     os.system("clear")
          
          def chooseWord():
              return input("Player 1, please choose a word: ")
          
          def guessWord():
             return input("Player 2, please guess a character: ")
          
          
          if __name__=="__main__":
              word = chooseWord().lower()
              characters = len(word)
              # os.system("clear")
              print(f"The word has {characters} characters!")
              chances = 3
              # print(word)
          
              guessedCorrectly = guessWord().lower()
              print(guessedCorrectly)
          
              if not (word.find(guessedCorrectly)==-1): #that means there is a substring match!!!
                  print("Yes")
              else:
                  print("no")
          

          【讨论】:

          • 我认为你的意思是“返回负数”
          • not(xxx == -1)可以简化为xxx != -1
          • 是的,但是它们没有区别,这只是一种可读的方式:stackoverflow.com/a/5782597/4781513
          • 我猜这只是个人风格,但我总是来自!=not 更具可读性
          猜你喜欢
          • 2021-01-04
          • 1970-01-01
          • 2018-11-21
          • 2011-01-18
          • 1970-01-01
          • 1970-01-01
          • 2015-05-12
          • 1970-01-01
          • 2021-07-29
          相关资源
          最近更新 更多