python-2.7 - 我是编码新手,正在学习列表中的替换功能,我需要更深入的了解
问题描述
我目前正在尝试在我的游戏功能的 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 代替 * 的完整列表。
解决方案
问题是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]
推荐阅读
- c# - 如何在 Xamarin.Forms 中制作可绑定的标记扩展
- angular - 在我的 Angular 项目中检查 bootstrap 和 syncfusion 的最后更新日期
- java - 升级 Axis2 库后出现 ClassNotFoundException:com.sun.ws.rs.ext.RuntimeDelegateImpl
- react-native - ???com.facebook.react.bridge.ReadableNativeMap.getValue
- git - How to determine which parent is the first one for a merge commit in Git
- javascript - 在 Rails 中实时创建或更新前端的元素,按预设的时间间隔触发
- excel - 使用日期范围从 Excel 中的主表中搜索数据
- javascript - 如何将字符串转换为数组,其中字符串是数组形式,字符串内的值是乳胶
- django - Users not writing to database (Postgresql)
- java - How do I remove an element the user input from an ArrayList when it contains both strings and integers?