Zaman deneme yarışı için yazılım


11

Yerel bir zaman deneme yarışı yürütmek için bir yazılım parçası arıyorum. Yaklaşık 50 bisikletçi olacak: çıplak kalem ve kağıtla yarış sonuçları hazırlama işini yapmak için yeterince büyük ve zaman alıcı, ancak tam teşekküllü yarış yonga sistemleri kullanmak için çok küçük.

Sürücüler bir dakika arayla başlayacak ve bitiş çizgisinde operatöre zamanı bildiren bir adam olacak. Yani operatör sadece sürücünün programa zamanını girmelidir. Program, biniciler çizgiyi geçerken anında sonuç tablosunu üretebilmelidir.

Bu tür bir yazılım oluşturmanın o kadar da zor olmadığını anlıyorum, ancak sadece etkinlikim için kullanabileceğim ücretsiz çözümler olduğunu umuyordum. Daha önce duyduysanız lütfen bize bildirin.


1 saat içinde python'da bir tane yapacağım :)
Tim

Evet, doğru, kendim yazmak nispeten kolay. Ancak, orada olmasını istediğim tüm yararlı özellikleri düşünmeye başladığımda, sonuçları içeren tabloyu düzenlemek (gerekirse girişleri otomatik olarak hareket ettirmek), yazıcı dostu çıktı oluşturmak, excel'e aktarmak, sonuçları bisiklet türüne göre filtrelemek gibi (yol bisikleti vs aero) veya yaş grupları, vb Bunun yerine googling yatırım yapmak daha kolay olabileceğini fark :-)
krakovjak

4
Neden sadece bir e-tablo kullanmıyorsunuz?
200_success

1
Bu soruyu konu dışı olarak kapatmak için oy kullanıyorum çünkü bisikletle ilgili yazılım konu dışı. Lütfen softwarerecs.stackexchange.com adresine sorun ve bisiklete binmek için etiketi kullanın.
Criggie

Yanıtlar:


7

Bu, kurulumu kolay bir programlama dili olan python'da (2.7 değil, sadece 3.X) çalışacaktır. Aşağıdakileri bir dosya sonu olarak kaydedin .py- örn timetrials.py. Ardından IDLE3'ü (başlat menüsü) açın ve dosyayı ( Ctrl+ O) açın. Son olarak, F5başlatmak için tuşuna basın .

import datetime
from operator import itemgetter

def get_int_input(prompt, min_=0, max_=None):
    """Get a valid integer input."""
    while True:
        try:
            i = int(input(prompt))
        except ValueError:
            print("Please enter an integer.")
        else:
            if min_ is not None and i < min_:
                print("Must be at least {0}.".format(min_))
                continue
            elif max_ is not None and i > max_:
                print("Must be at most {0}.".format(max_))
                continue
            return i

def get_time():
    """"Get a time input as a datetime.time object."""
    h = get_int_input("Hours (0-23): ", max_=23)
    m = get_int_input("Minutes (0-59): ", max_=59)
    s = get_int_input("Seconds (0-59): ", max_=59)
    ms = get_int_input("Milliseconds (0-999): ", max_=999)
    return datetime.time(h, m, s, ms*1000)

def get_results(competitors):
    """Get a dict of finishing times for all competitors."""
    results = {}
    for _ in range(competitors):
        while True:
            competitor = get_int_input("Enter competitor number: ", min_=1, max_=competitors+1)
            if competitor not in results:
                results[competitor] = get_time()
                break
            print("Time already entered.")
        print_results(results)
    return results

def print_results(results):
    """Display the race results in a table, fastest first."""
    linet = '┌' + "─" * 12 + '┬' + '─' * 17 + '┐'
    linec = '├' + "─" * 12 + '┼' + '─' * 17 + '┤'
    lineb = '└' + "─" * 12 + '┴' + '─' * 17 + '┘'
    print(linet)
    print("│ Competitor │ Time (H:M:S)    │")
    for n, t in sorted(results.items(), key=itemgetter(1)):
        print(linec)
        print("│ {0:<10d} │ {1!s:<15} │".format(n, t))
    print(lineb)

def race():
    """Handle race times for a user-specified number of competitors."""
    n = get_int_input("Enter number of competitors (2-): ", min_=2)
    results = get_results(n)

if __name__ == "__main__":
    race()

Herkes bittiğinde, şuna benzer:

┌──────────────┬───────────────┐  
│  Con Num     │ Time H:M:S    │  
├──────────────┼───────────────┤  
│  1           │ 5:4:3.2       │  
├──────────────┼───────────────┤  
│  2           │ 8:7:6.5       │  
├──────────────┼───────────────┤  
│  3           │ 2:2:2.2       │  
└──────────────┴───────────────┘  

3
Her şey yolunda ve iyi, ama ticari bir paket satın almak size en azından bir hata bulduğunuzda inleme yapacak biri verir.
PeteH

3
Burada bana inilti çekinmeyin, her zaman SE olmak için yeterince üzgünüm!
Tim

2
İyi çaba! Bununla birlikte , geçmiş geçmiş codereview.stackexchange.com'u çalıştırmayı düşünmelisiniz - stil rehberine tamamen uyumlu değilsiniz ve çok fazla tekrar var (örneğin bir işlev eklemeyi düşünün def get_int_input(prompt, min_=None, max_=None):). Ayrıca, strftimesize biraz iş kazandıracak.
jonrsharpe

@jon sadece şimdi yapıyor ... varyasyonları nedeniyle zor ... 15 dakika;)
Tim

@jon Aslında, 13 dakika sonra ... düzenleme ;-)
Tim

3

Bir seçenek RaceSplitter . Bu bir iOS uygulaması, maliyeti 35 $. Çalıştırmak için uygun bir iPad, iPhone veya iPod Touch'a ihtiyacınız olacak.

Önceden bir başlangıç ​​listesi girebilirsiniz. Yarış sırasında, bitiş çizgisini geçerken binici numarasını girmeniz yeterlidir ve zamanlarını kaydeder. Daha sonra sonuçları web sitesinde yayınlayabilir ve Excel'e vb. Dışa aktarabilirsiniz.

Bunu kendim denemedim, ancak birkaç yerel yarışta kullanıldığını gördüm. Zamanlama için iyi çalışıyor gibi görünüyor ve yarıştan kısa bir süre sonra sonuçları çevrimiçi olarak aldılar.


Bu tam olarak ihtiyacım olana benziyor! Teşekkür ederim!
krakovjak

1

Liuto tarafından üretilen android telefonlar için bir uygulama kullandık. Harika, öğrenmesi kolay / kullanımı kolay ve ucuz - sadece 1,11 $. Temel olarak, her sürücü başlangıç ​​numarasına göre söndüğünde, dönüşlerinde karşılık gelen sayıya dokunursunuz ve toplam geçen süreye karşı sürelerinin hesaplanması tamamlanır. Aksi!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.