我刚刚练习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."
答案 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)
快乐学习。