web-dev-qa-db-fra.com

Table de multiplication correctement formatée

Comment pourrais-je créer une table de multiplication organisée en une table soignée? Mon code actuel est:

n=int(input('Please enter a positive integer between 1 and 15: '))
for row in range(1,n+1):
    for col in range(1,n+1):
        print(row*col)
    print()

Cela multiplie correctement tout mais l'a sous forme de liste. Je sais que je dois imbriquer correctement et espacer, mais je ne sais pas où cela va?

7
user3068686

Manière rapide (probablement trop d'espace horizontal cependant):

n=int(input('Please enter a positive integer between 1 and 15: '))
for row in range(1,n+1):
    for col in range(1,n+1):
        print(row*col, end="\t")
    print()

Meilleure façon:

n=int(input('Please enter a positive integer between 1 and 15: '))
for row in range(1,n+1):
    print(*("{:3}".format(row*col) for col in range(1, n+1)))

Et en utilisant des f-strings (Python3.6 +)

for row in range(1, n + 1):
    print(*(f"{row*col:3}" for col in range(1, n + 1)))
9
John La Rooy

L'approche de Gnibbler est assez élégante. J'ai choisi d'abord de construire une liste de nombres entiers, en utilisant la fonction range et en tirant parti de l'argument step.

pour n = 12

import pprint
n = 12
m = list(list(range(1*i,(n+1)*i, i)) for i in range(1,n+1))
pprint.pprint(m)
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
 [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24],
 [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36],
 [4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48],
 [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60],
 [6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72],
 [7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84],
 [8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96],
 [9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108],
 [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120],
 [11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 132],
 [12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144]]

Maintenant que nous avons une liste de nombres entiers sous la forme que nous voulons, Nous devons les convertir en chaînes justifiées à droite avec une largeur Plus grande que le plus grand entier de la liste de listes (le dernier entier), en utilisant l’argument par défaut de ' ' pour le champ de remplissage.

max_width = len(str(m[-1][-1])) + 1
for i in m:
    i = [str(j).rjust(max_width) for j in i]
    print(''.join(i))

   1   2   3   4   5   6   7   8   9  10  11  12
   2   4   6   8  10  12  14  16  18  20  22  24
   3   6   9  12  15  18  21  24  27  30  33  36
   4   8  12  16  20  24  28  32  36  40  44  48
   5  10  15  20  25  30  35  40  45  50  55  60
   6  12  18  24  30  36  42  48  54  60  66  72
   7  14  21  28  35  42  49  56  63  70  77  84
   8  16  24  32  40  48  56  64  72  80  88  96
   9  18  27  36  45  54  63  72  81  90  99 108
  10  20  30  40  50  60  70  80  90 100 110 120
  11  22  33  44  55  66  77  88  99 110 121 132
  12  24  36  48  60  72  84  96 108 120 132 144

et démontrer l'élasticité de l'espacement avec une taille différente, par ex. n = 9

n=9
m = list(list(range(1*i,(n+1)*i, i)) for i in range(1,n+1))
for i in m:
    i = [str(j).rjust(len(str(m[-1][-1]))+1) for j in i]
    print(''.join(i))

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

Ou vous pouvez simplement faire ceci (pas aussi simpliste que les autres mais ça marche):

def main():

    rows = int(input("Enter the number of rows that you would like to create a multiplication table for: "))
    counter = 0
    multiplicationTable(rows,counter)

def multiplicationTable(rows,counter):

    size = rows + 1

    for i in range (1,size):
        for nums in range (1,size):
            value = i*nums
            print(value,sep=' ',end="\t")
            counter += 1
            if counter%rows == 0:
                print()
            else:
                counter
main()
1
Floam

Créer une table arithmétique est beaucoup plus simple, mais j’ai pensé que je devrais poster ma réponse malgré le fait qu’il y ait tellement de réponses à cette question parce que personne n’a parlé de la limite de la table.

Prendre l'entrée de l'utilisateur comme un entier

num = int(raw_input("Enter your number"))

Fixer la limite du tableau, dans quelle mesure on souhaite calculer le tableau pour le nombre souhaité

lim = int(raw_input("Enter limit of table"))

Calcul itératif à partir de l'indice 1

En cela, j’utilise le découpage avec format pour ajuster les espaces entre les nombres, à savoir {: 2} pour deux ajustements d’espace.

for b in range(1, lim+1):
    print'{:2} * {:2} = {:2}'.format(a, b, a*b)

