日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python考试编程题九道_一道逻辑推理题的程序实现(纯属娱乐)

發(fā)布時間:2024/1/23 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python考试编程题九道_一道逻辑推理题的程序实现(纯属娱乐) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一份邏輯推理題的程序求解(純屬自娛自樂)

閑來無聊,看到QQ空間上轉(zhuǎn)載了一份變態(tài)推理題的,至少表示我看了十多分鐘無處下手,認(rèn)識的人中有大神居然真的做出來了。。。我不知道他是們那么做的,不過作為編程愛好者,我第一時間想到的是寫個程序把答案找出來(不要吐槽)。于是我就動手了。。。不過,這個簡單的還是花了我2個小時。。。

下面,先給大家看一看題目:

這十道題可謂喪心病狂,因為題目答案高度關(guān)聯(lián),居然出現(xiàn)了多少個A多少個B這樣的選項,不做完全卷根本不知道每道題對錯。。。我簡單分析了一下,也只看出切入點大概在第七八九題和第二題的樣子吧,簡單的分析就可以大概知道答案整體的A選項數(shù)量,然后慢慢推,不過期間貌似也有好幾步要靠試才能試出來。。。。

我承認(rèn)我沒有那推理能力,所以我想到了用一個小程序。。。十層循環(huán)遍歷所有可能方案,然后用十層判斷過濾方案,找到正確答案。

我的程序是用python寫的,用0 1 2 3來代表ABCD,每層循環(huán)變量的取值就代表了每道題的答案,構(gòu)建一個當(dāng)前方案t_result,比如i0 = 1 i1 = 0就對應(yīng)著第一題選B第二題選A。遍歷十層的效果就是這樣,

考慮到可能結(jié)果不止一個,我另外定義一個叫final_result的列表來保存所有符合要求的結(jié)果。

然后是按照題目要求進(jìn)行規(guī)則判斷,即進(jìn)行十層(實際只有九層)if判斷來遍歷所有方案,得到符合要求的結(jié)果,一旦某一環(huán)節(jié)不符合就由continue語句跳出當(dāng)前結(jié)果,進(jìn)入下一輪,一直留到最后的就是正確結(jié)果了!

每道題具體分析與對應(yīng)的代碼如下:

1、第一個答案是A的題目是哪個?()

A、1 B、2 C、3 D、4

對第一道題的約束條件,我使用了for循環(huán)找到當(dāng)前方案中第一個答案是A的題目序號,并與第一題答案對應(yīng)的題目進(jìn)行比較,選項一致的才能通過進(jìn)入下一層過濾。由于觀察發(fā)現(xiàn)ABCD選項答案對應(yīng)的index序號且與ABCD的表示相等,所以最后的判斷可以直接簡化為比較答案序號與答案,如:當(dāng)前方案第一題選A,那么第一道選A的題正好就是第一題,通過。

#規(guī)則一:第一個答案是A的結(jié)果

index = 0

for each_answer in t_result:

if each_answer == 0:

break

else:

if index < 4:

index+=1

#print '第一個答案是A的題是:',index+1

if not (t_result[index] == index):

#print '不符合第一條'

continue

else:

#規(guī)則二:唯一具有兩個相同答案的問題:……

2、唯一兩個具有連續(xù)相同答案的問題是:()

A、5,6? B、6,7? C、7,.8 D、8,9

對于第二題,要求找到唯一兩個連續(xù)相同答案,所以我另寫了一個方法find_same_answer,來得到有連續(xù)相同答案的個數(shù)。

#尋找有相同答案問題的方法

def find_same_answer(result):

count = 0

for i in range(9):

if result[i] == result[i+1]:

count += 1

return count

只有連續(xù)相同答案個數(shù)為1,并且它的位置正好出先在當(dāng)前方案答案對應(yīng)的位置,才能通過。如:當(dāng)前方案選B,find_same_answer返回1,而第6,7題結(jié)果恰好相等,且方案通過。

#規(guī)則二:唯一具有兩個連續(xù)相同答案的問題:

