为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梦里花落0921 2023-06-27 10:42:10
我正在使用 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行。我认为错误是由于“%”而发生的,我想用它来计算余数。我怎么解决这个问题?
查看完整描述

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 处的值是否为“*”


查看完整回答
反对 回复 2023-06-27
?
缥缈止盈

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)


查看完整回答
反对 回复 2023-06-27
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

如果您x_list包含字符串,那么您显然无法计算该字符串除以 2 的余数。

另外,即使您x_list只包含数字,您也可能会遇到IndexError,因为在最后一次迭代中x_list[i+1]可能超出范围。

您还在循环遍历同一列表时修改了该列表,这通常是不可取的。


查看完整回答
反对 回复 2023-06-27
?
料青山看我应如是

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)

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


查看完整回答
反对 回复 2023-06-27
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

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("*")


查看完整回答
反对 回复 2023-06-27
  • 5 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信