使用for循环输出与星号相同的行数

时间:2019-07-06 21:25:30

标签: python-3.x

我正在图书馆学习Python类,我是编码的初学者,我在完成这一任务时遇到了麻烦。使用for循环,它要求我们“编写一个读入n的程序,其中n是2到10的数字。该程序应输出n行星号,其中星号的数目等于行号。 ”此外,如果n =“ stop”,则应打印“ No stars!”

例如,其中n = 4:

*
**
***
****

我知道如何要求输入。我可以使它打印星号。我只是不知道如何做到这一点,因此它只能打印出行的数量,并为用户输入星号。我希望我描述得还可以。我也无法打印“没有星星!”如果我输入“停止”。

n = input ("Enter a number between 2 and 10: ")

for n in range (1, 11):
    print (n * "*")

if n == "stop":
    print ("No stars!")

4 个答案:

答案 0 :(得分:0)

我认为您最主要的误解是因为for循环。

当在y中对x进行a运算时,它将占用y的每个部分并运行for循环的主体,并将y的该部分分配给x。在您的情况下,它是一个范围,因此范围的每个“部分”都是一个数字,该数字正累加该范围的上限。

因此,对于循环n的每个迭代,n = 1,主体将运行,n = 2,主体将运行,等等。

因此要解决此问题,请使范围的上限等于n + 1。

n = input ("Enter a number between 2 and 10: ")

if n == "stop":
    print("No starts!")
try:
    n = int(n)
    if n>=2 and n<=10:
        for x in range (1, n+1):
            print (x * "*")

except:
    print("invalid input")

答案 1 :(得分:0)

完成另一个答案后,用户输入为string类型,对于任何算术运算或布尔运算,应将其转换为integer

n = input ("Enter a number between 2 and 10: ")

if n == "stop":
    print("No starts!")
elif 2 <= int(n) <=10:
    for x in range (1, int(n)):
        print (x * "*")
else:
    print("Number is out or range")

答案 2 :(得分:0)

您将输入作为字符串并将其存储在n中。然后,再次将n用作for循环中的整数迭代器。因此,将“ n”更改为for循环中的其他内容。

范围也是硬编码的:第一个参数是起始值,第二个参数是终止值。因此,在代码中使用变量将是range(1,n)

str_n = input("Enter a number between 2 and 10: ")
n = int(str_n)    # See NOTE, but basically takes the string and turns into an int
for i in range(1, n+1): # have to store loop iterator in new variable
    print(i * "*")

替换

n = input ("Enter a number between 2 and 10: ") # this stores a string in n

for n in range (1, 11):                         # this overwrites n to an int
    print (n * "*")                             

注意:这是假设(不好的)用户实际上将输入一个整数。如果没有,它将抛出ValueError

关于“停止”上的“没有星星”。 “停止”从何而来?除非用户输入了很多数字,否则就没有时间“命令中断”(不确定Python中的确切术语,但是对于终端来说,请考虑CTRL-C或类似的命令)。但是要在循环结束时实现“无星星”:

    print(i * "*")
print("No stars!")

迈出更大的一步,并说您建立了一个列表,其中包含用户输入的长度(因此n = 4)

nList = ['','','','','stop']
for i in range(0, len(nList)-1):
    if nList[i] == 'stop':
        break
    else:
        print((i+1) * "*")

必须构建列表,这超出了问题的范围,但这将是基本布局。

答案 3 :(得分:0)

谢谢大家!我考虑了每个人的反馈意见,这是我的最终产品(正如您所提到的,我什至还考虑了ValueError):

n =输入(“输入2到10之间的数字:”)

尝试:     如果n ==“停止”:         打印(“没有星星!”)

elif 2 <= int(n) <=10:
    for x in range (1, int (n)+ 1):
        print (x * "*")

else:
    print ("Number is out of range.")

ValueError除外:         打印(“输入数字!”)

(由于某些原因,第一部分和最后一部分在框中没有正确显示,但是程序确实可以运行。)