5 回答
TA贡献1752条经验 获得超4个赞
您遇到了字符串格式化问题,因为您正在将字符串 '*' 插入到您已经迭代的列表中,位于 i 的下一个索引处。您不能让字符串执行模运算。不完全确定你想在那里做什么,但你看到的是正常行为。
此外,按照您的代码当前的工作方式,您将无法达到原始列表中的所有整数。
编辑:回应您的编辑:
x_list = ' '.join(str(x)).split()
for i in range(len(x_list)):
if x_list[i] != '*':
if (int(x_list[i]) % 2 == 0) and (int(x_list[i+1]) % 2 == 0):
x_list.insert(i+1,'*')
只需将字符串更改为 int 并检查 i 处的值是否为“*”
TA贡献2041条经验 获得超4个赞
警告说明
在循环时修改列表并不是可取的。
一些解释
发生的情况是,该行x_list[i] % 2
被解释为格式化字符串的指令,因为最初x_list
包含字符串。
%
目前,在 Python 3 上,不推荐使用格式化。
缓解措施
注意:这解决了格式错误,与功能相关的其他逻辑错误可能仍然存在。
x = int('12234')
x_list = ' '.join(str(x)).split()
# Going from indices 0...(N-1) as we use (i+1) each iteration
for i in range(len(x_list)-1):
# Validating current and next are not invalid char '*'
if '*' in [x_list[i], x_list[i+1]]:
continue
if int(x_list[i])% 2 == 0 and int(x_list[i+1])% 2 == 0 :
x_list.insert(i+1,'*')
# ['1', '2', '*', '2', '3', '4']
print(x_list)
TA贡献1812条经验 获得超5个赞
如果您x_list
包含字符串,那么您显然无法计算该字符串除以 2 的余数。
另外,即使您x_list
只包含数字,您也可能会遇到IndexError
,因为在最后一次迭代中x_list[i+1]
可能超出范围。
您还在循环遍历同一列表时修改了该列表,这通常是不可取的。
TA贡献1772条经验 获得超8个赞
x = input()
x_list = ' '.join(str(x)).split()
for i in range(len(x_list)):
try:
if not(int(x_list[i]) % 2 and int(x_list[i+1]) % 2):
x_list.insert(i+1,'*')
except:
continue
print(x_list)
尝试一下这个,它可能会起作用。我不知道输出应该是什么样的“因为你没有提到它”。但我尝试输入相同的代码并进行一些更改以避免错误
TA贡献1827条经验 获得超8个赞
str
您转换为of chars 的方式list
不正确,可以轻松地用list(string)
. 如果您想检查所有字符是否为有效数字,您可以添加str.isdecimal()
.
您试图修改正在迭代的列表,这也是一个错误。修改循环内的源代码会破坏循环逻辑,因此某些元素可能会被处理多次或被跳过。
最后,您尝试在 上应用模(即数字运算)str
。为了让它按您的预期工作,您应该将 element 转换为int
using int(string)
。
编辑后的代码:
x = input()
if x.isdecimal():
x_list = list(x)
new_list = []
for i in range(len(x_list) - 1):
new_list.append(x_list[i])
if not (int(x_list[i]) % 2 and int(x_list[i + 1]) % 2):
new_list.append("*")
添加回答
举报