在Python中使用全局变量和函数

时间:2019-05-12 03:01:48

标签: python

我正在使用python函数在python中进行基于文本的简单单词猜测。但是我在函数中定义的局部变量遇到问题,我不知道哪种方法是获取特定局部变量的数据或从另一个函数对另一个函数中定义的局部变量执行操作的正确方法,是否使用global关键字。

我可以使用global,但一些经验丰富的极客建议您避免使用。什么是做同样的正确方法。它没有播种ask。请向我建议一些最佳做法,以完成此操作。

import random
def get_random():
    random_word = random.choice(open('sowpods.txt', 'r').read().split())
    return(random_word)
def board():
    hidden_word = get_random()
    print("Welcome to Hangman!")
    place = ["_" for i in list(hidden_word)]
    print(" ".join(place))
    ask = input("Guess the letter.  ").upper()
    return(ask)

def asking_letters(ask):
    return(ask)

get_random()
board()
asking_letters(ask)

P.S。我是一个初学者,我对OOP和功能有疑问。

3 个答案:

答案 0 :(得分:0)

您获得的建议非常合理:您应尽可能避免使用global。要使文件作用域成为全局变量,您只需在所有函数/类之外定义变量。不过,看看您的代码,看来您要完成的所有操作 都应由board()函数处理。看来您需要尝试使用循环重复询问并保持得分。

但是,要回答您的明确问题,请考虑以下示例:

import random

myList = []

def get_random():
    random_word = random.choice(open('sowpods.txt', 'r').read().split())
    return(random_word)

def addWordToList():
    word = get_random()
    myList.append(word)

print myList # Should print []

for i in range(10):
    addWordToList();

print myList # Should print a list with 10 words from sowpods.txt

在这里,您可以看到我每次打电话给myList时都更新了addWordToList()

答案 1 :(得分:0)

您的assing_letters目前不执行任何操作。我认为您想重构板载代码,但不确定:

import random
def get_random():
    random_word = random.choice(open('sowpods.txt', 'r').read().split()])
    return(random_word)
def board():
    hidden_word = get_random()
    print("Welcome to Hangman!")
    place = ["_" for i in list(hidden_word)]
    print(" ".join(place))

def assing_letters():
    ask = input("Guess the letter.  ").upper()
    return(ask)

get_random()
board()
ask=assing_letters()

print(ask)

答案 2 :(得分:0)

代码注释:

  1. 您不需要在'()'中包含返回的变量
  2. 对于小脚本和知道自己在做什么,使用全局变量非常合适
  3. 您不必再次调用get_random,因为它已经在board内部被调用
  4. assing_letters在这种情况下是没有用的!

我猜正确的代码可能是这样的:

import random


def get_random():
    """Return a random word from ``sowpods.txt`` file"""
    random_word = random.choice(open('sowpods.txt', 'r').read().split())
    return random_word


def play():
    """Start the game:

    Takes an input word from the user then check if he guessed the random word or not"""

    hidden_word = get_random()
    print("Welcome to Hangman!")
    place = ["_" for i in list(hidden_word)]
    print(" ".join(place))
    user_guess = input("Guess the letter.  ").upper()

    if user_guess == hidden_word:
        return "You guessed it right!"
    return "You failed!"


play() # start the game