0

我希望能够使用函数和 while 循环打印代表数字的符号

前任:

number = 250
# symbols 
C = 100
^ = 50

应该打印

CC^

虽然打印一个函数可能有效,但尝试连接两个或多个打印函数会导致我出现类型错误:

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'

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

4

2 回答 2

0

您都在使用 & 分配给该函数内部的函数名称 numeric_UpArrow (这是一个函数)。

于 2012-04-18T16:51:47.753 回答
0

正如其他人所说,您在分配中重新使用已经与函数同名的东西时遇到问题:

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)

正如您在评论中看到的那样,对您的函数进行简单的重命名就可以解决这个问题,甚至可能对您的变量进行重命名。但是对于我认为“更大”的问题......

我觉得你原来的数学是一个不必要的循环。将您的 numeric_C 的行为与我的 numeric_c 进行比较:两者都产生相同的数字-C,但一个更可重用(通过将“C”作为字符串返回),而且它缺少循环和大量重新分配。

实际上,根据您对 number_par 的重新分配以减去最接近的 FLOORED 100 倍数,我找不到第二次循环发生的情况。换句话说,大部分逻辑都是无用的。您可以通过以下方式合理地完成整个功能:

'C'*int(number/100)
于 2012-04-18T18:02:56.497 回答