Tôi có danh sách các số nguyên - có thư viện để chuyển đổi chúng thành xếp hạng văn bản thuần túy không? IE: 1,2,3 -> "đầu tiên, thứ hai, thứ ba"?Có thư viện nào để chuyển đổi số nguyên thành thứ nhất/thứ hai/thứ ba
Trả lời
Bạn dự định sẽ đi bao nhiêu? (Bạn có bao giờ mong đợi cao hơn, nói rằng, "hai mươi"?)
Có lẽ bạn chỉ cần một dict
,
nth = {
1: "first",
2: "second",
3: "third",
4: "fourth"
# etc
}
Nó chỉ trở nên dễ dàng hơn sau khi "twentieth" :) –
Tùy thuộc vào tình hình của bạn, bạn có thể tìm thấy nó hữu ích để giữ lại nguyên và thêm " st "," nd "," rd "và" th ". Nếu vậy, đây là một thuật toán đơn giản:
LƯU Ý: Thuật toán này được viết bằng Java. Tôi không biết Python. Bất cứ ai muốn viết lại nó bằng Python, là khách của tôi.
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";
}
}
Vì vậy
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));
màn
1st
2nd
3rd
4th
5th
11th
21st
Đó là một cách tuyệt vời để đi về nó. – answerSeeker
không thể bình luận về bài đăng ryvantage vì điểm nhưng tôi đã viết mã tương tự cho 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'
Các thứ hai là phần chuyển tiếp trực tiếp lation, nhưng tôi thấy rằng sự thay đổi đầu tiên là nhanh hơn đáng kể:
Fri 28 tháng 8 11:48:13 2015 kết quả
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)
mảng [-2] là giá trị mảng thứ hai để cuối cùng trong Python? * cool * – ryvantage
Tương tự như các tĩnh mạch @Hugh Bothwellwas following, chỉ không sử dụng một dict
(vì bạn phím đã tốt đẹp và số), tôi đã đặt lại với nhau sau "lót":
ordinal=lambda x:["first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","eleventh","twelfth"][x-1]
nào bao gồm tất cả trường hợp lên đến 12. Nếu y ou cần cao hơn (vào hàng trăm, vv), sau đó bạn có thể sẽ cần một cái gì đó mạnh mẽ hơn (với đệ quy tôi tưởng tượng, vv).
Một tốt đẹp và đơn giản viết lại:
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'
Các python inflect
gói có một phương pháp để chuyển đổi các chữ số vào ordinals:
import inflect
p = inflect.engine()
for i in range(1,25,5):
print(p.ordinal(i))
hiển thị:
1st
6th
11th
16th
21st
Haha, tuyệt vời! Đây ** IS ** câu trả lời đúng cho câu hỏi. – Atcold
Wow rằng những gì tôi đang tìm kiếm !! – answerSeeker
'p.number_to_words (p.ordinal (i))' sẽ hiển thị nó là 'first',' second', 'third', v.v. –
Mã của tôi cho điều này sử dụng danh sách, mô đun số nguyên để tìm số đầu tiên và phân chia tầng nguyên để kiểm tra ru le 11 thru 13.
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"
Dòng cuối cùng dễ đọc hơn:
if str(number // 10)[-1] != '1':
return str(number) + suffix[number % 10]
else:
return str(number) + "th"
Về cơ bản, tôi đang kiểm tra các chữ số thứ hai trong vòng 1 * mà chỉ một ngày 11, 12, ngắt nguyên tắc thứ 13 có thể.Đối với người giữ nguyên quy tắc, danh sách được tham chiếu bởi phần còn lại của số chia cho 10 (toán tử mô đun).
Tôi chưa thực hiện bất kỳ thử nghiệm nào về hiệu quả mã và việc kiểm tra độ dài có thể đọc được nhiều hơn, nhưng điều này có hiệu quả.
* (str (number) [- 2] tạo ra một IndexError nếu đầu vào là một chữ số. Sử dụng phân chia tầng trên các số nguyên luôn dẫn đến ít nhất 1 chữ số để chuỗi luôn có chỉ số -1)
- 1. Chuyển đổi số được viết thành từ thành số nguyên?
- 2. Chuyển đổi thư viện C# thành MSTest
- 3. Python: Chuyển đổi chuỗi thành số nguyên
- 4. Chuyển đổi Thư viện tĩnh thành Thư viện được chia sẻ?
- 5. Chuyển đổi chuỗi có chứa một số thành số nguyên
- 6. Thư viện ActionScript để chuyển đổi Markdown thành HTML
- 7. Rails Di chuyển để chuyển đổi chuỗi thành số nguyên?
- 8. Ruby - Chuyển đổi số nguyên thành chuỗi
- 9. Java Chuyển đổi số nguyên thành số nguyên hex
- 10. Python chuyển đổi Tuple thành Số nguyên
- 11. Chuyển đổi số nguyên thành chuỗi
- 12. Chuyển đổi size_t thành số nguyên (C++)
- 13. Làm cách nào để ngăn thư viện của bên thứ ba hiển thị MessageBox?
- 14. Chuyển đổi std :: string thành số nguyên
- 15. Haskell Chuyển đổi số nguyên thành Int?
- 16. Chuyển đổi 2 byte thành số nguyên
- 17. Chuyển đổi số nguyên thành một bit đại diện
- 18. Một thư viện để chuyển đổi svg thành hình ảnh?
- 19. Có cách nào trong Java để chuyển đổi một số nguyên thành thứ tự của nó không?
- 20. Chuyển đổi MFC CString thành số nguyên
- 21. Java chuyển đổi float thành số nguyên
- 22. Làm cách nào để thêm thư viện của bên thứ ba vào dự án Talend?
- 23. Cách tốt nhất để tích hợp thư viện của bên thứ ba trong Android studio
- 24. Xử lý thay đổi trong thư viện của bên thứ ba phụ thuộc
- 25. Tạo khung công tác iOS: bao gồm thư viện của bên thứ ba và mã số
- 26. Có thư viện giao diện người dùng bên thứ ba nào cho Android không?
- 27. Làm thế nào để chuyển đổi một chuỗi hoặc số nguyên thành nhị phân trong Ruby?
- 28. Thư viện Scala để chuyển đổi các số (Int, Long, Double) thành/từ Array [Byte]
- 29. Chuyển đổi số thành danh sách số nguyên
- 30. Làm cách nào/ở đâu để gửi thư viện của bên thứ ba bằng .NET DLL?
http://www.daniweb.com/software-development/python/code/216839/number-to-word-converter-python –
Khi tôi bắt đầu học đại học, đó là một trong những nhiệm vụ của chúng tôi vào ngày đầu tiên để viết chính xác điều này trong Java. Nếu bạn có một chút kinh nghiệm trong lập trình, điều này sẽ không mất nhiều thời gian hơn 30 phút. –
30 phút? thực sự lol .. bạn có nghĩa là 1 phút .... http://jsfiddle.net/cmvLS/ (javascript) – ncubica