首页 > 解决方案 > 我是编码新手,正在学习列表中的替换功能,我需要更深入的了解

问题描述

我目前正在尝试在我的游戏功能的 light_list 中用 * 替换 0,但是当我让该函数打印出新的灯光线时,它只打印一个 0(表明它替换了整个字符串而不是一个点在里面)。

我尝试了一堆简单的更改,例如 () 到 [] 等等,但都没有成功

import random
#a star(*) is a light
#a zero(0) is a light that is off

def start():
    num_lights = int(raw_input("How many lights would you like to have?"))
    i = 0
    light_list = []

    while i < num_lights:
        if i <= (num_lights):
            a = random.choice("0" "*")
            light_list.append(a)
            i = i + 1
    print light_list

    while True:
        switch = int(raw_input("Which light would you like to turn off?"))
        if switch > 0:
            gameplay(switch, light_list, num_lights)


def gameplay(switch, light_list, number_lights):
    switch = switch-1
    if (light_list[switch]) == "*":
        light_list = light_list[switch].replace(light_list[switch], "0")
        print (light_list)
    else:
        print("not a live light")

start()

输出应该是完整的灯光列表,但只输出 0。输出应该是用 0 代替 * 的完整列表。

标签: python-2.7

解决方案


问题是replace()对字符串进行操作,但您传递的是单个字符。

light_list = light_list[switch].replace(light_list[switch], "0")

从列表中选择一个条目 (light_list[switch]),然后用该单个字符串中的“0”替换所有字符 light_list[switch] 实例,并用单个字符替换原始列表。

您可能想要做的是遍历列表并将与 light_list[switch] 相同的任何条目替换为“0”,即

light_list = ["0" if l==light_list[switch] else l for l in light_list]

推荐阅读