CODE final:

num = int(raw_input("Enter your number"))
lim = int(raw_input("Enter limit of table"))
for b in range(1, lim+1):
    print'{:2} * {:2} = {:2}'.format(a, b, a*b)

SORTIE:

Enter your number 2
Enter limit of table 20
 2 *  1 =  2
 2 *  2 =  4
 2 *  3 =  6
 2 *  4 =  8
 2 *  5 = 10
 2 *  6 = 12
 2 *  7 = 14
 2 *  8 = 16
 2 *  9 = 18
 2 * 10 = 20
 2 * 11 = 22
 2 * 12 = 24
 2 * 13 = 26
 2 * 14 = 28
 2 * 15 = 30
 2 * 16 = 32
 2 * 17 = 34
 2 * 18 = 36
 2 * 19 = 38
 2 * 20 = 40
1
Rahul Kumar

celui-ci a l'air plutôt chouette:

   print '\t\t\t======================================='
   print("\t\t\t\tMultiplication Tables")
   print '\t\t\t=======================================\n'
   for i in range(1,11):
       print '\t', i,
   print
   print("___________________________________________________________________________________________________________________")

   for j in range(1,11):
       print("\n")
       print j, '|',
       for k in range(1,11):
           print '\t', j * k,
   print("\n")
1
GNUdelman

Voici ma prise pour organiser la sortie:

for row in range(1, 11):
    for col in range(1, 11):
        num = row * col
        if num < 10: blank = '  '       # 2 blanks
        else:
            if num < 100: blank  = ' '  # 1 blank
        print(blank, num, end = '')     # Empty string
    print()                             # Start a new line
1
Yehuda Katz

Il y a beaucoup de réponses à la table de multiplication. Ici j'ai fait en appelant la fonction. N'hésitez pas à vous améliorer.

    num = int(input('Please enter time tables for printing: '))
    upperLimit = int(input('Please enter upper limit: '))

    def printTable(num, upperLimit):   
        for i in range(0, upperLimit+1):
            print(num, 'x', i, '=', num * i)

    def main():
        printTable(num, upperLimit)

    main()    
0
Mjachowdhury

Vous pouvez obtenir l’effet recherché plus facilement en insérant l’une des boucles dans l’appel print.

n = int(input('Please enter a positive integer between 1 and 15: '))
for row in range(1, n+1):
    print('\t'.join(str(row * col) for col in range(1, n+1)))

Cela crée un générateur qui génère les valeurs de chaîne row*1, row*2, ... row*n, joint chacune de ces valeurs à un caractère de tabulation et transmet la chaîne résultante à print().

0
Fraxtil
for x in range(1, 11):
        for y in range(1, 11):
            z = x * y
            print(z, end="\t")
        print() #creates the space after the loop

Le code ci-dessus produira ce résultat:

0
lloydyu24

Votre problème est que print ajoute une nouvelle ligne, et vous ne voulez pas toutes ces nouvelles lignes.

Une façon de le faire consiste à créer une chaîne pour chaque ligne, puis à imprimer la ligne entière en une seule instruction d'impression.

n=int(input('Please enter a positive integer between 1 and 15: '))
for row in range(1,n+1):
    s = ''
    for col in range(1,n+1):
        s += '{:3} '.format(row * col)
    print(s)

La magie est dans le '{:3} '.format bit. C'est délicat, alors voici un tutoriel: http://ebeab.com/2012/10/10/python-string-format/

Voici le code en action:

Please enter a positive integer between 1 and 15: 4
  1   2   3   4 
  2   4   6   8 
  3   6   9  12 
  4   8  12  16 
0
Pitarou
n=int(input('Please enter a positive integer between 1 and 15: '))
for row in range(1,n+1):
    for col in range(1,n+1):
        print(row*col, "\t",end = "")      
    print()

#the "\t" adds a tab each time, and the end = "" prints your string horizontally.
0
Shahab

Pour cette impression comme suit

 print "%d X %d"%(row, col)

Il imprimera en 2 X 3.

0
doptimusprime

Cela fonctionne plutôt bien pour une table de multiplication standard facile à expliquer en termes de codage pour les débutants:

x = 12
y = 12
print ' ',
for fact in range(1, x+1):
    str(fact).rjust(6),
for fact in range(1, y+1):
    print
    print fact,
    for i in range(1,y+1):
        product = i * fact
        print str(product).rjust(5),
    print
0
MJMacarty