Форум сайта python.su
задачка про быков и коров. Компьютер загадывает число из четырех цифр, а пользователь пытается их отгадать. После каждого предположения пользователя компьютер сообщает “бык” про каждую цифру стоящую на своем месте и “корова” про каждое число правильно угаданное но стоящее не на своем месте… Собственно саму программу я сделал. У меня проблема вот в чем, если пользователь вводит число начинающееся не с нуля, то я легко перевожу это число в массив. а если оно начинается с нуля, то вся моя программа псу под хвост… Нащел временный выход из положения, компьютер загадывает число от 1000 и до 9999. вместо того чтобы он загадывал от 0001 до 9999.
как сделать чтобы при ручном вводе 0001 я в переменной получал массив ??? Если интересно могу код выложить…
Офлайн
Работайте со строками, а не с числами. При ручном вводе строки ‘001’ вы легко получите массив
Офлайн
хм, а поподробней можно? Как мне получить массив такой???
Офлайн
Хм, можно и поподробнее:
In : input = ‘001’
In : list(input)
Out:
Офлайн
Спасибо, но нашел более изящный способ…
a=raw_input() # к примеру пользователь вводит 0003
a=[int(a),int(a),int(a),int(a)]
и в а получаю массив
Отредактировано (Ноя. 9, 2009 00:01:57)
Офлайн
Хм…
map(int, raw_input())
Офлайн
Tapo4e4ekДа уж, поистине более изящный способ :)
Спасибо, но нашел более изящный способ…
a=raw_input() # к примеру пользователь вводит 0003
a=[int(a),int(a),int(a),int(a)]
и в а получаю массив
Офлайн
Да уж, поистине более изящный способ:)
+1 ))))))
Офлайн
Вариант:
# -*- coding: cp1251 -*-
import random
class Game(object):
def __init__(self):
self.play=True
self.new()
self.run()
def run(self):
while self.play:
self.plword=raw_input()
l=map(int,self.plword)
l=l[:4]
for i in xrange(len(l)):
if l[i]==self.word[i]:
print "Корова",
else: print "Бык",
if l==self.word:
print "Вы выйграли!!!"
self.play=False
def new(self):
self.word=map(int,str(random.randrange(1000,9999)))
g=Game()
Офлайн
На самом деле я только учусь на программиста и поэтому многого из выше представленного кода я не понял…
Кроме того я попробовал запустить этот код и у меня выдало Бык бык бык бык… Так что ваш код не работает. Но в любом случае выкладываю свой код (рабочий). Только не надо критиковать за нагроможденность, просто многому нас еще не учили. Учу питон только с сентября месяца.
#! /usr/bin/env python
from random import randint
# from text to numbers in array
def texttoar(a):
b=0
c=[]
while b<len(a):
c= c +[int(a[b])]
b+=1
return c
# random number in array without same numbers
def number(x):
a=[]
c=0
while len(a) != len(same(a)) or c != x:
c=0
a=[]
while c<x:
b=randint(0,9)
a=a+[b]
c+=1
return a
# from number to array
def inarray(a):
s=[]
e=1
while e<=a:
e=e*10
e=e/10
b=a
z=10
while b>0:
c=b%z
s=[c]+s
b=(b-c)/10
return s
# remove same numbers
def same(a):
b=[]
for i in range(len(a)):
if a[i] not in b:
b=b+[a[i]]
return b
# lets count cows and bulls
def howmany(a,b):
c=0
d=0
for i in range(len(b)):
if a[i] == b[i]:
c+=1
b=same(b)
for w in range(len(b)):
if b[w] in a:
d+=1
return c, d-c
# transform owr array to number
def arraytotext(a):
b=10**(len(a)-1)
c=0
for i in range(len(a)):
c=a[i]*b+c
b=b/10
return c
print "===Lets start the game==="
a= number(4)
b= []
c=1
while a!=b:
b= raw_input("Try to guess the number:")
b= texttoar(b)
if len(a) != len(b):
print "Write the number correctly"
elif a == b:
print "=========Congratulations, you win in:", c , " turns========="
print "=========Your number was:", arraytotext(a), "========="
if c > 7:
print "=========I am shure you can better========="
else :
print "==========It is a very good result=========="
else:
bulls, cows = howmany(a,b)
print bulls, " Bulls and ",cows, " Cows"
c+=1
Отредактировано (Ноя. 9, 2009 19:08:58)
Офлайн