Ich bin sehr neu in der Programmierung, bitte helfen Sie mir dabei!

Ich möchte alle Werte von roman_numeral_map in der Befehlszeile drucken, erhalte jedoch viele Fehler.

Hier ist mein Code:

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

AKTUALISIEREN:

Dies ist der Traceback, den ich bekomme (danke)!

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
2
matos416 22 Nov. 2013 im 05:14

4 Antworten

Beste Antwort

Sie haben einige Probleme mit Ihrem Code. Ich habe sie unten mit Inline-Kommentaren behoben.

Wichtig ist, dass führende Leerzeichen in Python und Ihnen von Bedeutung sind muss self verwenden, um auf Instanzvariablen und -methoden zu verweisen.

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()`

Sehen Sie, wie es läuft!

3
Community 23 Mai 2017 im 12:05

Wenn Sie nur das Tupel durchlaufen und jede Auswahl ausdrucken möchten, können Sie dies versuchen.

>>> 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)

Es wäre großartig, ein Beispiel für Ihre gewünschte Ausgabe zu sehen.

Erklären Sie Ihre Klasse so, nur um loszulegen.

class roman1:
    pass

Instanziieren Sie dann eine Instanz der Klasse roman1.

roman = roman1()
0
Jesus Noland 22 Nov. 2013 im 01:27

Eine veränderte Klasse:

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))
0
Hugh Bothwell 22 Nov. 2013 im 01:31

Die Fehlermeldung tritt auf, weil der if-Block IN der Klassenverzögerung ist. 'roman1' wurde noch nicht erstellt. Außerdem sollten Sie im Konstruktor ein Attribut der Klasse (self.roman) deklarieren, bei dem es sich um eine Methode mit dem Namen __init__ handelt.

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

In diesem Fall ist es jedoch nutzlos und überflüssig. Wenn Sie die römische Variable außerhalb der Klasse festlegen möchten, lassen Sie den Teil 'self' weg

Angenommen, Ihre Datenstruktur ist korrekt (verschachtelte Tupel, um im Wesentlichen eine Tabelle mit zwei Spalten zu erstellen), können Sie jede Gruppierung folgendermaßen drucken:

for group in roman_numeral_map:
    print group

Verwenden Sie zum Drucken jedes Werts eine verschachtelte for-Schleife:

for group in roman_numeral_map:
    for value in group:
        print value
0
Timidger 22 Nov. 2013 im 01:34