2015-08-25 88 views
-1

我的程序按預期方式在我的桌面上運行,但不在筆記本電腦上運行,即使它安裝的是相同版本的Python。Python 2.7.10在兩臺不同的計算機上運行代碼不同

  • 桌面運行Windows 7和
  • 筆記本電腦運行Windows 8.1,但我升級到Windows 10,看看是否能解決這個問題。它沒。

有人能告訴我我做錯了什麼嗎?

import random 

count = 0 
food_list = [ 
    "Pizza", 
    "Italian", 
    "Hamburger", 
    "Sandwiches", 
    "Salads", 
    "Chinese", 
    "Seafood", 
    "Mexican", 
    "French", 
    "Deli", 
    "Indian" 
] 
food_choices = [] 

# Header and description text 
print " " 
print "*" * 30 
print "*" * 30 
print " " 
print "Food Options 1000" 
print " " 
print "Tell the Food Options 1000 how many options you want to select from" 
print "and it will provide you with that amount of appropriate food choices." 
print " " 
print "*" * 30 
print "*" * 30 
print " " 
# --- End header and description text --- 

print "You have a total of %d choices from which to choose." % len(food_list) 
print " " 

# Receive user input and assign to a variable 
optNum = int(raw_input("How many options do you want to have? ")) 

# Show how many choices user selected 
print " " 
print "Your %d choices are: " % optNum 
print " " 

# Run while loop until user selection integer is met 
# Print food choices in the amount of user chosen number 
while count != optNum: 
    fc = random.choice(food_list) 
    if fc not in food_choices: 
     food_choices.append(fc) 
     count += 1 

for i in food_choices: 
    print i 

print " " 
print " " 

我的成績從桌面:

多少選擇你想擁有? 8

你8個選擇是:

沙拉熟食墨西哥中國比薩漢堡三明治法國

從筆記本電腦的結果:

多少選擇你想擁有? 8

你8個選擇是:

沙拉熟食墨西哥中國比薩墨西哥法國人法國

UPDATE:

我通過USB棒移動的文件到筆記本電腦的建議f.rodrigues 。棒上的文件正常工作,並不顯示重複。在複製粘貼代碼中,有不知何故在47處丟失了一行。

謝謝大家。

+4

您是否100%確定您在兩臺計算機上運行完全相同的代碼? – Kevin

+1

你能解釋一下代碼的運行方式嗎?你的預期結果是什麼?發佈每個平臺的結果。你確定你在兩個系統上都有正確的python版本嗎?和所有的依賴關係安裝? – onebree

+0

是的,我通過遠程協助將整個代碼剪切並粘貼到筆記本電腦上的文件中,同時兩臺計算機都在屏幕上顯示代碼。 – CogentCripple

回答

1

我覺得很難相信你正在使用SAME代碼。

你說你複製粘貼到其他機器。

如果是這種情況,在這個過程中可能出現了錯誤,也許你的IDE搞亂了縮進。 (可能是由於錯過製表符和空格作爲縮進的使用)

像這樣的事情會發生:

while count != optNum: 
    fc = random.choice(food_list) 
    if fc not in food_choices: 
     food_choices.append(fc) 
    count += 1 

這是比這完全不同:

while count != optNum: 
    fc = random.choice(food_list) 
    if fc not in food_choices: 
     food_choices.append(fc) 
     count += 1 

一個簡單的縮進丟失可以有不同的結果。在這種情況下,它會將更少的項目添加到food_choice

編輯:

msw指出,在OP問題都列出了有8個項目中,只有第二個有重複。

爲此,我認爲這種差異源於此:

while count != optNum: 
    fc = random.choice(food_list) 
    food_choices.append(fc) 
    count += 1 

檢查獨特的線是不存在的。

這將獲得相同數量的項目在列表中,但它可能有重複。

這是從我開始的複製粘貼問題有點遠 - 取。

我看到的唯一方法可以完全確定是使用相同的文件,而不是複製它。使用USB棒,或上傳/下載在線。

+0

看起來OP的循環雖然是非pythonic,但正確縮進。顯示的兩個運行中的每一個都要求8個項目並顯示8個項目。 – msw

+0

是的,我不相信OP寫作的有效性,因爲重複沒有被捕獲。 – msw

0

第一個問題出現是因爲您使用的是隨機號碼生成器。僞隨機算法以種子值開始。如果您沒有明確地將其種子,它將以一天中的某個時間(或其他任意數字)爲基礎進行播種。因此,每次運行程序時,由random生成的數字都會有所不同。這使您可以將隨機生成器設置爲相同的起始種子,因此所有運行都會得到相同的結果。如果在程序開始時使用random.seed('myseed')甚至random.seed(4),那麼每次運行將是相同的。

您的代碼的第二個問題是您正在使用random.choice()來選擇您的選擇;你會得到重複的這種方式,如在你的例子輸出中的「法國法國」。更好使用random.sample(food_list, optNum)其中sample被描述爲

返回從總體序列中選擇的唯一元素的k長度列表。用於無需更換的隨機抽樣。

返回包含人口元素的新列表,同時保持原始人口不變。 ...

+0

我也開始考慮這個問題,但是'if fc not in food_choices:'和下面的塊會和使用'random.sample()'一樣。 –

相關問題