导入并实现python模块

时间:2018-10-01 05:52:20

标签: python

我正在学习Python,并且正在通过创建一个简单的游戏进行练习:石头,纸,剪刀。我创建了两个名为random_number.pyro_pa_sc.py的Python模块。第一个包含生成随机字符串的代码,第二个包含游戏本身。

这是random_number.py

def r_p_s():
    import random
    random.choice([1, 2, 3])
    if random.choice([1, 2, 3]):
         return "r"
    if random.choice([1, 2, 3]):
         return "p"
    if random.choice([1, 2, 3]):
         return "s"

这是ro_pa_sc.py

#!/usr/bin/python
import random_number
def game():
    random_number.r_p_s()
    print r_p_s()
 if __name__ == "__main__":
    game()

但是,当我尝试从Bash的命令行运行ro_pa_sc.py时,出现以下错误消息:

错误1:      File "ro_pa_sc.py", in module "game()"

错误2:      File "ro_pa_sc.py", in game print r_p_s()

我不知道可能是什么错误,因为我检查了导入模块的时间,并确保语法正确。似乎random_number模块可能是问题所在,但我又没有不知道为什么。

谁能告诉我我的错误在哪里?

2 个答案:

答案 0 :(得分:1)

文件中有几个错误。

首先,您将if __name__ == "__main__":缩进不正确。注意if语句前面的多余空间,将其删除。

第二,您将random_number模块导入了命名空间,但没有直接将其导入r_p_s()。因此,当您直接在r_p_s()函数中调用print时,它将返回错误。因此,要解决此问题,您可以将ro_pa_sc.py中的打印功能更改为print random_number.r_p_s(),也可以添加from random_number import r_p_s来解决所有问题。

import random_number
def game():
    random_number.r_p_s()
    print random_number.r_p_s() # fix here
if __name__ == "__main__": # fix here
    game()

注意: 使用import <module>语句导入模块时,只能使用模块的名称空间访问模块内的功能。因此,所有函数都必须具有<module>.function()。为了避免在每个函数的前面添加名称空间,可以使用from语句。 from <module> import *,其中*表示模块中的所有功能。但是,当许多模块共享相同的函数名称时,请务必小心不要引起名称空间冲突。

答案 1 :(得分:1)

您的var links = $('a[href*="vimeo.com"]'); if (links.length === 0) { var nextButton= $('#nav td.cur > a.fl') .parent() .next() .find('a.fl'); nextButton.trigger('click'); } links.click(); 函数将始终返回r_p_s(),因为它不将随机数与r进行比较,而是从列表中选择并返回[1, 2, 3]。试试这个:

random_number.py:

r

ro_pa_sc.py:

def r_p_s():
    import random
    rand = random.choice([1, 2, 3])
    if rand == 1:
        return "r"
    if rand == 2:
        return "p"
    if rand == 3:
        return "s"