Улучшение многих циклов, более эффективная альтернатива?


Я работаю через введение в компьютерные науки книга, это не домашнее задание для меня, но я пытаюсь изучать в свободное время, я не прошу помощи в выполнении домашних заданий!

Выход внизу, и это все ок, но я просто уверен, что это более эффективный способ сделать это. Я пытался в течение многих часов и это все еще лучшее решение я могу придумать, если кто-то сможет улучшить этот и, возможно, объяснить, как, я очень ценю это.

Код:

naught = 0
one = 0
two = 0
three = 0
four = 0
five = 0
six = 0
seven = 0
eight = 0
nine = 0

for i in range (0, 10):
    print("")
    for i in range (0,1):
        print(naught, end = " ")
    for i in range (0,1):
        print(one, end = " ")
        one += 1
    for i in range (0,1):
        print(two, end = " ")
        two += 2
    for i in range (0,1):
        print(three, end = " ")
        three += 3
    for i in range (0,1):
        print(four, end = " ")
        four += 4
    for i in range (0,1):
        print(five, end = " ")
        five += 5
    for i in range (0,1):
        print(six, end = " ")
        six += 6
    for i in range (0,1):
        print(seven, end = " ")
        seven += 7
    for i in range (0,1):
        print(eight, end = " ")
        eight += 8
    for i in range (0,1):
        print(nine, end = " ")
        nine += 9

Выход ниже и это все правильно, это не проблема.

0 0 0 0 0 0 0 0 0 0
0 1 2 3 4 5 6 7 8 9
0 2 4 6 8 10 12 14 16 18
0 3 6 9 12 15 18 21 24 27
0 4 8 12 16 20 24 28 32 36
0 5 10 15 20 25 30 35 40 45
0 6 12 18 24 30 36 42 48 54
0 7 14 21 28 35 42 49 56 63
0 8 16 24 32 40 48 56 64 72
0 9 18 27 36 45 54 63 72 81

Как я сказал, я получаю правильный ответ, просто я не удовлетворен тем, что это наилучшим образом. Большое спасибо, Мэтт.



2518
4
задан 21 декабря 2011 в 07:12 Источник Поделиться
Комментарии
3 ответа

for i in range(10):
for j in range(10):
print i*j,
print ""

Что-то вроде этого, наверное?

10
ответ дан 21 декабря 2011 в 07:12 Источник Поделиться

Если вы просто хотите генерировать тот же самый выход, упростить вашу проблему немного:

for x in range(10):
temp = ''

for y in range(10):
temp += str(x * y) + ' '

print temp

Или если вы хотите получить фантазии:

for x in range(10):
print ' '.join(str(x * y) for y in range(10))

4
ответ дан 21 декабря 2011 в 07:12 Источник Поделиться

naught = 0
one = 0
two = 0
three = 0
four = 0
five = 0
six = 0
seven = 0
eight = 0
nine = 0

Всякий раз, когда вы окажетесь создать ряд переменных, которые отличаются между собой количеством, это означает, что вы действительно хотели список. Вместо этого попробуйте делать что-то вроде:

numbers = [0, 0, 0, 0, 0, 0, 0, 0] # there are better ways, but I'm keeping it simple for now

Теперь вы можете использовать цифры[0], числа[1] и т. д. вместо имени переменных.

for i in range (0, 10):

Странный пробел между предложением и (

    print("")
for i in range (0,1):

Вы не должны использовать то же имя для индекса петли для петли внутри друг друга. Вы также действительно не должны писать цикл, который только один раз выполнить.

        print(naught, end = " ")

for i in range (0,1):
print(one, end = " ")
one += 1

Если мы избавимся от бессмысленных петли один раз, и использовать список мы получим что-то вроде

print(numbers[1], end = " ")
numbers[1] += 1

for i in range (0,1):
print(two, end = " ")
two += 2

Давайте сделаем то же самое здесь

print(numbers[2], end = " ")
numbers[2] += 2

Эй! это почти точно так же! Все, что отличается-это два. На самом деле, мы собираемся сделать это еще много раз. Поэтому мы можем использовать цикл

for j in range(1, 10):
print(numbers[j]. end = " ")
numbers[j] += j

Смотри Как каждое место, которое было сейчас количество использует Дж. Мы поместили код в цикле, и мы не должны повторить 9 раз.

2
ответ дан 22 декабря 2011 в 06:12 Источник Поделиться