想不明白,这段python小代码有什么问题吗?

神秘的喵星人与享乐的汪星人 发布于 2016/02/23 10:24
阅读 379
收藏 0

这段小代码执行后(在python3.1环境下),只有光标在一闪一闪,既不报错,也不显示结果。

但如果把temp=""改为temp=" ",就能显示结果。

一行一行在测试环境下运行也都正常的。

这是为什么呢?

# 随机读取单词中的字母,重新排列

import random

word=input("输入一个英文单词:")
x=len(word)
temp=""

while len(temp)<x:
    letter=word[random.randrange(0,(x-1))]
    if letter not in temp:
        temp = temp+letter

print(temp)

input("\t按回车键结束。。。")



加载中
-1
幻视Vision
幻视Vision

下面的是前几天练习的代码。


"""
如何将一组字符串打乱原有顺序.py
http://bbs.bathome.net/thread-39382-1-1.html
2016年2月16日 11:25:56 依山居
"""

#方法1 利用集合无序的特性乱序,每次程序重新运行输出的序是不一样的。
#同理可以字典键唯一且无序的也是可以的。
s="爱民 玉伟 伟博 如祥 良智 富强 光耀 智博 来德 金吉 李松海"
print(set(s.split()))

#方法2 优先推荐python内置random.sample()
import random
ss="爱民 玉伟 伟博 如祥 良智 富强 光耀 智博 来德 金吉 李松海"
ns=ss.split()

#运行可见下面相同的代码输出内容的顺序不一样。
rs=random.sample(ns,len(ns))
print(rs)

rs=random.sample(ns,len(ns))
print(rs)

#方法3 论坛里的ivor发现了更好的方法random.shuffle(items)

random.shuffle(ns)
print(ns) #不是返回新的列表而是直接修改ns的顺序

try:
    input("回车退出")
except SyntaxError:
    pass


简化你的代码可以这样:


"""
打乱一个单词的字母顺序.py
2016年2月23日 22:12:51 codegay
http://www.oschina.net/question/2649160_2152188
"""
import random
word=list(input(""))
print(word)
random.shuffle(word)
print(word)




神秘的喵星人与享乐的汪星人
神秘的喵星人与享乐的汪星人
感谢你的回答。
1
神秘的喵星人与享乐的汪星人
神秘的喵星人与享乐的汪星人

我知道错在哪里了。random.randrange()的上下取值理解不对。

正确的是这样(而且这段程序写得还有个问题:这个单词不能有重复的字母):

# 随机读取单词中的字母,重新排列

import random

word=input("输入一个英文单词:")
x=len(word)
temp=""

while len(temp)<x:
    letter=word[random.randrange(0,x)]
    if letter not in temp:
        temp = temp+letter
        
print(temp)

input("\t按回车键结束。。。")



1
H
Handsome2734
空字符串是False,含有一个空格的就是True
1
从前是菜鸟
从前是菜鸟

基本思路是将输入的单词(字符串)先转换为一个列表,然后使用 random 方法将列表中的元素顺序打乱,最后再把乱序的元素重新组合成一个新的字符串。

# random.sample 不会改变原始字符串
import random

word = list(input('Enter a word: '))
tmp = random.sample(word, len(word))
result = ''
for i in tmp:
    result += i
print(result)




# random.shuffle 做原地修改
import random

word = list(input('Enter a word: '))
random.shuffle(word)
result = ''
for i in word:
    result += i
print(result)




从前是菜鸟
从前是菜鸟
回复 @幻视Vision : 确实方便,一行代码代替for循环直接输出:print(''.join(list))
幻视Vision
幻视Vision
用''.join(list) 连接list转成字符串。少代码。
返回顶部
顶部