我想使用命令行打印所有值

时间:2013-11-22 01:14:31

标签: python

我对编程很陌生,所以请帮助我!

我希望在命令行中打印roman_numeral_map的所有值,但是我遇到了很多错误。

这是我的代码:

class roman1:

    roman_numeral_map = (('M',  1000),
                     ('CM', 900),
                     ('D',  500),
                     ('CD', 400),
                     ('C',  100),
                     ('XC', 90),
                     ('L',  50),
                     ('XL', 40),
                     ('X',  10),
                     ('IX', 9),
                     ('V',  5),
                     ('IV', 4),
                     ('I',  1))

    def to_roman():
        '''convert integer to roman numeral'''
        for numeral, integer in roman_numeral_map:
            print(numeral, integer)


    if __name__ == '__main__':
        self.roman = roman1()
        roman.to_roman

更新:

这是我得到的追溯(谢谢)!

Traceback (most recent call last):
  File "/Users/michaelmatos/PycharmProjects/diveintopython3/roman1.py", line 4, in <module>
    class roman1:
  File "/Users/michaelmatos/PycharmProjects/diveintopython3/roman1.py", line 27, in roman1
    self.roman = roman1()
NameError: name 'roman1' is not defined

4 个答案:

答案 0 :(得分:3)

您的代码存在一些问题,我已在下面修改了内容。

重要的是,leading whitespace is significant in Python您需要use self来引用实例变量和方法。

class roman1:
    roman_numeral_map = (('M',  1000),
                         ('CM', 900),
                         ('D',  500),
                         ('CD', 400),
                         ('C',  100),
                         ('XC', 90),
                         ('L',  50),
                         ('XL', 40),
                         ('X',  10),
                         ('IX', 9),
                         ('V',  5),
                         ('IV', 4),
                         ('I',  1))

    def to_roman(self): # Instance methods take `self`
        '''convert integer to roman numeral'''
        for numeral, integer in self.roman_numeral_map: # Note: `self`
            print(numeral, integer)


if __name__ == '__main__': # Note: Indent to same level as `class` above
    roman = roman1() # `roman` is global, no need for `self`
    roman.to_roman() # Use `()` to *call* `to_roman()`

See it run

答案 1 :(得分:0)

如果你只想迭代元组并打印出每个选择,那么你可以试试这个。

>>> i = 0
>>> while i < len(m):
...     print m[i]
...     i += 1
... 
('M', 1000)
('CM', 900)
('D', 500)
('CD', 400)
('C', 100)
('XC', 90)
('L', 50)
('XL', 40)
('X', 10)
('IX', 9)
('V', 5)
('IV', 4)
('I', 1)

很高兴看到你想要的输出的例子。

宣布你的课程就这样开始。

class roman1:
    pass

然后实例化一个roman1类的实例。

roman = roman1()

答案 2 :(得分:0)

出现错误消息,因为if块处于类减速状态。 'roman1'还没有制作完成。此外,您应该在构造函数中声明类的属性(self.roman),这是一个名为__init__的方法

class roman1:
    def __init__():
        self.roman = self

虽然在这种情况下,它是无用的和多余的。如果你想在类之外创建罗马变量,省略'self'部分

假设您的数据结构正确(嵌套元组基本上创建了一个包含两列的表),您可以打印每个分组:

for group in roman_numeral_map:
    print group

要打印每个值,请使用嵌套for循环:

for group in roman_numeral_map:
    for value in group:
        print value

答案 3 :(得分:0)

改变的类:

class RomanNumeral():
    values = [
        ('M', 1000),
        ('CM', 900),
        ('D',  500),
        ('CD', 400),
        ('C',  100),
        ('XC', 90),
        ('L',  50),
        ('XL', 40),
        ('X',  10),
        ('IX', 9),
        ('V',  5),
        ('IV', 4),
        ('I',  1)
    ]

    def __init__(self, i):
        self.i = i

    def __str__(self):
        num = []
        n = self.i
        for ch,val in RomanNumeral.values:
            while n >= val:
                num.append(ch)
                n -= val
        return ''.join(num)

if __name__ == '__main__':
    print(RomanNumeral(4))