2015-08-25 90 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()'一样。 –

相关问题