首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在一行中得到n个数字,并将它们放入一个列表中,然后根据列表在python中打印字符?

如何在一行中得到n个数字,并将它们放入一个列表中,然后根据列表在python中打印字符?
EN

Stack Overflow用户
提问于 2021-05-11 22:08:13
回答 4查看 64关注 0票数 0

我希望在一行中输入n个数字,只有空格。我试图在.split中使用ai = [int(input()) for ai in range(n)],但出现了以下错误:ai = [int(input()) for ai in range(n)].split(' ') ValueError: invalid literal for int() with base 10: '2 6 3 7 1',因此我不知道应该更改哪一部分代码才能达到正确的格式。错误的输入:

代码语言:javascript
运行
复制
n: 5
2
6
3
7
1

正确的输入及其相应的输出:

代码语言:javascript
运行
复制
Input:
n: 5
2 6 3 7 1 

Output:
**
*
***
*
*

错误的代码是:

代码语言:javascript
运行
复制
n = int(input('n: '))
ai = [int(input()) for ai in range(n)]
for i in ai:
    if i == 1:
        print('*')
    elif i == 2:
        print('**')
    elif i == 3:
        print('***')
    elif i > 3:
        print('*')
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-05-11 22:18:26

这个很管用。但我想您想要验证输入的数字数量是否与n匹配,对吗?

代码语言:javascript
运行
复制
n = int(input('n: '))
ai = [int(i) for i in input().split()]
for i in ai:
    if i == 1:
        print('*')
    elif i == 2:
        print('**')
    elif i == 3:
        print('***')
    elif i > 3:
        print('*')

在需要验证n数字输入的情况下:

代码语言:javascript
运行
复制
n = int(input('n: '))

ai = []
while len(ai) != n:
    ai = [int(i) for i in input('Enter ' + str(n) + ' values: ').split()]

for i in ai:
    if i == 1:
        print('*')
    elif i == 2:
        print('**')
    elif i == 3:
        print('***')
    elif i > 3:
        print('*')
票数 1
EN

Stack Overflow用户

发布于 2021-05-11 22:20:57

这里是一行:

代码语言:javascript
运行
复制
>>> print('\n'.join('*' * (n if n in (2, 3) else 1) for n in map(int, input().split())))
2 6 3 7 1
**
*
***
*
*

请注意,如果在一行上输入输入,则不需要提前提示输入数量,因为字符串的末尾告诉用户何时输入数字。

关键是将int函数应用到split()函数生成的列表中,而不是在将整个字符串转换为int之前将其转化为int

如果将多余的input()包含在单个print调用中,则如下所示:

代码语言:javascript
运行
复制
>>> print(input() * 0 + '\n'.join('*' * (n if n in (2, 3) else 1) for n in map(int, input().split())))
5
2 6 3 7 1
**
*
***
*
*
票数 1
EN

Stack Overflow用户

发布于 2021-05-11 22:12:35

代码的问题在于,您尝试将整个字符串(数字之间的空格)转换为int。

解决方案是在输入时使用str.split()获取一个输入数字的列表,然后使用map()函数将列表中的每个数字转换为int

试试下面的代码:

代码语言:javascript
运行
复制
n = int(input('n: '))
ai = list(map(int, input().split()))
for i in ai:
    if i == 1:
        print('*')
    elif i == 2:
        print('**')
    elif i == 3:
        print('***')
    elif i > 3:
        print('*')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67494949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档