我是一个相对新手程序员,一直在通过HackerRank学习相关知识。然而,我目前卡在了一个任务上。我尝试了几种方法,但仍然无法弄清楚我的问题出在哪里。
任务要求:输入N并输出0到N之间的数字,不能包含任何空格或使用字符串方法。
N = int(input())
listofnum = []
for i in range(1, N +1):
listofnum.append(i)
print (*(listofnum))
输出:
1 2 3
我是一个相对新手程序员,一直在通过HackerRank学习相关知识。然而,我目前卡在了一个任务上。我尝试了几种方法,但仍然无法弄清楚我的问题出在哪里。
任务要求:输入N并输出0到N之间的数字,不能包含任何空格或使用字符串方法。
N = int(input())
listofnum = []
for i in range(1, N +1):
listofnum.append(i)
print (*(listofnum))
输出:
1 2 3
不使用任何字符串方法,只使用整除和 list
倒转数字,使用 sys.stdout.write
打印它们:
import sys
N = int(input())
for i in range(1,N+1):
l=[]
while(i):
l.append(i%10)
i //= 10
for c in reversed(l):
sys.stdout.write(chr(c+48))
或者像tdelaney建议的那样,更加硬编码的方法:
import os,sys,struct
N = int(input())
for i in range(1,N+1):
l=[]
while(i):
l.append(i%10)
i //= 10
for c in reversed(l):
os.write(sys.stdout.fileno(), struct.pack('b', c+48))
虽然这样做很有趣,但最好的方法是使用生成器推导式和 str.join()
和 str
构造函数来完成,只需要一行代码:
"".join(str(x) for x in range(1,N+1))
每个数字都被转换为字符串,而join
运算符只用空分隔符连接所有数字。
"".join
是一个内置的字符串方法。Chris 和 Alex 刚刚向我指出,它不是一个运算符。 - Christian Deanchr
仍然算作字符串方法吗?它调用了str.__init__
。这里可能需要调用struct.pack('b', c+48)
。 - tdelaneyos.write(sys.stdout.fileno(), struct.pack('b', 0x30))
不要字符串! - tdelaneyN = int(input())
answer = ''
for i in range(1, N + 1):
answer += str(i)
print(answer)
str.__new__/__init__/__add__
或类似的方法。我确信它比使用''.join
更符合问题要求。repr
而是使用 str
?对我来说,str
看起来太像“使用字符串方法”了。 - Scott Mermelsteinprint
中使用end
关键字即可:。
print(i, end="")
join
函数。而且看看我的答案(在tdelaney的帮助下): 没有任何附带条件 :) - Jean-François Fabre"".join
是一个内置的字符串 方法。Chris 和 Alex 刚刚向我指出了这一点。 - Christian Dean你可以利用print()
的sep
参数来“绑定”列表推导中的每个数字:
>>> print(*[el for el in range(0, int(input())+1)], sep="")
10
012345678910
>>>
join
是一个字符串方法,是吗? - Chris Mueller<built-in method join of str object at 0x10df76ab0>
。 - Alex Hallout = ''
for i in range(N):
out += str(i)
print(out)
你需要进行简单的数学计算。他们希望你将列表中的每个元素乘以十的幂并相加。例如,假设你有一个数组; a = [2,3,5] 你需要输出; 235
然后,你从右到左依次将循环元素乘以10^0、10^1和10^2。在生成字符串列表后使用此代码。
a = map(int,a)
for i in range(len(a)):
sum += (10**i)*a[-i]
print sum
你完成了!
total = 0; for i in range(n):; total = total * 10 + i
)。其次,我们没有得到 N
可以是多少的限制。这个想法适用于数字,但如果我们需要输出从0到11的数字呢?该算法将无法生成01234567891011。 - Scott Mermelstein
print(i, end="")
即可。 - Yevhen Kuzmovych