首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python课程教学中的Hangman实现

Python课程教学中的Hangman实现
EN

Code Review用户
提问于 2017-04-30 22:44:16
回答 2查看 219关注 0票数 6

我正在教授Python速成班,我认为汉格曼的表演会很有成效。

我有一个最终的产品,我将用我在课程中的时间来努力,我想知道什么可以重构或实现,以帮助从我自己,中级水平到绝对初学者的信息交换。

代码语言:javascript
复制
from random import choice
import os


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


def play_again():
    play_again = input("\nPlay again? Y/n ").lower()

    if play_again != 'n':
        clear()
        game()

    else:
        print("\n\n\n\nCatch ya later!\n\n\n\n")


def get_secret_word():
    words = ['angry', 'beautiful', 'brave', 'careful', 'charismatic', 'clever',
             'creative', 'cute', 'dangerous', 'exciting', 'famous', 'friendly',
             'happy', 'interesting', 'lucky', 'profound', 'popular', 'rich',
             'thin', 'young']

    secret_word = choice(words)
    return secret_word


def get_guess(bad_guesses, good_guesses, secret_word):
    while True:
        guess = input("Guess a letter: ").lower()

        if guess == '':
            print("What was that?")
            board(bad_guesses, good_guesses, secret_word)

        elif len(guess) != 1:
            input("You can only guess a single letter!")
            board(bad_guesses, good_guesses, secret_word)

        elif guess in bad_guesses or guess in good_guesses:
            input("You've already guessed that letter!")
            board(bad_guesses, good_guesses, secret_word)

        elif not guess.isalpha():
            input("You can only guess LETTERS!")
            board(bad_guesses, good_guesses, secret_word)

        else:
            return guess


def board(bad_guesses, good_guesses, secret_word):
    clear()
    print('** Strikes: {}/8 **'.format(len(bad_guesses)))
    print('')

    for guess in bad_guesses:
        print(guess, end=" ")
    print('\n\n')

    for guess in secret_word:
        if guess in good_guesses:
            print(guess, end=" ")
        else:
            print('_ ', end=" ")

    print('')


def game():
    secret_word = get_secret_word()
    good_guesses = []
    bad_guesses = []
    game_done = False

    while not game_done:
        board(bad_guesses, good_guesses, secret_word)
        guess = get_guess(bad_guesses, good_guesses, secret_word)
        if guess in secret_word:
            good_guesses.append(guess)
            found = True
            for guess in secret_word:
                if guess not in good_guesses:
                    found = False
            if found:
                print("\nYou win!\n")
                print("The secret word was {}.".format(secret_word.upper()))
                game_done = True

        elif guess not in secret_word:
            bad_guesses.append(guess)
            if len(bad_guesses) == 8:
                clear()
                print("\n **  ENGHH!  ** ")
                print("\nStrike ! You lost!")
                print("\nThe secret word was {}".format(secret_word.upper()))
                game_done = True

        if game_done:
            play_again()

        else:
            board(bad_guesses, good_guesses, secret_word)


game()
EN

回答 2

Code Review用户

发布于 2017-05-01 04:41:41

首先,恭喜你教Python!我真希望有更多与之相关的车祸诅咒。

现在,关于您的代码:

  • 您有循环(while / for) -好的
  • 你给学生们介绍了一个数据结构(列表)-好的
  • 你有功能-好的
  • 你有一些外部模块-好的
  • 你有条件-好的

一见钟情就好了。我不喜欢你的代码的地方(我想我对语言一无所知):

  1. 您有一个名为play_again()的函数和一个同名的变量。这可能会误导你。
  2. os.system('clear')是特定于平台的,只在OSX / Linux上工作。在窗户上,你会使用os.system('cls')。很高兴在代码中的某个地方对此进行评论。
  3. 你没有记录你的任何功能。如果一个学生没有注意(经常发生),并试图在家里重复,它可能记不起你说的每句话。尝试将文档字符串添加到函数中。
票数 6
EN

Code Review用户

发布于 2017-05-01 03:38:04

你的代码可以有很多改进..。以下是我认为你可以改进的地方。

  1. 如果是速成班,你就不想使用os了。事实上,我不认为os对您的程序tbh有多大影响。
  2. 嵌套的if。尽量不要使用它们,因为它们使代码看起来更难理解和阅读!
  3. 您用于猜测的验证写得很好,但是从初学者的角度来看,验证可能很难理解,您不认为吗?尤其是在代码中有这么多事情发生的情况下.
  4. 理想情况下,拥有更多的列表很难跟踪,对于这样一个简单的游戏,我认为没有必要为'good_guesses‘和’bad_猜测‘单独列出一个列表。相反,您可以列出一个名为“used”的列表,以及一个名为“错误”的变量。“错误”将是他们猜错了多少猜测的计数器,“使用”将存储他们使用过的所有有效字母。

你说这是为初学者准备的速成班..。那么你的理想目标应该是“尽量简单!”为学生(S)。我觉得你做了相反的事情,但是你仍然可以改进它。

PS:如果你想知道初学者的好代码(容易理解和简单),你应该查看几个初学者的Python书籍。他们通常会在一个章节里谈论刽子手。

,我不是要你抄袭他们!相反,了解一下他们是如何解决这个问题的!

我可能错过了一些改进,所以我道歉,如果我没有谈到他们!

我尊重你教初学者,我希望你做得很好!祝你好运!)

票数 5
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/162198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档