Python 帮我修一个程序

Python 帮我修一个程序,python,sage,Python,Sage,你好,我得到了一个程序,它给出了长度为n的0和1的随机序列的输出。然而,在我的程序中有一个小问题,因为我得到了语法错误。我用的是鼠尾草。我该修什么 from random import randint def randString01(num): x = str() count = num while count >0: if randint(0,1) == 0: append.x(0) else

你好,我得到了一个程序,它给出了长度为n的0和1的随机序列的输出。然而,在我的程序中有一个小问题,因为我得到了语法错误。我用的是鼠尾草。我该修什么

from random import randint
def randString01(num):
    x = str() 
    count = num 
    while count >0: 
        if randint(0,1) == 0: 
            append.x(0)   
        else: 
            append.x(1) 
        count -= 1
    x=str(x) 
    return x

您正在尝试对字符串使用列表的append方法

首先,字符串没有
append
方法

其次,您需要编写
x.append(“0”)
*

最后(因为字符串没有
append
方法),所以要编写的是
x+=“0”
,或者
x=x+“0”

另外,由于x已经是一个字符串,所以不需要最后的
x=str(x)


*在python中,要调用对象的方法,语法是
object.methodname(args)

您试图在字符串上使用列表的append方法

首先,字符串没有
append
方法

其次,您需要编写
x.append(“0”)
*

最后(因为字符串没有
append
方法),所以要编写的是
x+=“0”
,或者
x=x+“0”

另外,由于x已经是一个字符串,所以不需要最后的
x=str(x)


*在python中,要调用对象的方法,语法是
object.methodname(args)

,我想您需要类似这样的东西:

def randString01(length):
    my_string = ""
    for count in range(length):
        my_string += str(randint(0,1))
    return my_string

我想你想要更像这样的东西:

def randString01(length):
    my_string = ""
    for count in range(length):
        my_string += str(randint(0,1))
    return my_string

正如其他人指出的,您不应该使用“append”

from random import randint
def randString01(num):
    x = str() 
    count = num 
    while count >0: 
        if randint(0,1) == 0: 
            x += "0"   
        else: 
            x += "1" 
        count -= 1
    x=str(x) 
    return x
第二,这根本不是。你应该调查一下

示例用法:

>>> randString01(5)
'01101'
>>> randString01(100)
'0110101001101001000110101100101100100100110001011111111101101010010011110000000
101010011001000000000'
为了将其分解为更简单的部分,我将对每一部分进行说明

str.join(可伸缩) 返回一个字符串,该字符串是iterable中字符串的串联。元素之间的分隔符是提供此方法的字符串

我使用此命令和空字符串将所有数值粘贴在一起

我使用range来确保我的内部循环重复正确的次数

列表理解

>>> [x for x in [1,2,3]]
[1, 2, 3]
>>> [2*x for x in [1,2,3]]
[2, 4, 6]
>>> [str(x) for x in [1,2,3]]
['1', '2', '3']
>>> [str(5) for x in range(5)]
['5', '5', '5', '5', '5']
>>> [str(randint(0,1)) for x in range(5)]
['1', '0', '0', '1', '1']
请注意,我调用str(randint(0,1))以确保列表中的值是字符串元素,而不是整数。如果尝试调用str.join(一组数字),则会出现错误:

>>> ''.join[1,2,3]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'builtin_function_or_method' object is unsubscriptable
这是因为join的参数返回的生成器对象是iterable,str.join方法需要工作的全部是iterable对象。使用生成器比使用列表更好,因为它允许延迟求值,这在本例中不是什么大问题,但如果列表非常大,则可能是这样。有关发电机的更多信息,请参阅


这是一些非常高级的东西,但是请不要因为这个例子而害怕python。当您可以使用非常高级的抽象而不是低级的控制结构时,看看代码有多漂亮(一行代码而不是10行代码)。

正如其他人所指出的,您不应该使用“append”

from random import randint
def randString01(num):
    x = str() 
    count = num 
    while count >0: 
        if randint(0,1) == 0: 
            x += "0"   
        else: 
            x += "1" 
        count -= 1
    x=str(x) 
    return x
第二,这根本不是。你应该调查一下

示例用法:

>>> randString01(5)
'01101'
>>> randString01(100)
'0110101001101001000110101100101100100100110001011111111101101010010011110000000
101010011001000000000'
为了将其分解为更简单的部分,我将对每一部分进行说明

str.join(可伸缩) 返回一个字符串,该字符串是iterable中字符串的串联。元素之间的分隔符是提供此方法的字符串

我使用此命令和空字符串将所有数值粘贴在一起

我使用range来确保我的内部循环重复正确的次数

列表理解

>>> [x for x in [1,2,3]]
[1, 2, 3]
>>> [2*x for x in [1,2,3]]
[2, 4, 6]
>>> [str(x) for x in [1,2,3]]
['1', '2', '3']
>>> [str(5) for x in range(5)]
['5', '5', '5', '5', '5']
>>> [str(randint(0,1)) for x in range(5)]
['1', '0', '0', '1', '1']
请注意,我调用str(randint(0,1))以确保列表中的值是字符串元素,而不是整数。如果尝试调用str.join(一组数字),则会出现错误:

>>> ''.join[1,2,3]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'builtin_function_or_method' object is unsubscriptable
这是因为join的参数返回的生成器对象是iterable,str.join方法需要工作的全部是iterable对象。使用生成器比使用列表更好,因为它允许延迟求值,这在本例中不是什么大问题,但如果列表非常大,则可能是这样。有关发电机的更多信息,请参阅


这是一些非常高级的东西,但是请不要因为这个例子而害怕python。当您可以使用非常高级的抽象而不是低级的控制结构时,看看代码有多漂亮(一行代码,而不是~10行代码)。

发布您的语法错误,让我们知道发生了什么。um全局名称附加没有定义……我如何将0和1添加到x?这不是语法错误。一般来说,复制并粘贴准确的错误消息是一个好主意。这个问题与同一作者提出的问题有何不同?罗尼——将来你真的应该把你的问题标题写得更具体一些。您还应该选中最佳答案旁边的复选框,以便接受它并向作者creditPost提供您的语法错误,以便我们知道发生了什么。um全局名称附加未定义…如何将0和1添加到x?这不是语法错误。一般来说,复制并粘贴准确的错误消息是一个好主意。这个问题与同一作者提出的问题有何不同?罗尼——将来你真的应该把你的问题标题写得更具体一些。你也应该勾选最佳答案旁边的复选框,以便接受它,并给作者加1个pythonic。。。这是更多的文本,因为
+1 pythonic
显然太短了。不过,您实际上不需要理解列表。join将迭代任何序列,就像生成器表达式一样
def randString01(num):返回“”。为范围(num)内的x加入(str(randint(0,1))
我喜欢它。嘿,谢谢令牌-我没有意识到创建列表是不必要的。太棒了。+1蟒蛇。。。这是更多的文本,因为
+1 pythonic
显然太短了。不过,您实际上不需要理解列表。join将迭代任何序列,就像生成器表达式一样
def randString01(num):返回“”。为范围(num)内的x加入(str(randint(0,1))
我喜欢它。嘿,谢谢令牌-我没有意识到列表会创建