【问题标题】:Problem with my hangman game我的刽子手游戏有问题
【发布时间】:2010-10-28 12:01:00
【问题描述】:

我正在尝试学习 python,我正在尝试一个刽子手游戏。但是当我尝试将用户的猜测与单词进行比较时,它不起作用。我错过了什么?

import sys
import codecs
import random

if __name__ == '__main__':
    try:
        wordlist = codecs.open("words.txt", "r")
    except Exception as ex:
        print (ex)
        print ("\n**Could not open file!**\n")
        sys.exit(0)

    rand = int(random.random()*5 + 1)
    i = 0

    for word in wordlist:
        i+=1
        if i == rand:
            print (word, end = '')
            break

    wordlist.close()

    guess = input("Guess a letter: ")
    print (guess) #for testing purposes

    for letters in word:
        if guess == letters:
            print ("Yessssh")

#guessing part and user interface here

【问题讨论】:

  • 你的代码做错了什么?什么不起作用?
  • 不确定你的具体错误是什么,但这里有一些关于重构的提示: - 使用 random.randint() 而不是 random.random() - 要获取单词列表,你可以使用 open("words.txt","r").readlines() - 而不是最后一个 for 循环,你只需说“如果猜测单词”
  • 我赞同 RexE 的评论。你的代码对我来说很好。你能详细说明什么不起作用吗?是有错误信息,还是意外输出的问题?
  • 哎呀抱歉,是的,我从劳伦斯那里得到了答案,但这是一个意外输出错误,其中 for 字母在 word 循环中
  • 好的。顺便说一句,根据您的代码风格,我猜您来自 Java(或相关语言)背景。随着您对 Python 的习惯用法越来越熟悉,您会为自己的代码如此简洁明了而感到高兴:)

标签: python python-3.x


【解决方案1】:

在“for word in wordlist”循环中,每个单词都以换行符结尾。尝试添加word = word.strip() 作为下一行。

顺便说一句,您的最后一个循环可以替换为:

if guess in word:
    print ("Yessssh")

额外提示:添加“调试打印”时,使用 repr 通常是个好主意(尤其是在处理字符串时)。例如,您的线路:

print (guess) #for testing purposes

如果你写的话可能会更有用:

print (repr(guess)) #for testing purposes

这样,如果guess 中有奇怪的字符,您会更容易在调试输出中看到它们。

【讨论】:

    【解决方案2】:

    这就是我为我的刽子手游戏所做的:

         for x in range(0, len(secretword)):
               if letter == secretword[x]:
                    for x in range(len(secretword)):
                        if secretword[x] in letter:
                             hiddenletter = hiddenletter[:x] + secretword[x] +hiddenletter[x+1:]
    
         for letter in hiddenletter:
              print(letter, end=' ')
    

    secretword 是用户试图猜测的隐藏词。 hidden letter 包含单词中“_”的数量:即 hiddenletter = " _ " * len(secretword)

    这将用正确猜测的字母替换空白,然后在正确的位置显示带有字母的下划线 我尽力了……

    【讨论】:

      猜你喜欢
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 2019-02-17
      相关资源
      最近更新 更多