尝试拆分字符串,但我一直收到以下错误:“类型错误:必须是str或None,not list”

2024-09-29 21:23:03 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我尝试生成一个随机的4位数字,然后拆分该数字并将每个数字分配给一个单独的变量。我是python新手,我真的不知道我在做什么,我从互联网上得到了create random number代码以及分割字符串的代码,所以我不能真正地自我诊断问题。感谢任何帮助!在

from random import *
number = randint(1000,9999)
strnumber = str(number)
a,b,c,d = strnumber.split([strnumber[i:i+1] for i in range(0, len(strnumber), 1)])
print(a)
print(b)
print(c)
print(d)

错误信息如下:

Traceback (most recent call last):

File "D:\Documents HDD\Python\Mastermind Task.py", line 4, in

a,b,c,d = strnumber.split([strnumber[i:i+1] for i in range(0, len(strnumber), 1)])

TypeError: must be str or None, not list

编辑:好吧,我保证我不是一个十足的白痴,我只是把错误的东西抄到了帖子里,我已经修正了相当尴尬的打字错误。在


Tags: 代码innumberforlen错误range互联网
3条回答

split()返回字符串列表,而不是字符串本身。您必须将其解析出来并从中获取字符串,或者因为它是一个单一的数字,只需使用str()对其进行强制转换

有两个问题:

  1. 您引用的是stringnumber,而不是{}。在
  2. 您误用了str.split,它将分隔符作为参数。此功能不是必需的。在

因此您可以使用:

a, b, c, d = (strnumber[i:i+1] for i in range(0, len(strnumber), 1))

但是,请注意,字符串本身是iterable,因此可以直接解压缩:

^{pr2}$

或者,如果需要整数:

^{3}$

或者,您可以使用数学运算,避免str和{}之间的转换:

from math import log10

d, c, b, a = (number // 10**i % 10 for i in range(int(log10(number))+1))

请注意,我们颠倒赋值顺序以反映我们的计算。在

我们可以直接将多个变量赋给string,但同时我们可以使用map来生成所有的变量{}

from random import randint

num = randint(1000,9999)
a, b, c, d = map(lambda x: int(x), str(num))

#  2 4 7 0
# <class 'int'> <class 'int'> <class 'int'> <class 'int'>

相关问题 更多 >

    热门问题