if not ((find_same_answer(t_result) == 1) and ((t_result[1] == 0 and t_result[4] == t_result[5]) or \

(t_result[1] == 1 and t_result[5] == t_result[6]) or \

(t_result[1] == 2 and t_result[6] == t_result[7]) or \

(t_result[1] == 3 and t_result[7] == t_result[8]))):

#print '不符合第二條'

continue

else:

#規(guī)則三:本問題與哪個問題答案相同……

3、本問題答案與那一個問題答案相同?()

A、4? B、9? C、8? D、2

這題相對容易些,只要判斷第三題答案是否與選項對應(yīng)的題目答案相同即可。、

#規(guī)則三:本問題與哪個問題答案相同

if not ((t_result[2] == 0 and t_result[2] == t_result[3]) or\

(t_result[2] == 1 and t_result[2] == t_result[8]) or\

(t_result[2] == 2 and t_result[2] == t_result[7]) or\

(t_result[2] == 3 and t_result[2] == t_result[1]) ):

#print '不符合第三條'

continue

else:

#規(guī)則四:答案是A的個數(shù)……

4、答案是A的問題個數(shù)是:()

A、5? B、4? C、3? D、2

為了搞定這道題并方便后面的判斷,我又寫了一個函數(shù)X_count,來計算當(dāng)前方案中答案為X的題目個數(shù):

#計算答案是X的個數(shù)的方法:

def X_count(result,x):

count = 0

for each in result:

if each == x:

count += 1

return count

如果對應(yīng)的選項答案符合,就可以通過。

#規(guī)則四:答案是A的個數(shù)

if not ((t_result[3] == 0 and X_count(t_result,0) == 5) or\

(t_result[3] == 1 and X_count(t_result,0) == 4) or\

(t_result[3] == 2 and X_count(t_result,0) == 3) or\

(t_result[3] == 3 and X_count(t_result,0) == 2) ):

#print '不符合第四條'

continue

else:

#規(guī)則五:本問題與哪個問題答案相同……

5、本問題答案與那一道題問題答案相同?()

A、1? B、2? C、3? D、4

這道題也好說,只要判斷選項是否成立即可

#規(guī)則五:本問題與哪個問題答案相同

if not ((t_result[4] == 0 and t_result[4] == t_result[0]) or\

(t_result[4] == 1 and t_result[4] == t_result[1]) or\

(t_result[4] == 2 and t_result[4] == t_result[2]) or\

(t_result[4] == 3 and t_result[4] == t_result[3]) ):

#print '不符合第五條'

continue

else:

#規(guī)則六:選A問題個數(shù)與選什么的問題個數(shù)相同……

6、答案選A的問題個數(shù)與答案選勝的的問題個數(shù)相等?()

A、無????? B、C????? C、C??????? D、D

借用X_count方法,道題的判斷不難實現(xiàn),遇上一題類似,只不過對于選項A、無,要麻煩一些,確保選A的個數(shù)與選BCD的個數(shù)都不相同。

#規(guī)則六:選A問題個數(shù)與選什么的問題個數(shù)相同

if not ((t_result[5] == 0 and not((X_count(t_result,0) == X_count(t_result,1)) or\

(X_count(t_result,0) == X_count(t_result,2)) or\

(X_count(t_result,0) == X_count(t_result,3)))) or\

(t_result[5] == 1 and X_count(t_result,0) == X_count(t_result,2)) or\

(t_result[5] == 2 and X_count(t_result,0) == X_count(t_result,2)) or\

(t_result[5] == 1 and X_count(t_result,0) == X_count(t_result,3)) ):

#print '不符合第六條'

continue

else:

#規(guī)則七:與下一題相差……

7、按照字母順序,本題答案與下一題相差()(A與B間,B與A間都差1)

A、3? B、2?? C、1? D、0

