Ich habe eine Liste von ganzen Zahlen - gibt es eine Bibliothek, um sie in reine Text-Rangliste zu konvertieren? IE: 1,2,3 -> "erste, zweite, dritte"?Gibt es eine Bibliothek, um Ganzzahl in erste/zweite/dritte zu konvertieren
Antwort
Wie hoch möchten Sie gehen? (Erwarten Sie, je höher ist als, sagen wir, „zwanzigste“?)
Vielleicht brauchen Sie nur ein dict
,
nth = {
1: "first",
2: "second",
3: "third",
4: "fourth"
# etc
}
Es wird nur einfacher nach "zwanzigsten" :) –
Je nach Situation könnten Sie finden es sinnvoll, die ganze Zahl zu erhalten und fügen Sie " st "," nd "," rd "und" th ". Wenn ja, ist hier ein einfacher Algorithmus:
HINWEIS: Dieser Algorithmus ist in Java geschrieben. Ich kenne Python nicht. Jeder, der es in Python umschreiben möchte, sei mein Gast.
public static String appendInt(int number) {
String value = String.valueOf(number);
if(value.length() > 1) {
// Check for special case: 11 - 13 are all "th".
// So if the second to last digit is 1, it is "th".
char secondToLastDigit = value.charAt(value.length()-2);
if(secondToLastDigit == '1')
return "th";
}
char lastDigit = value.charAt(value.length()-1);
switch(lastDigit) {
case '1':
return "st";
case '2':
return "nd";
case '3':
return "rd";
default:
return "th";
}
}
So
System.out.println(1 + appendInt(1));
System.out.println(2 + appendInt(2));
System.out.println(3 + appendInt(3));
System.out.println(4 + appendInt(4));
System.out.println(5 + appendInt(5));
System.out.println(11 + appendInt(11));
System.out.println(21 + appendInt(21));
Displays
1st
2nd
3rd
4th
5th
11th
21st
Das ist ein toller Weg, darüber zu gehen. – answerSeeker
nicht kommentieren ryvantage der Post wegen der Punkte, aber ich schrieb den gleichen Code für Python:
def appendInt(num):
if num > 9:
secondToLastDigit = str(num)[-2]
if secondToLastDigit == '1':
return 'th'
lastDigit = num % 10
if (lastDigit == 1):
return 'st'
elif (lastDigit == 2):
return 'nd'
elif (lastDigit == 3):
return 'rd'
else:
return 'th'
def appendInt2(num):
value = str(num)
if len(value) > 1:
secondToLastDigit = value[-2]
if secondToLastDigit == '1':
return 'th'
lastDigit = value[-1]
if (lastDigit == '1'):
return 'st'
elif (lastDigit == '2'):
return 'nd'
elif (lastDigit == '3'):
return 'rd'
else:
return 'th'
Die das zweite ist eher ein direktes trans lation, aber ich fand, dass die erste Variante wesentlich schneller ist:
Fr 28 11.48.13 2015 August führt in die Vene
300000005 function calls in 151.561 seconds
Ordered by: call count, name/file/line
ncalls tottime percall cumtime percall filename:lineno(function)
100000000 6.674 0.000 6.674 0.000 {len}
100000000 43.064 0.000 43.064 0.000 test.py:7(appendInt)
100000000 66.664 0.000 73.339 0.000 test.py:22(appendInt2)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 151.561 151.561 <string>:1(<module>)
1 0.000 0.000 151.561 151.561 test.py:51(main)
1 16.737 16.737 59.801 59.801 test.py:39(test1)
1 18.421 18.421 91.759 91.759 test.py:45(test2)
Array [-2] ist der vorletzte Array-Wert in Python? * cool * – ryvantage
ähnlich @Hugh Bothwellwas following, mit Ihrem nur keine dict
(seit Tasten sind schon schön und numerisch), ich habe folgendes zusammengestellt „Motto“:
ordinal=lambda x:["first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","eleventh","twelfth"][x-1]
, die alle Fälle abdeckt, bis zu 12. Wenn y Du brauchst höhere (in die Hunderte usw.), dann wirst du wahrscheinlich etwas robusteres brauchen (mit Rekursion, die ich mir vorstellen kann, usw.).
Eine schöne und einfache Rewrite:
def num_to_ith(num):
"""1 becomes 1st, 2 becomes 2nd, etc."""
value = str(num)
before_last_digit = value[-2]
last_digit = value[-1]
if len(value) > 1 and before_last_digit == '1': return value +'th'
if last_digit == '1': return value + 'st'
if last_digit == '2': return value + 'nd'
if last_digit == '3': return value + 'rd'
return value + 'th'
Das Python inflect
Paket hat ein Verfahren zur Ziffern in ordinals Umwandlung:
import inflect
p = inflect.engine()
for i in range(1,25,5):
print(p.ordinal(i))
Displays:
1st
6th
11th
16th
21st
Haha, super! Dies ** ist ** die richtige Antwort auf die Frage. – Atcold
Wow, was ich gesucht habe !! – answerSeeker
'p.number_to_words (p.ordinal (i))' wird es als 'first',' second', 'third' usw. anzeigen –
Mein Code für diese verwendet die Liste, ganzzahliger Modulus, um die erste Ziffer und die ganzzahlige Stockwerkteilung zu finden, um nach aus ru zu suchen 11 le bis 13.em
def stringify(number):
suffix = ["th","st","nd","rd","th","th","th","th","th","th"]
return str(number) + suffix[number % 10] if str(number // 10)[-1] != 1 else str(number) + "th"
Die letzte Zeile lesbarer:
if str(number // 10)[-1] != '1':
return str(number) + suffix[number % 10]
else:
return str(number) + "th"
Grundsätzlich Ich überprüfe die zweite Ziffer für 1 *, die einen möglichen 11. angibt, 12., 13. Regelbrecher.Für die Regelhalter wird die Liste durch den Rest einer Division durch 10 (Modulooperator) referenziert.
Ich habe keine Tests für Code-Effizienz durchgeführt, und die Überprüfung gegen die Länge ist viel besser lesbar, aber das funktioniert.
* (str (Anzahl) [- 2]. Erzeugt einen Indexerror, wenn die Eingabe eine einstellige wird mit Bodenteilung auf ganze Zahlen ergibt immer mindestens 1 Stelle, so dass die Zeichenfolge immer eine -1 Index haben)
- 1. Gibt es eine statische Bibliothek, um ein Framework zu erstellen?
- 2. Gibt es eine Android-Bibliothek, um Gitarrenakkorde zu erkennen?
- 3. Konvertieren Zeichenfolge in Ganzzahl
- 4. Gibt es etwas, um xml -> yaml direkt zu konvertieren?
- 5. Konvertieren einer Ganzzahl in eine Byte-Array
- 6. Konvertieren einer Zeichenfolge in eine Ganzzahl gibt 2147483647
- 7. Gibt es eine Alternative zu opencore amr, um wav zu amr auf iOS zu konvertieren?
- 8. Gibt es für eine AST eine funktionierende Bibliothek, um die Quelle zu erhalten?
- 9. Gibt es in .NET eine DECAPTCHA-Bibliothek?
- 10. gibt es sowieso um von Double zu BigInteger zu konvertieren?
- 11. Gibt es ein Programm, um Assembly in C++ zu konvertieren?
- 12. Gibt es eine Bibliothek getNLMultibutton?
- 13. Gibt es eine effiziente Methode, um numpy.darray in eine Liste zu konvertieren?
- 14. Gibt es eine Möglichkeit, in URL Yii2 "+" in "-" zu konvertieren?
- 15. Gibt es zu Java's DisplayTag in PHP eine gleichwertige Bibliothek?
- 16. Gibt es eine Bibliothek, um CSS-Sprites automatisch auszuführen?
- 17. Gibt es eine Möglichkeit, ein Array in Klasseneigenschaften zu konvertieren?
- 18. Konvertieren von Monatsnamen in Ganzzahl
- 19. Konvertieren einer Eingabezeichenfolge in eine Ganzzahl
- 20. Gibt es eine einfache Möglichkeit, Kriterien in HQL zu konvertieren?
- 21. Gibt es eine PHP-Funktion, um eine Abfrage-Zeichenfolge in ein Array zu konvertieren?
- 22. Gibt es einen generischen CIL-Code, um eine beliebige Typinstanz in eine Zeichenfolge zu konvertieren?
- 23. Gibt es eine 128-Bit-Ganzzahl in gcc?
- 24. Konvertieren einer Zeichenfolge in eine Ganzzahl in Oracle
- 25. Gibt es eine kostenlose Möglichkeit, RTF in PDF zu konvertieren?
- 26. Gibt es eine Möglichkeit, Funktionstyp in Haskell zu konvertieren?
- 27. Gibt es eine C++ plattformübergreifende USB-Bibliothek?
- 28. Gibt es eine hashmap-Bibliothek für JavaScript?
- 29. JavaScript: Gibt es eine utils-Bibliothek?
- 30. Gibt es eine Alternative zu AppDomain.GetAssemblies auf der portablen Bibliothek?
http://www.daniweb.com/software-development/python/code/216839/number-to-word-converter-python –
Als ich mit der Universität anfing, war es eine unserer Aufgaben am ersten Tag genau das zu schreiben Java. Wenn Sie etwas Erfahrung in der Programmierung haben, sollten Sie nicht länger als 30 Minuten brauchen. –
30 Minuten? wirklich lol .. du meinst 1 minuten .... http://jsfiddle.net/cmvLS/ (javascript) – ncubica