如何在不获取TypeError的情况下将字符串相乘:sequence不能乘以'function'类型的nonit?

2024-06-15 23:40:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用函数和while循环打印代表数字的符号

例如:

number = 250
# symbols 
C = 100
^ = 50

应打印

^{pr2}$

虽然打印一个函数可以工作,但尝试连接两个或多个打印函数会导致类型错误:

TypeError: can't multiply sequence by non-int of type 'function'

number = 251;
def numeral_C(number_par):
  while number_par >=100:
    numeral_C = number_par / 100
    print "C"*numeral_C,
    number_par = number_par - numeral_C*100
  return ""
def numeral_UpArrow(number_par):
  while number_par >=50:
    numeral_upArrow = number_par / 50
    print "^"*numeral_UpArrow, #error
    number_par = number_par - numeral_UpArrow*50
  return ""
etruscan_C = str(numeral_C(number))
etruscan_UpArrow = str(numeral_UpArrow(number)) #error

print etruscan_C+etruscan_UpArrow

Traceback (most recent call last):
  File "/Applications/Wing IDE/WingIDE.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 15, in 
  File "/Applications/Wing IDE/WingIDE.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 11, in numeral_UpArrow

**TypeError: can't multiply sequence by non-int of type 'function'

我想知道,有没有一种方法可以打印两个或多个函数而不出错?在


Tags: 函数numberbycanmultiplyintprintsequence
2条回答

您都在使用&赋值给函数内部的函数名numeric_UpArrow(它是一个函数)。在

正如其他人所说,在赋值中重复使用与函数同名的内容时存在一个问题:

def numeral_C(number_par):
   while number_par >=100:
      #this numeral_C is already a known function name, now youre reusing it as an int
      numeral_C = number_par / 100
      #you're using print inside a function, not a best practice, but.....
      print "C"*numeral_C,
      #uncomment the below line to see why the loop is unnecessary
      #print '%d = %d - %d' % (number_par - numeral_C*100, number_par, numeral_C*100)
      number_par = number_par - numeral_C*100
   return ""
   #you're printing, rather than returning, making this useless, and you're str()-ing the "" on return

number = 25101;
etruscan_C = str(numeral_C(number))
print

def numeral_c(number_par):
   num_c = number_par / 100
   return 'C'*num_c

print numeral_c(number)

正如您在注释中看到的,简单地重命名函数可以解决这个问题,甚至可以重命名变量。但在我认为的“更大”问题上。。。在

我觉得你的原始数学是一个不必要的循环。比较一下你的数字C和我的数字C的行为:两者的结果都是相同的数字C,但其中一个更可重用(通过将'C'作为字符串返回),而且它缺少循环和大量的重新分配。在

实际上,我找不到循环会再次发生的情况,基于您重新分配的number_par减去最近的楼层100倍。换言之,这种逻辑大部分是无用的。您可以通过以下方式合理地完成整个功能:

^{pr2}$

相关问题 更多 >