2016-04-07 32 views
0

Python'da yeni başlayan biriyim ... Aslında, programlamada yeni başlıyorum. Python, öğrenmeye başladığım ilk programlama dilidir.Python ile programlanması gereken bir bulmaca mı?

Bunu yapmak için bir program yazarak çözmeyi sevdiğim bir bulmaca aldım (bir uygulama olarak), ama yapamadım.

bulmaca aşağıdaki gibiydi:

bir daire yapmak gibi duran, 100 insanlar ki, bunların her biri bir sayı vardır, ilk sayı 1, ikinci bir numara 2 taşıyan taşır ... ve son olarak 100 numarayı taşıyan sonuncusunu bitirmek için ... Birincisi, 1'den daha büyük olanı öldüren kişiyi öldürmek için bir kılıç verildi ... Bu demek oluyor ki o öldürüyor sayı 2 ... Ve sonra 3 numara olan bir sonraki kılıcı verir ... Ve sadece bir tanesi hayatta kalana kadar devam eder! ... Bu kim?

El ile çözmeyi denedim ve cevabı 73 oldu ... Sayı 73 hayatta kalan kişi!

Ancak, nasıl programlayacağınız hakkında bir fikriniz var mı?

Yardımlarınız için teşekkürler!

+0

eklemeyi unutmayın bir pastebin yükledi denediğin kod. – MarkyPython

+0

ama ona ulaştığınızda 100 numara kim öldürüyor? – Keatinge

+0

Çoğunu yapacak bir programım var, ama bununla sona erer: '[97, 1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89]' daire. 97 numara burada kimseyi öldüremez. Kılıcı 97 numaraya verdikten sonra ne yapmak istersin. ** EDIT ** Ben bulmacayı inceledim, kimseden daha büyük olanı öldürerek işe yaramaz gibi gözüküyor, kılıcı olan her kimse sadece her kim öldürüyorsa – Keatinge

cevap

0

Tamam, bu eğlenceli bir sorundur ve bence pythons .pop işlevini kullanmak için harika bir bahane. çember iki kişi kavga ettiğinde her zaman [0], kazanan ve kaybeden hem listeden kaldırılır çevreye eklendiğini değildir [0] kim doğrultusunda yanında daire yaparak, "start" Çünkü

circle = list(range(1,101)) 
#100 people numbered 1-100 


while len(circle) > 1: #run this code as long as the circle has more than one person 
    print(str(circle[0]) + " kills " + str(circle[1])) 
    survivor = circle[0] #save the survivor to a variable 
    circle.pop(1) #remove the person killed from the list 
    circle.pop(0) #remove the person who survives from the list 
    #now the new start of the list is whoever is next in line 

    circle.append(survivor) #re-add the survivor to the list at the end 

print(str(circle[0]) + "is the winner") #print out the survivor 

Bu

çalışır . Sonra kazanan geri

onu koyarak, listenin sonuna yeniden eklenir Ben dairenin tam evrimi yazdırmak için birkaç hatları eklenmiş ve http://pastebin.com/raw/z6ghuqE3

+0

Bu harikaydı! :-) Çok teşekkür ederim. Programınızı okuyup anlamaya çalışacağım! Python'u nereden öğrendin? –

+0

Birkaç hafta önce googles python sınıfıyla (youtube'da mevcut) başladım: https://www.youtube.com/watch?v=tKTZoB2Vjuk ama diğer dillerde çok fazla arka planım var. Bu yüzden – Keatinge

+0

Sen bir dahisin! :-) .... Bağlantınızı kontrol edeceğim ... Ve her şey için teşekkür ederim! –

-1

Açıkçası bunu kendiniz çözdünüz ... Nasıl? Python'u aynı şekilde yapabilir misin? Bunu nasıl yapılır (kişinin ölümüne zaman duracağını bilmek bir öğrenme egzersiz yapıyoruz Çünkü

en

nasıl hayatta kim takip edecek birkaç farklı şeyler

düşünelim gidiyor başka bir cevap sağlamıştır Çünkü beni güldürmek) ve nasıl ben

veya "Python kontrol yapıları" "Python yineleme" gibi bir şey googling öneririm doğru yolda seni almak için kılıcı

geçmesi için gidiyoruz yinelemeli bir yaklaşım Ben problemi çözmek için özyinelemede kullanacağım, burada fonksiyon çıkış koşuluna ulaşıncaya kadar kendini çağırıyor.

numPeople = 100 
theCircle = list(range(1, numPeople + 1)) 

#Solve with recursion 
def massacreRecursion(theCircle): 
    #Exit condition 
    if len(theCircle) == 2: 
     theCircle.pop(1) #kill the last victim so len(theCircle) == 1 is True 
     print(theCircle[0]) #Print the survivor 
    else: 
     theCircle.pop(1) #kill some poor pleb 
     theCircle.append(theCircle.pop(0)) #rotate the circle left 1 effectively passing the sword right 
     massacreRecursion(theCircle) #do it again and again and again... 

#enter the recursion 
massacreRecursion(theCircle) 
+0

Bunu yapacağım! :-) .... Ve sana çok teşekkür ederim! .... Python'u öğrenmek için en iyi olduğunu nereden düşünüyorsunuz? –