![](/img/trans.png)
[英]Why do I get an 'IndexError: list index out of range' when I try to remove a record from my list in the except block
[英]Why is my index printing when I try to print the contents of the list?
我正在尝试将用户提供的数字中的每个数字平方。 我得到正确的输出,但是最后我得到一个额外的索引,我不确定为什么。 我已经在代码中添加了注释,以解释我在每个步骤中想要做的事情。 最后如何摆脱该索引?
def square_digits(num):
print(num)
string_num =(str(num)) #convert the num to a string
for word in string_num: #iterate through every digit
word = int(word) #convert each digit to an int so we can square it
square_num = word * word
str_sq_num = list(str(square_num)) #create a list of those nums
for count in str_sq_num: #iterate through list to make it one number
print(count, end = "")
print(str_sq_num)
return str_sq_num
因此,给出了示例数字3212
。 我应该输出9414
,而不是我的输出是9414['4']
。 另一个示例是数字6791
,输出应为3649811
,但我的输出为3649811['1']
。
问题是循环在python中工作的方式。 for word in string_num
中for word in string_num
的最后一次迭代中保留了变量str_square_num
。
例如,假设您的数字为12,则在第一次迭代中, str_square_num
将为[1]
或1
平方。 但是将此值设置为[4]
或2平方时,将在第二次迭代中覆盖该值。 因此,数组将始终仅包含最后一位的平方。
如果您的目标是获取所有指标的数组,请尝试以下操作:
def square_digits(num):
print(num)
string_num =(str(num)) #convert the num to a string
str_sq_num = []
for word in string_num: #iterate through every digit
word = int(word) #convert each digit to an int so we can square it
square_num = word * word
str_sq_num.extend(str(square_num)) #create a list of those nums
for count in str_sq_num: #iterate through list to make it one number
print(count, end = "")
print(str_sq_num)
return str_sq_num
我不确定您要在这里实现什么目标,但是查看您的示例,我想这应该可行:
def square_digits(num):
print(num)
string_num = (str(num))
str_sq_num = []
for word in string_num:
word = int(word)
square_num = word * word
str_sq_num.append(square_num)
for count in str_sq_num:
print(count, end = "")
return str_sq_num
无法测试,但是应该这样做:
def square_digits(string_num):
return "".join([str(int(num)**2) for num in string_num])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.