有关Python程序的帮助/反馈

时间:2013-04-03 02:53:34

标签: python

我刚刚练习Python并回答了这个问题:

信息:通过对a的数字的平方求和得到一个序列 数字反复。如果序列在少于15步中收敛到1, 这个数字被认为是一个快乐的数字。

问题:创建一个程序,允许用户输入一个数字,它会告诉他们输入的数字是否是一个满意的数字。用户应该能够继续输入数字,直到输入-1退出程序。

我已经尝试过这个问题,但是有一个错误说

File "string", line 43, in fragment

TypeError: 'int' object is unsubscriptable

我知道错误是sequence_num += int(num[i]) ** 2我不明白为什么因为在此之前,我将num转换为字符串,然后由于(num[i])在括号中,程序应先运行,然后再运行,将其转换为整数。知道为什么会发生这种情况和/或我如何解决它。多谢你们。

#Constant to determine if number is happy
MAX_STEPS = 14
#Constants to signal end of sequences or program
END_SEQUENCE_NUM = 1
END_PROGRAM_NUM = -1
#Variable to count number of steps and digit number
steps = 0
i = 0
#Variable for sequence number
sequence_num = 0

#Loops until user inputs -1
while True:
#Gets values from user
    num = input("\nPlease input a number: ")

    #Checks if user entered -1 to end program
    if num == END_PROGRAM_NUM:

    #Ends program
    break

#Checks if user inputted a number besides -1
    else:

#Loops until the sequence converges to 1 or number of steps is greater than 15
        while num != END_SEQUENCE_NUM and steps < MAX_STEPS:
#Counts number of steps
            steps += 1
#Concatenates user's number into a string
            num = str(num)

#Gets number of digits of user's number
            num_digits = len(num) 

#Squares each digit and adds the product
        while i != num_digits:
            sequence_num += int(num[i]) ** 2
            i += 1

            num = sequence_num

#Checks if number is happy
if num == END_SEQUENCE_NUM:
    num_type = "happy"

else:
    num_type = "not happy"

print "This is a", num_type, "number."

2 个答案:

答案 0 :(得分:0)

您目前的做法有点复杂。将其分解为简单函数并使用for循环。 Python允许您使用for循环轻松遍历列表和字符串:

def squared_digit_sum(number):
    total = 0

    for digit in str(number):
        # `digit` is a string, so convert it into a number using `int()`

        ...

从那里,您只需循环15次,看看数字是否在这15次迭代中收敛:

def is_happy(number):
    for i in range(15):
        number = squared_digit_sum(number)

        if number == 1:
            return True

    # The loop ended and `number` isn't 1
    return False

答案 1 :(得分:0)

我的建议是:注意类型。

有时您希望num变量是一个数字(例如,当您将它与那些常数进行比较时),有时候是一个字符串(为了将其切片或得到它的len)。另请注意,使用输入会给出一个数字,假设您使用的是python 2.x(http://docs.python.org/2/library/functions.html#input),通常建议使用raw_input(您将始终获得一个字符串,而不是eval http://docs.python.org/2/library/functions.html#raw_input)。

打印类型可以帮助您调试:

print type(num)

快乐学习。