猿问

Python“并非所有参数在字符串格式化期间都被转换”

我正在使用 Python,但由于“字符串格式”错误而遇到麻烦。


x = int(input())

x_list = ' '.join(str(x)).split()

for i in range(len(x_list)):

    if x_list[i] % 2 == 0  and x_list[i+1] % 2 == 0 :

        x_list.insert(i+1,'*')

x_list是我制作的任意列表,错误发生在第4行。我认为错误是由于“%”而发生的,我想用它来计算余数。


我怎么解决这个问题?


梦里花落0921
浏览 179回答 5
5回答

温温酱

您遇到了字符串格式化问题,因为您正在将字符串 '*' 插入到您已经迭代的列表中,位于 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 处的值是否为“*”

缥缈止盈

警告说明在循环时修改列表并不是可取的。一些解释发生的情况是,该行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 iterationfor 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)

慕雪6442864

如果您x_list包含字符串,那么您显然无法计算该字符串除以 2 的余数。另外,即使您x_list只包含数字,您也可能会遇到IndexError,因为在最后一次迭代中x_list[i+1]可能超出范围。您还在循环遍历同一列表时修改了该列表,这通常是不可取的。

料青山看我应如是

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:        continueprint(x_list)尝试一下这个,它可能会起作用。我不知道输出应该是什么样的“因为你没有提到它”。但我尝试输入相同的代码并进行一些更改以避免错误

斯蒂芬大帝

str您转换为of chars 的方式list不正确,可以轻松地用list(string). 如果您想检查所有字符是否为有效数字,您可以添加str.isdecimal().您试图修改正在迭代的列表,这也是一个错误。修改循环内的源代码会破坏循环逻辑,因此某些元素可能会被处理多次或被跳过。最后,您尝试在 上应用模(即数字运算)str。为了让它按您的预期工作,您应该将 element 转换为intusing 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("*")
随时随地看视频慕课网APP

相关分类

Python
我要回答