在IDLE中调用函数时出现Python“无效语法”错误

时间:2018-01-07 17:35:15

标签: python python-3.x sublimetext sublimerepl

我正在尝试编写一个生成随机数字字符串的程序,其长度基于用户输入。我在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”名称。它在崇高的文本中工作,但它不会在IDLE中工作。有谁知道为什么会这样?

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

3 个答案:

答案 0 :(得分:2)

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.

答案 1 :(得分:1)

打印电话周围没有括号。 Python 3需要将print打造为print(item)

将您的最后一行更改为:

print(digit_password(length))

聚苯乙烯。您可能需要缩进回访电话。

答案 2 :(得分:1)

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