【问题标题】:Need help converting a list to a string需要帮助将列表转换为字符串
【发布时间】:2016-06-29 06:14:38
【问题描述】:

这里的函数只是生成一个随机的 0 和 1 列表。供以后在游戏中使用。所以我需要获取由 binary_gen 生成的列表并将其转换为字符串。我试过使用 .join 但我只是收到一条错误消息。有什么方法可以将输出从 binary_gen 转换为字符串?还是有另一种方法可以生成 0 和 1 的随机序列?

import random

def random_binary():
    min_length = 4
    max_length = 8
    binary_gen = [random.randrange(0,2,1) for _ in range \
    (random.randint(min_length,max_length))]
    print (binary_gen)

random_binary()

更新:

import random

def random_binary():
    min_length = 4
    max_length = 8
    binary_gen = [random.randrange(0,2,1) for _ in range \
    (random.randint(min_length,max_length))]
    binary_string = "".join(binary_gen)
    print (binary_string)

random_binary()

我得到: TypeError: sequence item 0: expected str instance, int found

【问题讨论】:

标签: python python-3.x


【解决方案1】:

生成一个由 0 和一个随机长度从 4 到 8 的随机字符串序列:

>>> from random import randint
>>> ''.join(str(randint(0, 1)) for i in range(randint(4, 8)))
'0010111'

或者,更直接地:

>>> from random import choice, randint
>>> ''.join(choice('01') for i in range(randint(4, 8)))
'101101'

计数

计算一串零和一中1s 的数量:

>>> s = '0011100'
>>> len(s.replace('0', ''))
3

或者:

>>> sum(c=='1' for c in s)
3

【讨论】:

  • 谢谢,这很有帮助。
  • @kjf545 不客气。另外,我添加了计数方法。
【解决方案2】:
import random

def random_binary(min_length=4, max_length=8):
    size = random.randint(min_length, max_length)
    return ''.join(str(random.randint(0, 1)) for _ in range(size))    

print(random_binary())

我的猜测是你得到的错误类似于TypeError: sequence item 0: expected str instance, int found,因为你试图加入数字而不是字符串。上面的str(...) 是这段代码起作用的原因。

【讨论】:

  • 是的。那是我得到的错误。感谢您提供有用的意见和回答。
  • 我的计划是让玩家猜测一个序列中有多少个 1。这将是一个简单的游戏,但希望对我有教育意义。如果它最终在更广泛的范围内有用,我会发布它。
【解决方案3】:

请尝试以下操作:

import random

def random_binary():
    min_length = 4
    max_length = 8
    binary_gen = [random.randrange(0,2,1) for _ in range \
    (random.randint(min_length,max_length))]
    _str = ''
    for i in binary_gen:
        _str += str(i)
    return _str



def count_zeros(s):
    count = 0
    for i in s:
        if i == '0':
            count += 1
    return count

它生成“111010”字符串。 count_zeros(s) 将返回输入字符串中的零个数

【讨论】:

  • 我试了一下,谢谢。我的计划是把这个序列生成。删除零并获得序列的长度。玩家的工作是输入一个序列中有多少个 1。我认为隔离这些是解决问题的好方法。
  • @kjf545 我稍微修改了你的函数,所以它会返回一个字符串而不是列表。我添加了 count_zeros() 函数,该函数返回 nuber of zeros。请参阅我编辑的答案。运行s = random_binary(),然后运行count_zeros(s)
猜你喜欢
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
相关资源
最近更新 更多