首页 > 解决方案 > 三角系列数字的用户输入

问题描述

   def my_func(c=1, n=None):
    while True:
        if c > n:
            # if counter > number of iterations required
            break
        a = int(c * (c + 1)/2)
        yield a
        c += 1

my_object = my_func(n=5)

while True:
    try:
        print(next(my_object))
    except StopIteration:
        print("End of Iteration")
        break
   

嗨,我有以下内容,基本上它打印三角形数字,我想要做的是设置 n = 用户键盘输入,基本上用户输入一个迭代,它打印出输入迭代次数的三角形序列。

如果我想在 n=None 时无限循环,大概是在 n="" ...但我不知道该怎么做

任何帮助,将不胜感激。

这是在python编码中

我在使用 Seons 解决方案时遇到的错误

错误!请输入一个数字或留空。回溯(最后一次调用):文件“”,第 15 行,在 get_valid_user_input ValueError:int() 的无效文字,基数为 10:'a'

在处理上述异常的过程中,又出现了一个异常:

回溯(最后一次调用):文件“”,第 20 行,在文件“”中,第 18 行,在 get_valid_user_input NameError: name 'get_user_input' is not

标签: python

解决方案


我们从稍微改变 my_func 开始,如果 n<=-1,我们将无限循环。然后我们接受用户输入:

  • 要么他什么都不输入(一个空字符串),在这种情况下,我们假设他想无限循环并将​​ n 设置为 -1
  • 或者他输入了其他内容,在这种情况下,我们假设他输入了一个整数。然后我们用int(user_input)这个值将它从 a 转换str为 and int,并将它用作 my_func 的 n 参数
def my_func(c=1, n=-1):
    while True:
        if n>-1 and c > n:
            # if counter > number of iterations required
            break
        a = int(c * (c + 1)/2)
        yield a
        c += 1

user_input = input("Enter a number, or leave blank for infinite loop: ")
if user_input == "":
    n = -1
else:
    n = int(user_input)
    
my_object = my_func(n=n)

while True:
    try:
        print(next(my_object))
    except StopIteration:
        print("End of Iteration")
        break

下面给出了一个稍微复杂一点的版本,它确保用户输入是有效的。我们递归调用 get_valid_user_input 函数,直到用户输入为空字符串或整数。

def my_func(c=1, n=-1):
    while True:
        if n>-1 and c > n:
            # if counter > number of iterations required
            break
        a = int(c * (c + 1)/2)
        yield a
        c += 1

def get_valid_user_input():
    user_input = input("Enter a number, or leave blank for infinite loop: ")
    if user_input == "":
        return -1
    try:
        return int(user_input)
    except ValueError:
        print("Error! Please enter a number or leave blank.")
        return get_valid_user_input()

my_object = my_func(n=get_valid_user_input())
while True:
    try:
        print(next(my_object))
    except StopIteration:
        print("End of Iteration")
        break

推荐阅读