我对编程很新,并且通过HackerRank学习了一些材料。但是,我目前仍然坚持这一目标或挑战。我尝试了几件事,但仍然无法弄清楚我到底做错了什么。
目标:读取N并输出0到N 之间的数字,不带任何空格或使用字符串方法。
N = int(input())
listofnum = []
for i in range(1, N +1):
listofnum.append(i)
print (*(listofnum))
输出:
1 2 3
答案 0 :(得分:2)
不使用任何字符串方法,只使用整数除法和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
运算符只是用空分隔符连接所有数字。
答案 1 :(得分:2)
float
这是我能想到的最接近的“不使用任何字符串方法”,虽然从技术上来说它在背景中使用N = int(input())
answer = ''
for i in range(1, N + 1):
answer += str(i)
print(answer)
或某些等价物。我当然认为它比使用str.__new__/__init__/__add__
更符合问题的要求。
答案 2 :(得分:1)
您可以在循环内打印数字。只需在end
中使用print
关键字:
print(i, end="")
答案 3 :(得分:0)
您可以使用print()
' sep
参数来"绑定"从列表理解中将每个数字组合在一起:
>>> print(*[el for el in range(0, int(input())+1)], sep="")
10
012345678910
>>>
答案 4 :(得分:0)
尝试' .join([str(i)for i in range(N)])
答案 5 :(得分:0)
实现此目的的一种方法是将数字附加到空白字符串。
out = ''
for i in range(N):
out += str(i)
print(out)
答案 6 :(得分:0)
你必须做一个简单的数学运算。他们期望做的是将每个列表元素乘以10的幂,并将它们相互加起来。举个例子,让我们说你有一个阵列; 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
你完成了!