Вычисление суммы определенной группы целых чисел в списке - PullRequest
0 голосов
/ 24 марта 2020

Так что я очень новичок в python и пытаюсь создать текстовую, похожую на рпг вещь, которая включает в себя первую комнату с 2 выходами (слева или справа), и каждый ряд комнат впоследствии имеет количество целых чисел суммы последней переменной, и каждая переменная представляет собой случайное целое число от 0 до 3 (количество выходов), например, так:

a = [2]
print(a)
import random
b = []
for i in range(0,2):
    x = random.randint(0,3)
    b.append(x)
print(b)
b_sum = sum(b)
import random
c = []
for i in range(0,b_sum):
    x = random.randint(0,3)
    c.append(x)
print(c)
c_sum = sum(c)
import random
d = []
for i in range(0,c_sum):
    x = random.randint(0,3)
    d.append(x)
print(d)
d_sum = sum(d)
import random
e = []
for i in range(0,d_sum):
    x = random.randint(0,3)
    e.append(x)
print(e)
e_sum = sum(e)
import random
f = []
for i in range(0,e_sum):
    x = random.randint(0,3)
    f.append(x)
print(f)
f_sum = sum(f)
import random
g = []
for i in range(0,f_sum):
    x = random.randint(0,3)
    g.append(x)
print(g)

Это прекрасно работает, однако навигация оказалась трудной.

rowlist = [a,b,c,d,e,f,g,h,ii]
row = (rowlist[0])

room = (a[0])
print(room)
if room == 2:
    door=str(input("left or right"))
    if door == "left":
        roomsum = sum(row[row < room (+1)])

То, что я пытаюсь сделать здесь, - это найти сумму каждого целого числа в списке перед текущей «комнатой». Но я понятия не имею, как это сделать! Любая помощь будет оценена, большое спасибо!

1 Ответ

0 голосов
/ 24 марта 2020

Кажется, что вы ищете что-то вроде:

import random

big_list = [[2]]

for _ in range(1,5):  # increase to create more "rooms"
    big_list.append( [random.randint(0,3) for _ in range(sum(big_list[-1]))])

total = 0
for inner in big_list:
    print(inner, "before:", total)
    total += sum(inner) 

Для создания списков вроде:

[2] before: 0
[3, 1] before: 2
[2, 3, 1, 1] before: 6
[1, 1, 2, 0, 2, 2, 2] before: 13
[2, 3, 0, 2, 3, 2, 2, 1, 0, 2] before: 23

Из-за случайности вы также можете получить:

[2] before: 0
[0, 1] before: 2
[0] before: 3
[] before: 3
[] before: 3

Частичную сумму внутри списка можно получить с помощью выражения генератора внутри суммы или среза списка и суммы:

lol = [[1,2,3], [4,5,6,7,8,9,10,11,12], [13,14,15,16,17]]

idx_in_lol   = 1      # [4,5,6,7,8,9,10,11,12]

idx_in_inner = 5      # [4,5,6,7,8,***9***,10,11,12]

# generator expression and enumerate     
s1 = sum( i if idx < idx_in_inner else 0 for idx,i in enumerate(lol[idx_in_lol]))

# or by slicing
s2 = sum( lol[idx_in_lol][:idx_in_inner] )

print(s1, s2) 

Вывод:

30 30 #  4+5+6+7+8 = 30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...