**若代码有误,欢迎大家指正。**
1、猜数游戏
from random import randint
ran = randint(0,9) #产生0-9之间的整数(包括9)
number = eval(input("请输入你猜测的数字:"))
N = 1
while(ran != number):
if(ran > number):
print("遗憾,太小了")
else:
print("遗憾,太大了")
number = eval(input("请输入你猜测的数字:"))
N = N + 1
print("预测{}次,你猜中了!".format(N))
运行结果
请输入你猜测的数字:2
预测1次,你猜中了!
2、统计字符个数
s = input("请输入一行字符:")
letter = 0 #字母
Space = 0 #空格
number = 0 #数字
character = 0 #其他字符
for i in s:
if ord("a") <= ord(i.lower()) <= ord("z"):
letter += 1
elif ord(" ") == ord(i):
Space += 1
elif ord("0") <= ord(i) <= ord("9"):
number += 1
else:
character += 1
print("英文个数:" + str(letter))
print("空格个数:" + str(Space))
print("数字个数:" + str(number))
print("其他字符个数:" + str(character))
运行结果
请输入一行字符:I am a 20-year-old college student.
英文个数:25
空格个数:5
数字个数:2
其他字符个数:3
3、最大公约数
a, b = eval(input("请输入两个整数(用,分隔)"))
c, d =a, b
while(b != 0):
a, b = b, a % b
b = int(c * d / a)
print("这两个整数的最大公约数为:" + str(a) + ", " + "最小公倍数为:" + str(b))
运行结果
请输入两个整数(用,分隔)1253,864
这两个整数的最大公约数为:1, 最小公倍数为:1082592
4、猜数游戏续
from random import randint
ran = randint(0,100)
number = eval(input("请输入你猜测的数字:"))
N = 1
while(ran != number):
if(ran > number):
print("遗憾,太小了")
else:
print("遗憾,太大了")
number = eval(input("请输入你猜测的数字:"))
N = N + 1
print("预测{}次,你猜中了!".format(N))
运行结果
由于结果行数过于累赘,这里就不再显示运行结果了。
如果读者想知道运行结果如何,那还请自己去执行!
5、猜数游戏续
from random import randint
ran = randint(0,100)
N = 1
while(1):
try:
number = eval(input("请输入你猜测的数字:"))
if(not(isinstance(number, int))):
print("输入内容必须为整形!")
continue
elif(ran > number):
print("遗憾,太小了")
elif(ran < number):
print("遗憾,太大了")
else:
break
N = N + 1
except:
print("输入内容必须为整形!")
print("预测{}次,你猜中了!".format(N))
运算结果
不展示运行结果了。
不过在此讲一下输入的问题:
当你输入字母,就会抛出异常,此时会被except所接受并使print打印字符串。
当你输入浮点数,number就会指向浮点数,在 if(not(isinstance(number, int)))
中,就会判断出来,读进来的数不是整数,这时也会输出字符串。
其实上方代码还存在一个问题,当你输入ran时,就会出现number = ran 这是合法的。
解决方案:
不再使用try和except,直接多分支结构
不提前把“”去掉,也就是说不要提前eval()。
先判断字符串是否含有字母,如果含有,则提示用户输入错误。
过了这门槛之后,再调用eval()去掉“”,
然后再if(not(isinstance(number, int)))判断是否是整数,
其余的代码一样,具体实现就交给读者了。(读万卷书,不如行千里路)
如果读者有更好的想法,欢迎下方回复,互相学习
6、羊车门问题
根据题目的意思,门后面物品的次序应该是固定的,不用每次实验都打乱。
from random import *
time = 0 #实验次数
N1 = 0 #坚持选择获胜的次数
N2 = 0 #改变选择获胜的次数
while(time != 100000):
s = [0, 0, 1] # 0代表羊,1代表车,下标代表门
a = randint(0, 2)
k = randint(0, 1)
if k != a:
s[k] = 2
else:
s[1 - k] = 2
if(s[a] == 1):
N1 = N1 + 1
for i in range(3):
if (s[i] != 2) and (i != a):
a = i
break
if (s[a] == 1):
N2 = N2 + 1
time = time + 1
print("参赛者坚持选择获胜的概率为:{}%".format(N1 / time * 100))
print("参赛者改变选择获胜的概率为:{}%".format(N2 / time * 100))
运行结果:
参赛者坚持选择获胜的概率为:33.400999999999996%
参赛者改变选择获胜的概率为:66.599%
如果每次实验都打乱门后面物品的次序,其结果为
参赛者坚持选择获胜的概率为:33.219%
参赛者改变选择获胜的概率为:50.105999999999995%
这可能是由于同时改变了实验2个因变量的缘故(这是个人见解,欢迎指教)
下面给出每次实验打乱次序的代码。
from random import *
time = 0 #实验次数
N1 = 0 #坚持选择获胜的次数
N2 = 0 #改变选择获胜的次数
while(time != 100000):
s = [0, 0, 1] # 0代表羊,1代表车,下标代表门
a = randint(0, 2)
shuffle(s)
sknow = [] #为了知道门后面是什么,创建一个新的列表,存放羊和车具体在那个门后面
for i in range(3):
if (s[i] == 0):
sknow.insert(1, i)
else:
sknow.append(i)
k = randint(0, 1)
if sknow[k] != a:
s[sknow[k]] = 2
else:
s[sknow[1 - k]] = 2
if(s[a] == 1):
N1 = N1 + 1
for i in range(3):
if (s[i] != 2) and (i != a):
a = i
break
if (s[a] == 1):
N2 = N2 + 1
time = time + 1
print("参赛者坚持选择获胜的概率为:{}%".format(N1 / time * 100))
print("参赛者改变选择获胜的概率为:{}%".format(N2 / time * 100))
7、异常处理改造实例1
while(1):
TempStr = input("请输入温度值符号F或者C(大小写都可):")
if (TempStr != 'F' and TempStr != 'f') and (TempStr != 'C' and TempStr != 'c'):
print("输入格式错误,请重新输入")
continue
try:
x = eval(input("请输入不带符号的温度值:"))
if TempStr in ['F','f']:
C = (x - 32) / 1.8
print("转化后的温度是{:.2f}C".format(C))
break
elif TempStr in ['C', 'c']:
F = 1.8 * x + 32
print("转化后的温度是{:.2f}F".format(F))
break
except:
print("输入格式错误,请重新输入")
运行结果
请输入温度值符号F或者C(大小写都可):f
请输入不带符号的温度值:65
转化后的温度是18.33C
请输入温度值符号F或者C(大小写都可):c
请输入不带符号的温度值:as
输入格式错误,请重新输入
请输入温度值符号F或者C(大小写都可):d
输入格式错误,请重新输入
请输入温度值符号F或者C(大小写都可):c
请输入不带符号的温度值:25
转化后的温度是77.00F