如何在python 3中编写这样的数字模式问题?

时间:2017-09-06 21:45:22

标签: python python-3.x

例如,如果给出数字3,程序将打印

1
1 2 2
1 2 2 3 3 3

好的,我试过这样的话:

n = eval(input("Enter a positive integer: "))

a=1
for i in range(1,n+1):
    for j in range(1,a+1):
        print(j," ",sep="",end="")
    a+=1
    print()

它将打印如下:

1
1 2
1 2 3

5 个答案:

答案 0 :(得分:0)

你很亲密。您的问题是需要使用j打印当前号码j次。值得庆幸的是,Python通过使用序列乘法使这变得容易。也就是说,Python允许您将序列(如字符串)乘以数字。字符串的内容将复制它乘以的次数:

>>> 'a' * 3
'aaa'
>>> '1' * 4
'1111'

因此,您可以将当前整数j转换为字符串,并将字符串乘以j

for j in range(1, a + 1):
    print((str(j) + ' ') * j, sep='', end="")

通过上述更改,您的代码现在输出:

Enter a positive integer:  3
1 
1 2 2 
1 2 2 3 3

以下是一些可以改进代码的方法。

  • 避免eval像黑瘟一样。安全方面非常危险。当然,你现在甚至不必担心这个问题,但最好不要养成习惯。总有一种更好的方式 TM 。在这种情况下,请使用内置函数int

  • 不要使用a保留明确的计数器,而是使用内置函数enumerate

通过上述改进,您的代码变为:

n = int(input("Enter a positive integer: "))

for a, i in enumerate(range(1, n + 1), 1):
    for j in range(1, a + 1):
        print((str(j) + ' ') * j, sep='', end="")
    print()

答案 1 :(得分:-1)

这是一种执行您要求的方法。

def numbers(n: int) -> None:
    for i in range(1, n+2):
        for j in range(1, i):
            print(j * (str(j) + ' '), end='')
        print()
  1. 首先,我们遍历从1到n+1的所有数字。
  2. 然后,我们将所有数字从1循环到我们正在使用的当前数字,减去1(这就是为什么我们在外循环中有n+2的原因)。
  3. 现在我们拥有打印行所需的所有信息:我们打印jj的值,后跟一个空格,将其附加到此行之前已打印的内容上。
  4. 最后,在完成我们的生产线后,我们会打印一个换行符,这样我们就可以在下一个外循环中重新开始。
  5. 希望这有帮助!

答案 2 :(得分:-1)

您错过了您提供的代码中的关键内容(如下所示):

n = eval(input("Enter a positive integer: "))

a=1
for i in range(1,n+1):
    for j in range(1,a+1):
        print(j," ",sep="",end="")
    a+=1
    print()

for j in range(...)循环中,您实际打印出每个数字,只打印一次,而不是j次(其中j是当前数字)。

您可以使用Python的特殊行为(字符串'乘法')来解决此问题。

n = eval(input("Enter a positive integer: "))

a = 1
for i in range(1, n+1):
    for j in range(1, a+1):
        print('{} '.format(j) * j, end="")
        a += 1
    print()

答案 3 :(得分:-1)

你肯定是在正确的轨道上。让我们仔细看看你的代码:

import unittest
from selenium import webdriver
import time
import sys

driver = webdriver.Chrome()

driver.get('website')
driver.maximize_window()

# Displays Time Sheet for Current Day
element = driver.find_element_by_xpath('//*[@id="page-wrapper"]/div[1]/h1')  
# this element is visible

print(element.text)

# Displays Start Time
element = driver.find_element_by_xpath('//*
[@id="pageinner"]/div/div[1]/div/div/div/div[1]/div[2]/div[1]')
print("Start time was at:", element.text)

# Displays End Time
element = driver.find_element_by_xpath('//*
[@id="pageinner"]/div/div[1]/div/div/div/div[4]/div[2]/div[1]')
print("Clocked out as of:", element.text)

# Displays when out to Lunch
element = driver.find_element_by_xpath('//*[@id="page-
inner"]/div/div[1]/div/div/div/div[2]/div[2]/div[1]/h3')
print("I left for Lunch at:", element.text)

# Displays when back from Lunch
element = driver.find_element_by_xpath('//*[@id="page-
inner"]/div/div[1]/div/div/div/div[3]/div[2]/div[1]/h3')
print("I arrived back from Lunch at:", element.text)

# Total Hours for The Day
element = driver.find_element_by_xpath('//*[@id="page-
inner"]/div/div[1]/div/div/div/div[5]/div[2]/div[1]')
print("I was at work for:", element.text)

'''
# Save to txt
sys.stdout = open('file.txt', 'w')
print(element.text)
'''

# Screenshot
# driver.save_screenshot('screenshot.png')


driver.close()

if __name__ == '__main__':
    unittest.main()

i 正在从1迭代到 n 。这是一个很好的直觉,因为我们需要每个数字。

j 正在从1迭代到 a 。调试代码的方法是通过一个示例。假设 i 将在范围(1,3)中迭代。第一次在循环中, j 将在范围(1,2)中迭代并且它将打印“1”。第二次, j 将在范围(1,3)中迭代并且它将打印“1 2”。这是我们的问题;我们想要2次打印两次!

实际上是我们想要打印的数字, j 是我们要打印数字的次数。我们实际上不需要 a 变量:

n = eval(input("Enter a positive integer: "))

a=1
for i in range(1,n+1):
    for j in range(1,a+1):
        print(j," ",sep="",end="")
    a+=1
    print()    

我们可以进一步浓缩这一点。我试着先把它想在脑子里,然后编码。

“我想要1次,2次,3次,3次等等。”这意味着,我们甚至不需要内循环。您知道有多少次要打印 ...... 次!

n = int(input("Enter a positive integer: "))

message = "" 
for i in range(1, n + 1):
    for j in range(0, i):
        message += str(i) + " "
    print(message)

另外,请注意代码中的样式。 PEP8有关于如何编写适当的Python代码的指南。注意:

  • 如果可能,使用“int”优于“eval”,因为您只希望程序采用数字。

  • 括号中的间距“range(1,a + 1)”优于“range(1,a + 1)”。

  • “a = 1”之类的变量声明优于“a = 1”。

这些最佳实践将使您的代码更具可读性:)

答案 4 :(得分:-3)

WORKDIR /install
ADD https://download.microsoft.com/download/C/9/E/C9E8180D-4E51-40A6-A9BF-776990D8BCA9/rewrite_amd64.msi rewrite_amd64.msi
RUN Write-Host 'Installing URL Rewrite' ; \
    Start-Process msiexec.exe -ArgumentList '/i', 'rewrite_amd64.msi', '/quiet', '/norestart' -NoNewWindow -Wait