注释列表中的相邻值

问题描述 投票:-1回答:2

应该是20次骰子(随机),然后相邻的值(游程)应该在()中。一个挑战是使用当前的-索引为0的数字(想想我是通过使用range(len(dieRun)-1来解决的)。但是另一个挑战是使用“当前+ 1”,因为它倾向于“超出范围”错误。

我最大的挑战是让()与列表一起打印。但是,我不应该创建一个新列表。

加上我的清单正在“垂直化”

我有一个想法是可能要构建一个函数以比较相邻对象的值?然后使用从中获得的任何回报引用一个变量,然后在dieRun的格式化Print中使用该变量?但是,我看不出有什么更好的方法,因为那样的话,我仍然不得不弄清楚如何使用print(dieRun)列表将该变量作为“(”或“)”放置。

编辑:我也尝试过“切片”相邻部分之间的部分,但这似乎不是正确的方法。还是个新手。

def main():

    from random import randint
    counter = 0
    inRun = 0
    dieRun = []
    while counter < 20:
        roll = randint(0,6)
        dieRun.append(roll)
        counter = counter +1



    index = 0
    counter = 0
    value = 0
    inRun == False
    print(dieRun) # just to see what I'm working with
    while counter < len(dieRun):
        for i in range(0, len(dieRun)-1):

            if dieRun[i] != dieRun[i-1]:
                print(")" , end= "")
                inRun == False
                counter = counter + 1

            if dieRun[i] == dieRun[i+1]:
                inRun == True
                print("(")
                counter = counter + 1

            print(dieRun[i])
        if inRun:
            print("(")




            #print("i is in run")
            #place = dieRun.index(2)
            #print(place)






main()
python list
2个回答
0
投票

[如果您想要输出,例如:1(3 3)4 5(6 6 6)2 1 3(2 2)1(4 4)5 6 1 2

from random import randint

dieRun = []
for i in range(20):
    roll = randint(0,6)
    dieRun.append(roll)


inRun = False
print(dieRun)

for i, n  in enumerate(dieRun):   
    if i < len(dieRun)-1:
        if not inRun:
            if n == dieRun[i+1]:
                print('(', n,' ', end='')
                inRun = True
            else:
                print(n,' ', end='')
        else:
            if n != dieRun[i+1]:
                print(n, ')',' ', end='')
                inRun = False
            else:
                print(n,' ', end='')
    else:
        if dieRun[i-1] == n:
            print(n, ')')
        else:
            print(n)

只是一个想法,希望对您有所帮助。


-1
投票

只是一个快速修复,我已经在代码中注释了。

对于嵌入式打印,您已经提供了解决方案'print(“)”,end =“”)',但我不知道为什么您没有为每个print()都使用它。

if dieRun[i] != dieRun[i-1]:  # will check the first number with last number
dieRun[0] != dieRun[-1]:      # [-1] is the last item in the list

if dieRun[i] == dieRun[i+1]:  # will index out of length
dieRun[len(..)-1] != dieRun[len(..)]:      # [len(..)] wil be out of range

由于列表的开头和结尾总是会引起问题,所以我只是将它们从for循环中砍掉,然后手动执行。

必须有一些更清洁的解决方案:

from random import randint
counter = 0
inRun = 0
dieRun = []
while counter < 20:
    roll = randint(0,6)
    dieRun.append(roll)
    counter = counter +1



index = 0
counter = 0
value = 0
inRun == False
print(dieRun)

# while counter < len(dieRun):   # while loop is redundant with the for loop
print('(', dieRun[0],' ', end='')  # print the first number manually

for i in range(1, len(dieRun)-1):   
    if dieRun[i] != dieRun[i-1]:
        print(")(" , end= "")  # change ")" to ")("
        inRun = False
        counter = counter + 1
    """
    these are redundant, just like if True, don't need elif not True
    # if dieRun[i] == dieRun[i+1]:
    #     inRun == True
    #     print("(", end='')
    #     counter = counter + 1
    """

    print(dieRun[i],' ', end='')

print(dieRun[-1],')', end='')  # print the last number manually
© www.soinside.com 2019 - 2024. All rights reserved.