2016-04-27 7 views
-1

Ich schreibe ein Programm, das eine Note in Konzerttonhöhe zu einer Tonhöhe auf einem nicht konzertanten Instrument ändern soll. Irgendjemand. Das habe ich schon.Wie ändere ich einen Buchstaben oder 2 in eine voreingestellte Nummer?

F=5 
E#=5 
Fb=4 
E=4 
Eb=3 
Ds=3 
D=2 
Db=1 
Cs=1 
C=0 
B#=0 
Cb=-1 
B=-1 
Bb=-2 
A#=-2 
A=-3 
Ab=-4 
G#=-4 
G=-5 
Gb=-6 
F#=-6 

Ich nannte die alle # Buchstaben s in Programm Ursache # in Python Dinge Kommentar

und die Benutzer einen Brief macht, dass sie auf dem Klavier hören wollen.

snote=raw_input("What is the concert note that you want to play? ") 

Was ist dann das Instrument in aufgeschlagen wird.

instr=raw_input("What pitch is your instrument in? ") 

Dann druckt das Programm die Notiz, dass das Gerät den Kammerton zu spielen, um zu spielen, muss

so auf ein zu Konzert Bb wollen Bb-Tonhöhe (-2) Instrument ist Ab. C = (0)

if note=="BB": 
    newnote=Bb-A 
print newnote 

Dieser Teil mit ich bin zu kämpfen versuchen, einen Brief zu übernehmen, dass der Benutzer in eine Zahl so dass das Programm die Mathematik kann dann die transponierte Note ausdrucken. Wenn jemand weiß, wie man einen Buchstaben zu einer voreingestellten Nummer ändert, werde ich es sehr schätzen, weil ich dies auch für ein anderes Programm tun muss, das ich versuche zu tun. Aber danke, dass du es versuchst, wenn du es nicht kannst.

Antwort

0

Sie gehen wirklich in die falsche Richtung. Sie sollten ein Wörterbuch erstellen, um Benutzereingaben in eine bestimmte Zahl zu konvertieren. Hier ist ein Beispiel. Ich benutzte Ihre Methode, um die # durch s zu ersetzen.

notesDict = {"F" : 5, "Es" : 5, "Fb" : 4, "E" : 4} 
key = input("What key do you want to hear ").replace("#","s") 
print(notesDict[key]) 

# What key do you want to hear: E# 
# 5 
+0

Beachten Sie, dass "Eingabe" in Python 3 nur so funktioniert; Für Python 2.7 (welches OP benutzt) ist 'raw_input' immer noch der richtige Weg. –

+0

Das ist wahr, habe nicht bemerkt, dass op nicht auf 3 stand. – Keatinge

+3

Da der Schlüssel eine Zeichenkette ist, müssen sie nicht die '#' durch 's' ersetzen, sie könnten einfach' {... verwenden, "E #": 5, ..} ' – rj93

0

können Sie ein dictionary

notes = {"F" : 5, "E#" : 5, "Fb" : 4, "E" : 4} 
value = raw_input() 
print(notes[value]) if value in notes else print("Invalid input") 

auch verwenden wird # als Kommentar behandelt, wenn Python sie als separate Token sieht. Wenn die # innerhalb "E#" für zB ist. Python behandelt genau wie jedes andere Zeichen.

+0

Sie müssen auch' # 'die Benutzertypen durch' s' ersetzen. – Keatinge

+0

@Racialz Wo ist das vom OP? – bashrc

+0

Es macht einfach keinen Sinn, Es einzugeben, wenn Sie E # hören wollen. Op sagt 'Und der Benutzer tippt einen Buchstaben ein, den er auf dem Klavier hören will.' Er sagt nicht' und op gibt eine spezielle umgewandelte Saite an, die nicht wirklich das ist, was er hören will' – Keatinge

Verwandte Themen