這道題如果直接按照題目描述,判斷條件會很麻煩,還涉及到求絕對值,所以我進(jìn)行了簡單的分析,發(fā)現(xiàn)第7題選A的話下一題(第8題)只能選D,選B的話下一題只能選D,選C的話下一題可選A或D,選D的話下一題也只能選D,所以得到這道題的判斷條件:

#規(guī)則七:與下一題相差

if not ((t_result[6] == 0 and t_result[7] == 3) or\

(t_result[6] == 1 and t_result[7] == 3) or\

(t_result[6] == 2 and (t_result[7] == 3 or t_result[7] == 1))or\

(t_result[6] == 3 and t_result[7] == 3) ):

#print '不符合第七條'

continue

else:

#規(guī)則八、九:十道題中元音題數(shù)目……

8、十道題中答案為元音的題目數(shù)為()

A、0? B、1? C、2? D、3

9、是道題中答案為輔音的題目數(shù)為()

A、是合數(shù)? B、是質(zhì)數(shù)?? C、<= 5?? D、是平方數(shù)

這兩道題雖然看起來很嚇人,不過其實如果稍加分析的話,可以排除很多答案,完全可以作為解整份題的突破點。

首先,元音只有A,輔音為BCD。第八題決定了選元音答案(即A)的數(shù)只能為0 1 2 3 ,那么第九題中輔音答案(BCD)個數(shù)也只能為7 8 9 10,不可能小于等于5,第九題C排除,而這四個數(shù)中8 9 10為合數(shù),9又為平方數(shù),所以第九題選D那么A也正確,因此第九題D也排除,又因為第一題就決定了題目中有A選項,所以第八題不選A而輔音數(shù)為7 或 8,所以這兩道題只剩兩種情況可選:輔音數(shù)為7,8選D 9選B;或者輔音數(shù)為8,8選C 9選A。因此判斷條件也就簡化了:

#規(guī)則八、九:十道題中元音題數(shù)目

if not ((t_result[7] == 2 and X_count(t_result,0) == 2) or\

(t_result[7] == 3 and X_count(t_result,0) == 3)):

#print '不符合第八九條'

continue

else:

print '得到了一個結(jié)果!'

10、本題答案為()

A、A????? B、B???? C、C???? D、D

這道題明顯屬于打醬油,答案完全取決于之前的九道題目,不管選什么,只要使得之前的九道題目都合理就好,因此不需要再加判斷。

好了,上面我們寫了那么多,終于可以遍歷并過濾了所有4^10種方案,得到合理的結(jié)果,所以我們還差最后一步,那就是打印的顯示出最終答案。所以,我有的一些了一個打印函數(shù),把列表里的數(shù)字改為祖母選項打印出來:

#打印結(jié)果的方法

def print_result(result):

new = []

for each in result:

if each == 0:

new.append('A')

if each == 1:

new.append('B')

if each == 2:

new.append('C')

if each == 3:

new.append('D')

print new

最后調(diào)用一下這個方法,并把結(jié)果存到final_result列表里:

print '得到了一個結(jié)果!'

print_result(t_result)

final_result.append(t_result)

最后可以再打印一下final_result,看看所有結(jié)果:

print 'final_result',final_result

Ok,大功告成,完整的程序我附在了附件里,按F5運行,就得到了打印出的結(jié)果:

于是,借助計算機(jī),我們費了很少的腦力解出了一份讓無數(shù)人頭疼的邏輯推理題。現(xiàn)在,我們拍著胸脯向周圍的小伙伴們說:這十道題有唯一的答案A, C, B, C, A, C, D, D, B, A? 了!

喬布斯說過,計算機(jī)是人類思想的自行車,學(xué)會用計算機(jī)是一門很重要的技能,它可以讓普通人也有能力做到天才能做的事,甚至完成的更好。所以,下次在生活中遇到令人頭疼的難題時,不妨開拓一下思路,想想可不可以用計算機(jī)程序來解決,可能就會事半功倍呦!

總結(jié)

以上是生活随笔為你收集整理的python考试编程题九道_一道逻辑推理题的程序实现(纯属娱乐)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。