我该如何制作' uName'在澄清检查后显示用户输入的正确名称?

时间:2016-02-17 03:39:55

标签: python

我是Python的新手,你可以从代码中看出来。首先,我试图让用户输入他们的名字并将其存储在一个全局变量中,我可以在我的代码中访问所有代码...最好命名为uName

在循环周期中发生了什么,它会询问用户“这是你的名字吗?'在他们输入第一个回复之后。如果我点击类型,但是'是'或者'是',它将重新要求他们输入名称。但是,当他们最终点击“是”时,程序会打印出他们输入的第一个名字。

此外,有关代码结构或措辞的任何提示都很有用......

game.py

from decisions import *
import decisions

global globalname
globalname = ''

def gameEngine(uName):

    looper = 0

    while looper == 0:

        print ('You said your name is,  ') + uName + ('...')
        clarifier = raw_input('Is that correct?\n')

        if clarifier == 'yes' or clarifier == 'Yes':    
            namePrinter(answer) 
        else:       
            decisions.userDecisions(username)       

def namePrinter(uName):
    print uName 

gameEngine(answer)

decisions.py

username = ''

def userDecisions(inputs):
    response = raw_input("Please enter your name...\n>>> ")
    return response

answer = userDecisions(username)

2 个答案:

答案 0 :(得分:1)

您遇到的具体问题是您首先通过game.py中的import语句运行decisions.py的内容。通过这个,你已经设置了变量" answer"等于用户输入的第一个名字。

然后你在game.py中调用gameEngine函数,提供"答案"来自decisions.py的变量作为参数,存储在" uName"中。当用户输入另一个名称时,该名称不会存储在任何地方,并且会被以下行引出。

decisions.userDecisions(username)

您可以将该语句的返回值分配给变量,例如" uName",这样可以让您更接近您想要做的事情。

uName = decisions.userDecisions(username)

下一个问题是,当您打印出名称时,您正在打印变量"回答"而不是" uName"。这主要是导致始终打印出名字的问题。

namePrinter(answer)

这可以通过传入" uName"来解决。变量而不是。

namePrinter(uName)

此外,如果您希望最终选择的名称存储在全局变量中,您可以在用户确认名称正确后,将最终用户选择的名称分配给gloabl变量。

globalname = uName

但是,您可能需要注意代码结构的一些部分。

首先,您可能想尝试不使用全局变量。相反,你应该通过使用它的函数传递名称。如果您有其他需要经常访问的播放器信息,您可以创建一个Player类和对象,将该信息存储在一个对象中,该对象可以根据需要传递给函数。

其次,由于userDecisions函数不使用其争论"输入",您可以删除该争论,因为它没有被使用。

第三,您可能需要注意仅通过import语句运行代码。通常,在导入源文件时,应该导入函数,而不是依赖导入来直接运行代码。例如,您可以删除decisions.py的非功能行,而只需在game.py中运行以下命令。

gameEngine(decisions.userDecisions())

我建议您在Python中查找函数和传递参数的一些资源,因为它们可能能够更好地解释基础概念。

答案 1 :(得分:0)

你搞砸了变量及其范围。详细了解他们here

为了简明扼要地提供关于变量范围的观点,请查看以下代码片段:

# This is a global variable
a = 0

if a == 0:
    # This is still a global variable
    b = 1

def my_function(c):
    # this is a local variable
    d = 3
    print(c)
    print(d)

# Now we call the function, passing the value 7 as the first and only parameter
my_function(7)

# a and b still exist
print(a)
print(b)

# c and d don't exist anymore -- these statements will give us name errors!
print(c)
print(d)

关于您的代码,您可能希望了解这些问题:

  1. game.py 模块中无法访问answer变量。
  2. username来电中的decisions.userDecisions(username)变量就是这种情况。
  3. decisions.userDecisions(username)方法中的gameEngine(uName)调用不会将响应存储到任何变量,因此响应将会丢失。
  4. 您正在声明全局变量globalname但不为其分配任何值(当然不是'')。
  5. <小时/> P.S。:我很想为你做功课,但是这可能足以让你了解更多信息。 ;)