Python "Invalid Syntax" 在 IDLE 中调用函数时出错

Python "Invalid Syntax" error while calling a function in IDLE

我正在尝试编写一个生成随机数字字符串的程序,其长度基于用户输入。我用 Sublime Text 编写它,它与 SublimeREPL 完美配合,但我随后将其置于 IDLE 状态并尝试 运行 它并抛出无效语法错误。

import string
import random

# Random Number Password Generator


def digit_password(length):
    final = []
    while length > 0:
        final.append(random.choice(string.digits))
    length -= 1
    result = ''.join(final)
    return result


length = int(raw_input("How long will this password be? "))
print digit_password(length)

当我调用函数时,它总是给我无效的语法错误,特别是 "digit_password" 名称。它在 sublime text 中工作,但在 IDLE 中不起作用。有谁知道为什么会这样?

如果相关,我正在使用 python 3.6.4 shell。

打印调用没有括号。 Python 3 需要 print 构造为 print(item).

将最后一行更改为:

print(digit_password(length))

Ps。您可能需要缩进 return 调用。

import string
import random

# Random Number Password Generator


def digit_password(length):
    final = []
    while length > 0:
        final.append(random.choice(string.digits))
        length = length - 1  ###should be indented inside while loop
    result = ''.join(final)
    return result


length = int(input("How long will this password be? "))
print(digit_password(length))


try this because i feel like there's an indentation error length is decremented outside the while loop so the loop keeps running indefinitely.

首先,你的 while 循环将 运行 无限,因为你没有改变循环内的长度,第二个你实际遇到麻烦的原因是,在 py3 print 被修改为 print() 之后,它会给你一个无效的语法错误。