我希望在一行中输入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',因此我不知道应该更改哪一部分代码才能达到正确的格式。错误的输入:
n: 5
2
6
3
7
1正确的输入及其相应的输出:
Input:
n: 5
2 6 3 7 1
Output:
**
*
***
*
*错误的代码是:
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('*')发布于 2021-05-11 22:18:26
这个很管用。但我想您想要验证输入的数字数量是否与n匹配,对吗?
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数字输入的情况下:
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('*')发布于 2021-05-11 22:20:57
这里是一行:
>>> 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调用中,则如下所示:
>>> 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
**
*
***
*
*发布于 2021-05-11 22:12:35
代码的问题在于,您尝试将整个字符串(数字之间的空格)转换为int。
解决方案是在输入时使用str.split()获取一个输入数字的列表,然后使用map()函数将列表中的每个数字转换为int。
试试下面的代码:
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('*')https://stackoverflow.com/questions/67494949
复制相似问题