【问题标题】:How to make function work with no parameters?如何使函数在没有参数的情况下工作?
【发布时间】:2015-10-16 03:33:02
【问题描述】:

例如,如果我想输入一个像“鸭子”这样的字符串,我需要函数来拼出:

d
u
c
k

但是没有参数——我该怎么做?

def spell():
    '''Returns every character in a word or phrase'''
    print(input('Enter a word: '))
    for n in range(len(n)):
        print(n)

我试图让上面的代码工作,但我遇到了麻烦,因为我尝试的所有操作都提示了一条与未定义变量有关的错误消息。我应该如何更改我的代码?

【问题讨论】:

  • for n in range(len(raw_input('Enter a word: ')))
  • @zero 添加 python-3.x 标签很好,但您不需要添加“我目前正在使用 Python 3”行。标签本身就足够了。

标签: python function python-3.x parameters definition


【解决方案1】:

使用str.join的另一种方法-

def spell():
    '''Returns every character in a word or phrase'''
    print('\n'.join(input('Enter a word: ')))

【讨论】:

    【解决方案2】:

    你做错了一些事情。

    def spell():
        '''Returns every character in a word or phrase'''
        word = raw_input('Enter a word: ')
        for i in word:
            print(i)
    

    如果您使用的是 Python3,则必须将 raw_input 更改为 input,因为 input 在 Python3 中不存在,其工作方式类似于 raw_input

    【讨论】:

    • 你怎么知道它是 Python 3? :)
    • 实际上“但是我遇到了麻烦,因为我尝试的所有操作都提示了一条与未定义变量有关的错误消息”让我想起了在 Python2 中使用 input 而不引用字符串时遇到的错误;)
    • @rofls 是的,你会在 2 中得到一个名称错误,其中 input 与 OP 描述的错误非常相似。
    • 是的。 OP 确实提到了一个错误,但我认为它更像 n 是未定义的。在 OP 回来之前很难说
    • 如果 OP 引用了字符串,那么 2 将在 for n in range(len(n)) 处引发 UnboundLocalError,变量 (n) 在赋值之前引用。
    【解决方案3】:

    你的问题在这里:

    for n in range(len(n))
    

    具体问题在于,此时 n 尚未分配,因此虽然它作为 迭代器 (for n) 是有效的,但它在 len(n) 部分失败声明。

    解决方法是首先确保您为这个变量分配了一些东西,或者,在一个有效的对象上使用您的迭代器,例如:

    def spell():
        '''Returns every character in a word or phrase'''
        n = input('Enter a word: ')   # assign the input to 'n' 
        for n in range(len(n)):
            print(n)
    

    (我可能会使用不同的变量名称,因为您的迭代器使用相同的名称并且您的输入可能会造成混淆)

    或者你可以这样做:

    def spell():
        print [n for n in range(len(input('Enter a word: ')))]
        """
        *for python 2.x:
           print [n for n in range(len(raw_input('Enter a word: ')))]
        *to return a list of the letters, do:
           return [n for n in range(len(raw_input('Enter a word: ')))]
        """
    

    【讨论】:

    • @JavierBuzzi 你怎么知道 OP 正在使用 python 3?
    • 他/她用input()代替raw_input()print()代替print 'stuff here'
    • 实际上,@DavidZemens, raw_input 在 Python3 中变成了 input,我相信 :)
    • @JavierBuzzi input print('stuff') 在 python 2 中都是有效的,所以你在假设 OP 的代码并告诉我我的代码不会基于该假设运行。让OP澄清这些事情可能会更好......
    • @JavierBuzzi 发生错误是因为您没有在输入字符串周围加上引号,它与需要导入 input 函数无关。
    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多