Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:不支持**或pow()的操作数类型:';int';和';设置';_Python_Typeerror_Pow - Fatal编程技术网

Python TypeError:不支持**或pow()的操作数类型:';int';和';设置';

Python TypeError:不支持**或pow()的操作数类型:';int';和';设置';,python,typeerror,pow,Python,Typeerror,Pow,问题: 在不使用任何字符串方法的情况下,尝试打印以下内容: 123…n 请注意,“…”表示中间的连续值 范例 n=5 打印12345 我的解决方案 n = int(input()) sum=0 i=n while i>0: sum=sum + i*(10**{n-i}) i -= 1 print(sum) n=int(输入()) s、 m=0,1 对于范围(n,0,-1)内的i: s+=i*m m*=10 印刷品 首先:{n-i}将在n=0时计算为{-1},因为{x

问题: 在不使用任何字符串方法的情况下,尝试打印以下内容: 123…n 请注意,“…”表示中间的连续值

范例 n=5 打印12345

我的解决方案

n = int(input())
sum=0
i=n
while i>0:
    sum=sum + i*(10**{n-i})
    i -= 1
print(sum)   
n=int(输入())
s、 m=0,1
对于范围(n,0,-1)内的i:
s+=i*m
m*=10
印刷品

首先:
{n-i}
将在n=0时计算为
{-1}
,因为
{x}
是python中表示a的一种方式

第二:您要求方法打印数字字符串,但没有字符串操作(所以所有连接都应该在两个整数之间进行加法)。这里我假设接受的输入只能是正数

e、 g:

  • 输入5,输出=12345
  • 输入12,输出=12345678910112
当学习解决这样的“挑战”问题时,最好是测试驱动:编写一个简单的程序,然后与生成的预期结果进行比较/断言

这是生成输出(使用字符串操作)的正确但不可接受的方法:

然后试着逐步解决这个问题:假设只输入一位数。这里我们得到了一个想法,为了把一个数字放在另一个数字旁边,我们需要将第一个数字乘以10,然后将下一个数字乘以1。所以,你的解决方案,让它乘以十的幂,已经在正确的轨道上了

现在我们可以写:

inp = int(input())
result = 0
for i in range(1, inp+1):
  power_of_ten = 10**(inp-i)
  print("pot", power_of_ten)
  result = result + (i*power_of_ten)
  print("r", result)
print(result)
输出:

5
pot 10000
r 10000
pot 1000
r 12000
pot 100
r 12300
pot 10
r 12340
pot 1
r 12345
12345
5
12345
12345
assertion passed
$ python3 /tmp/a.py 
5
12345
12345
assertion passed
$ python3 /tmp/a.py 
12
123456789101112
123456789101112
assertion passed
此时,我们可以尝试断言输出是否与生成的输出(使用字符串操作的输出)相同:

输出:

5
pot 10000
r 10000
pot 1000
r 12000
pot 100
r 12300
pot 10
r 12340
pot 1
r 12345
12345
5
12345
12345
assertion passed
$ python3 /tmp/a.py 
5
12345
12345
assertion passed
$ python3 /tmp/a.py 
12
123456789101112
123456789101112
assertion passed
但如果我们使用两位数输入,输出将不再正确:

12
123456790122
123456789101112
Traceback (most recent call last):
  File "/tmp/c.py", line 14, in <module>
    assert(result == int(expected))
AssertionError
首先,我们尝试将输入以10为底进行对数运算,然后将结果降到最低(这样结果就不是十进制/小数);然后我们加1

下面是包含以下内容的代码:请注意,为了简单起见,我们正在向后循环(例如:12,11,10,9..1)

这里我添加了一个变量
pad
,它将包含下一次迭代中要添加的pad的数量,例如:input=5

  • 迭代=1 i=5 pad=1 result=5(所以下一个数字,即:4,将乘以10^1)
  • 迭代=2 i=4 pad=2 result=45(因此下一个数字,即:3,将乘以10^2)
  • 迭代=3 i=3 pad=3结果=345
  • 迭代=4 i=2 pad=4结果=2345
  • 迭代=5 i=1 pad=5结果=12345
当输入=12时

  • 迭代=1 i=12 pad=2结果=12
  • 迭代=2 i=11 pad=4结果=1112
  • 迭代=3 i=10 pad=6结果=101112
  • 迭代=4 i=9 pad=7结果=9101112
  • 迭代=5 i=8 pad=8结果=89101112
  • 迭代=6 i=7 pad=9结果=789101112
  • 迭代=7 i=6 pad=10结果=6789101112
  • 迭代=8 i=5 pad=11结果=56789101112
  • 迭代=9 i=4 pad=12结果=45678910112
  • 迭代=10 i=3 pad=13结果=3456789101112
  • 迭代=11 i=2 pad=14结果=23456789101112
  • 迭代=12 i=1 pad=15结果=12345678910112
输出:

5
pot 10000
r 10000
pot 1000
r 12000
pot 100
r 12300
pot 10
r 12340
pot 1
r 12345
12345
5
12345
12345
assertion passed
$ python3 /tmp/a.py 
5
12345
12345
assertion passed
$ python3 /tmp/a.py 
12
123456789101112
123456789101112
assertion passed
最后的代码是:

import math
inp = int(input())
result = 0
pad = 0
for i in range(inp, 0, -1):
  result = result + i*10**pad
  pad = pad + math.floor(math.log(i, 10)) + 1
print(result)
并说明为什么会出现这种错误

我想知道,你甚至需要做算术吗?这提供了一个字符串作为参数,但实际上不使用任何字符串方法(例如)。有人可能会说,这遵循了“不使用任何字符串方法…”的字母(如果不是精神的话)


你在代码中所说的
{n-i}
是什么意思?
{n-1}
是一个集合显示;大括号和圆括号不能互换。另外,请查看而不是重复使用
**
运算符。是的,我是想提高功率。我是一个初学者,这是我能想到的逻辑,所以可能不是完全证明。我通过简单地将m定义为n-i并使用它来解决错误。如果值超过9,该方法也会失败。因此,对于10,下一次迭代将增加90,使其成为100。因此,我们得到的不是12345678910,而是1234567900。我想任何基于加法的方法都会失败。使用字符串是可行的,但问题明确指出不要使用:)这将有助于添加对您发布的代码工作的原因/方式的描述我也考虑过使用空字符串分隔符,但我认为它仍然使用字符串(传递给sep参数的空字符串)。此外,这个问题似乎确实是一个家庭作业问题。从问题的提出方式来看,这是否重要还不清楚。